大数据实践 DevOps/配置优化
找到数据密集型应用程序的最佳配置是一个具有挑战性的问题,因为影响其性能的参数数量众多,并且缺乏分析模型来预测更改的影响。为了解决这个问题,DevOps 可以结合调整方法,在这些方法中,实验者被赋予有限的实验预算,需要谨慎地分配此预算以找到最佳配置。在本节中,我们将讨论一种可以用于在 DevOps 中实现配置优化的方法。
一旦数据密集型系统接近其最终的部署阶段以交付给最终用户,调整其性能和可靠性变得越来越重要。调整在初始原型中也可能很重要,以确定可实现性能的界限。在任何一种情况下,这都是一个耗时的操作,因为候选配置的数量可能非常大。例如,优化 10 个取 ON/OFF 值的配置选项在最坏情况下需要 1024 个实验才能确定全局最优配置。由于数据密集型应用程序可能同时使用多种技术,例如由 Apache Spark 和 Kafka 组成的数据分析管道,因此优化此类系统的配置变得越来越困难。次优配置意味着某项技术的操作成本更高,并且可能无法提供预期的性能,迫使服务提供商提供额外的硬件资源。因此,DevOps 中需要配置优化工具来指导此配置阶段,以便快速找到一个接近最佳的配置。
目前,有一些数学方法和方法可用于寻找最佳配置。
一个经典的数学方法系列是实验设计 (DoE) 方法,这些方法将非线性多项式拟合到响应数据以预测系统在未探索配置中的响应。此类方法提供了一种在特定情况下减少拟合响应模型所需的实验数量的方法,例如那些配置选项是二进制值的配置选项(例如,ON/OFF)。但是,用这些方法很难考虑数十个参数,这些方法通常限于更小的维度(8-10)。
相关方法是在统计学和机器学习中发展起来的方法,用于解决多臂匪问题。这是一个普遍的问题,它抽象地分配了一组有限的资源,而这些资源在可以从决策中获得的奖励方面的信息不完整。这种情況在配置优化中很常见,因为事先不清楚改变配置选项的级别将如何影响系统。这里的关键权衡是决定花多少时间用于开发与探索,而前者是指专注于预期收益最大的优化选项,而后者是指改进对其他优化选项的了解以完善对预期收益的估计。本章提出的方法称为贝叶斯优化,属于此类解决方案技术,并且在选择这种权衡时提供灵活性。
市场上存在一些用于性能优化的商业服务,例如
这些服务部分依赖于顾问的专业知识和技能。这里追求的解决方案是算法化的,并且对于大数据框架而言,很少有类似的方法存在。例如,http://unraveldata.com/ 提供了一个大数据管理解决方案,其中包含针对大数据应用程序的自动调整。关于基础自动调整方法没有公开信息,并且该网站相当含糊,表明这不是该产品的主要功能。相反,这里讨论的解决方案完全针对配置,并以基于高斯过程的创新方法为特色,这些方法在实验上已被证明比科学技术水平更有效。
配置优化 (CO) 使用 DevOps 工具链迭代地对大数据应用程序进行测试。在每次迭代中,使用负载生成器测试新的配置,并收集性能数据。此数据用于训练机器学习模型,以决定在下次迭代中评估系统的配置。使用此决定,测试循环将迭代进行,直到找到满足性能目标的配置。
对于测试系统而言,挑战在于定义一种有效的搜索算法,该算法可以自动决定要运行哪些实验以快速调整系统。调整系统所需的实验越少,该过程就越具有成本效益。主要问题是系统行为难以预测,因此配置参数对性能的影响在负载测试在该参数更改后在应用程序上进行之前可能未知。
BO4CO 是在 DICE 中生产的 CO 的实现,它专注于基于称为贝叶斯优化的技术来优化配置。贝叶斯优化是一种用于黑盒全局优化的机器学习方法。在此方法中,使用高斯过程 (GP) 对系统对新配置的未知响应进行建模,高斯过程是机器学习模型的重要类别。GP 用于预测平台对配置更改的响应。GP 可以考虑与测量相关的平均值和置信区间,预测系统在未探索配置中的行为,并且可以快速重新训练以适应新数据。更重要的是,贝叶斯优化方法在真实系统上的速度可能比任何现有的自动调整技术都快得多。
CO 工具的逻辑是迭代的。配置优化器在每次迭代中自动选择一个配置,使用 BO4CO 算法确定在过程中下一个要测试的最佳配置。BO4CO 使用观察到的性能数据来估计系统的响应曲面。它使用估计的数据选择下一个要测试的配置,寻找有很大机会成为最佳配置的点。这在下面图的左侧进行了说明,该图显示了将这些步骤定义为配置优化过程的步骤。
上面图的右侧提醒了一个重要事实,即基于 GP 的响应模型提供了查询应用程序在未测试配置中的性能的能力,从而提供了一种引导 CO 搜索的机制。特别是,在进行新的测试后,可以评估模型的准确性并向其提供新的观察结果,以改进其准确性以供将来使用。在该方法的 DICE 实现中,除了基于 GUI 的配置选项边界规范之外,还支持自动执行 GP 的训练和预测。
原则上,诸如 CO 之类的方法也适用于迁移问题,但目前它仅在优化新的数据密集型应用程序的背景下使用。许多公司和公共部门组织正在逐步将其应用程序迁移到新兴的大数据框架,例如 Spark、Cassandra、Storm 和 Hadoop。可以预见三个研究挑战
- 基于机器学习的自动调整方法没有针对单个大数据技术进行定制,导致实验时间和成本不理想,特别是当我们将多个托管技术一起使用时,情况会更糟。
- 性能自动调整缺乏在工业大数据环境中的验证,当前的研究集中在学术和实验室测试平台上。
- 大数据需要持续的自动调整,因为工作负载强度和数据量在不断增长。
CO 方法论已经在[5]中针对不同的 Apache Storm 拓扑进行了测试。与默认值相比,CO 找到最佳配置时,对 Storm 拓扑配置和端到端延迟(作业到达拓扑的时间戳与作业完成处理并离开拓扑的时间戳之差)的改进幅度高达 3 个数量级。研究表明,该工具仅在最初的 100 次迭代中就找到了最佳配置。在本实验中,配置参数的全因子组合为 3840,100 次实验等于总实验的 2%。请注意,为了衡量配置优化工具找到的最佳配置与默认配置之间的差异,我们进行了全因子实验(即,每个实验 8 分钟,共 3840 个实验,总计 3480*8/60/24=21 天)。在[6]中可以找到更多针对真实社交媒体平台的应用。
在[6]中也进行了一项验证研究,旨在优化 Cassandra 读取延迟。还考虑了 BO4CO 算法的一种变体 TL4CO。TL4CO 将一种称为迁移学习的技术集成到贝叶斯优化方法中,该技术允许重复使用来自过去配置优化周期的历史数据以加速新的配置周期。有关 TL4CO 的更多详细信息,请参见[6]。实验收集了 20 个参数配置空间中读取和写入操作的延迟与吞吐量测量值。由 CO 工具(使用 TL4CO 和 BO4CO 算法)找到的配置、默认设置以及专家建议的配置都已标注。结果表明,使用 TL4CO 初始化的 CO 工具仅在 20 次迭代后找到的配置,与专家建议的配置相比,延迟略低,但吞吐量高得多。
本章讨论了自动优化数据密集型应用程序配置的问题。Storm 等技术体现了这一挑战,因为它们需要共同优化几十个配置参数,而对每个参数级别如何与其他参数交互并没有很好的理解。CO DevOps 工具说明了一种可能的解决方案。进行迭代实验,直到找到最佳配置。贝叶斯优化是一种黑盒优化技术,与统计学中常用的实验方法(如响应面和实验设计)相比,可以大大加快配置任务。
- ↑ PragmaticWorks
- ↑ Oracle
- ↑ HP
- ↑ Centaurea
- ↑ Jamshidi, Pooyan; Casale, Giuliano (2016). "An Uncertainty-Aware Approach to Optimal Configuration of Stream Processing Systems". IEEE MASCOTS, IEEE Press,.
{{cite web}}
: CS1 maint: extra punctuation (link) - ↑ a b c "Deliverable 5.2. DICE delivery tools – Intermediate version" (PDF). 2017.