云中SLA合规性分析:基于模型的自动化方法

白皮书摘要

这篇博文包含一份白皮书和一份调查问卷。白皮书解释了正式模型如何与静态分析工具和生成的运行时监控器相结合,从而实现服务在云上的SLA软件部署。提议的方法非常适合DevOps方法。

PDF格式
下载此白皮书的pdf在这里.

 

问卷调查
我们将感谢您反馈在这张白皮书上。

 

1.以模型为中心的SLA合规性分析

每个客户都想确定他们购买的产品的质量。在云世界中,这种质量保证包括对服务性能的保证。(其他重要问题包括安全方面、支持、数据和数据保护[云指南2014].)

服务水平协议(SLA)是由云服务提供商及其客户签署和同意的法律文件,其中记录了约定服务质量的规范。违反SLA将导致罚款,并可能导致金钱、客户和信誉损失。尽管风险很高,但只有少数功能有限的工具可用于检查云服务是否符合SLA。为什么为SLA合规性检查提供工具支持如此困难?

首先,出现了大量复杂且具有挑战性的问题:如何描述服务的性能?应该为特定服务分配多少资源?如何在运行时做出最佳反应,以利用云的弹性?如何估计服务的未来行为并相应地调整资源配置?

这些都是具有挑战性的问题!对于任何给定的SLA和任何给定的软件,以通用方式解决这些问题超出了当前技术的范围。为了开发SLA合规性检查工具,我们认为必须在模型:重要的是要以独立于云服务提供商提供的具体技术的方式描述和分析SLA。转移到建模级别可以提高抽象级别,降低复杂性,并消除对特定运行时环境的依赖性。

模型的重要性不仅适用于SLA,也适用于软件:以模型为中心的方法允许我们创建SLA基本方面的正式表示。同时,部署在云上的软件可以表示为一个可执行模型,该模型使用参数表达式进行注释,以便使用资源。结合这些模型,我们现在可以使用具有正式基础的技术,例如最先进的静态软件分析,为服务性能提供经验证的保证,从而大大提高自动化程度。

以模型为中心、基于工具的SLA分析的优点
SLA设计和法规遵从性的有效解决方案必须协调服务提供的所有阶段。它必须包括

  • 协助配置SLA度量边界和资源部署,以符合部署在云上的给定服务
  • 运行时对服务的自动监视
  • 对违反SLA的行为作出迅速反应并协助解决
  • 部署:显著简化和提高自动化

2.测量什么?要验证什么?

服务性能指标用于定量和定期测量和评估服务的性能水平。典型指标分为以下类别之一:

可利用性是服务的属性,可以按需访问和使用。它包括()的正常运行时间水平,即服务在定义的时间段内启动的时间百分比;(ii(ii))的百分比成功的请求,即处理的请求数与提交的请求总数相比没有错误;()的及时服务配置请求的百分比,即在定义的时间段内完成的服务配置请求数与服务配置请求总数之比。

响应时间是客户端请求事件和服务响应事件之间的时间段。用于约束响应时间的服务度量可能返回平均时间或a最长时间,给定特定形式的请求。

容量是服务使用的最大资源量。它包括服务吞吐量指标,即服务在指定时间段内可以处理的最小请求数。

图1

图1:服务质量水平

有几个因素影响服务的质量水平,如图1。它们可以分类为内部的,例如可用资源或计算复杂性,以及外部的后者不受利益相关者的直接控制,包括网络可用性或访问/请求数量。

内部因素主要可以在部署时通过直接验证代码(静态分析)或借助底层数学模型(模型检查、仿真等)的技术进行控制(如果需要,还可以进行修改)。每当服务实现不符合度量标准时,设计者就会进行代码修改,最终导致符合性。一个典型的例子是对资源容量衡量关键资源的使用量。例如,静态分析技术可以确定服务所需虚拟机数量的上限;如果一个服务部署在数量不足的机器上,那么它的响应时间就会增加,甚至变得不可用。

无法预先控制或分析外部因素,但可以通过独立于服务实现运行的监控代码对其进行监控。始终需要进行监控,因为有些(性能)指标受外部因素影响,无法进行静态验证,例如硬件故障。在这种情况下,服务实现和资源配置都没有问题。然而,运行时监控器仍然很有用,例如,当它触发动态资源重新分配以补偿故障组件时。

3.工作流程

第1节我们认为,以模型为中心的SLA和服务表示是云服务配置和部署高级工具支持的基础。第2节我们解释了服务质量是如何受到内部因素的影响的,这些因素将通过根据SLA对服务实现进行合规性检查来解决;并通过外部因素,在运行时监控器的帮助下进行缓解。图2我们演示了实现这种场景的工作流程。

静态(部署时)技术在生成运行时技术(例如,监控)中使用的度量和监控器方面发挥着重要作用。反馈回路(用虚线表示)表示分析的前一阶段,代表对系统的修改,以确保合规性。

图2

图2:服务配置和部署的工作流程

谈判阶段。此阶段包括签署SLA之前可能发生的一切。在此阶段,将设置SLA指标,以便服务模式可以根据它们进行验证。SLA以机器可读的标准格式(ISO 19086-2)和数学格式编写度量函数,表示可能测量的上限,从中提取资源配置是用为服务分配的资源类型定义的。这样的初始资源配置可以手动指定,也可以由求解器自动计算,该求解器可以在已知要部署的初始对象、所需计算资源和资源成本的情况下,向对象返回资源的最佳分配。同时,从实际服务实现的组件中提取出一个可执行的服务模型。实际的配置服务实现由服务模型生成,并且已部署根据资源配置。

一套部署时工具现在接受这三个输入(SLA度量函数、服务模型和资源配置),并生成响应作为输出,以形成可行性评估。这些工具可以验证以下属性:资源消耗的上限(带宽、虚拟机、内存分配、CPU处理周期)、活动性(死锁-自由)、安全性(功能)。如果工具报告某个服务模型违反了SLA约束,那么可以在协商阶段放松约束或适当扩大资源分配(可能会向客户端收费)。这些工具还可以生成测试用例,用于验证服务模型是否捕获了实现。

因此,部署时分析提供的反馈通过丢弃资源配置来指导协商阶段,这会阻碍服务满足SLA的能力。考虑到可用的资源,反馈还可以用于选择更好的度量界限。第三个反馈回路可以连接回程序,并允许应用代码中的更改,以便更好地适应给定的SLA和可用资源。

一旦配置得到部署时工具的批准,确保,在没有外部因素的情况下,服务实现和资源配置符合SLA—下一阶段可以开始。

观察阶段。SLA已签署,服务已启动并正在运行。在这一阶段,受到外部控制的因素(如网络基础设施)可能会发挥作用,并以无法静态预测的方式影响服务的行为。为了监控服务指标,我们使用了一个监控系统,即服务外部的代码,该代码持续监控其执行。

监视器的代码是自动生成(或配置)的,从它们要监视的特定度量函数开始。在此阶段,可以使用静态技术来证明生成的代码的正确性,即监控器正在观察正确的属性。此外,可以在运行时定期对服务模型再次执行静态技术,以估计服务在下一个时间窗口中的未来行为。监测系统的反馈可以显著提高分析的精度。

反应阶段。监控系统允许服务提供商报告违反商定SLA的情况。然而,提供商的最终目标是保持资源配置,使SLA违规保持在给定阈值以下,同时最小化运行系统的成本。第一个目标可以通过向服务添加资源来实现(例如,添加更多CPU)。

观察阶段对服务进行测量。随后,如果观察到SLA不匹配,则在反应阶段,分配的资源数量会相应增加或减少。与初始配置一样,在这个阶段,可以手动或自动修改分配给对象的资源。在已知当前资源配置和监控框架指示的新需求的情况下,解算器计算部署新对象时应如何分配新资源,或者应如何取消部署不再需要的旧对象和资源。由于监控框架和外部部署求解器的联合使用,可以获得全自动动态弹性。

4.ABS:用于部署在云上的系统的建模语言和工具套件

ABS是一种建模语言,可用于根据第3节。下面的方框简要概述了ABS。有关更多信息,请参阅网址:http://www.abs-models.org.

ABS建模语言(http://www.abs-models.org).
ABS是一种抽象行为规范语言,它将实现级规范与可验证性、高级设计与可执行性、形式语义与实用性相结合。ABS是一种基于简单函数语言和用户定义的代数数据类型构建的并发面向对象建模语言。模型很容易理解,并且使用熟悉的类似Java的语法编写。ABS支持部署决策的建模和分析。可以表达和分析模型的资源需求和时序属性,这使得在模型级别比较部署决策变得容易。

 
ABS是一种用于分析的建模语言。它的优势之一是可以使用大量的分析和部署工具组合。

ABS工具套件(http://abs-models.org/abs-tools).

  • 仿真工具允许快速模型浏览和可视化
  • 死锁分析工具自动检查模型是否无死锁,重点是模型中的通信协议
  • 系统性睾丸素g工具提供了一种技术,用于消除ABS模型并发执行的冗余测试用例。
  • 测试用例生成工具用于自动生成ABS中并发对象的测试用例
  • 终止和资源消耗工具自动推断模型中选定部分的成本边界,例如执行成本或传输数据大小
  • ABS智能部署器在给定组件应如何连接及其资源需求的用户规范的情况下,找到虚拟机上组件的最佳部署
  • 代码生成工具使用Haskell或Java库在实际机器上实现快速原型制作并与其他程序集成。形式化验证工具支持对行为属性进行演绎分析,包括通信痕迹
  • SLA指标的监控框架用于根据SLA自动为部署的系统配置正确的监控器,并在较高级别上监控系统

5.示例

弗雷德霍普提供Fredhopper Cloud Services,通过云计算基础设施(IaaS)为电子商务公司提供大型产品数据库上的搜索和目标定位功能(SaaS)。Fredhopper Cloud Services带动了350多家全球零售商,每年的在线销售额超过160亿。Fredhopper的客户(服务消费者)是一家网店,而最终用户是该网店的访问者。

模式

图3:Fredhopper云服务的体系结构

Fredhopper提供的服务在端点公开。实际上,这些服务实现为RESTful,并通过HTTP接受连接。软件服务部署为服务实例。每个实例提供相同的服务,并通过负载平衡器端点公开,这些端点在服务实例上分发请求。图3显示了Fredhopper云服务的框图。

请求的数量随着时间的推移可能会有很大变化,通常取决于几个因素。例如,大多数最终用户所在时区的一天中的时间起着重要作用。在凌晨2点到5点之间观察到典型的需求低点。图4显示中监控数据的可视化格拉瓦纳(ABS使用的可视化框架)。

客户度量-1图4:指标可视化

SLA。Fredhopper云服务的峰值通常出现在商店促销期间或圣诞节前后。为了确保高质量的服务,网络商店与Fredhopper协商了一份积极的服务水平协议(SLA)。感兴趣的QoS属性包括查询延迟(响应时间)和吞吐量(每秒查询数). 与客户协商的SLA可以表示,例如。,服务退化要求如下:

服务必须保持每秒100个查询,响应时间小于200毫秒,超过服务正常运行时间的99.5%,99.9%的响应时间小于500毫秒

SLA指定服务度量函数的属性。在这种情况下,服务度量函数是根据以“慢”方式处理的客户端请求的百分比定义的。对于示例SLA,服务降级与慢于200(500)毫秒的查询的百分比有关。

规范化服务度量函数。在ABS中,我们通过某种语法将服务度量函数形式化为事件跟踪到值的映射。这些事件表示客户端与公开服务API的端点的交互。这些值对应于所提供服务质量的不同级别。语法是一种用户友好的形式主义,特别适合于事件跟踪的面向数据和面向协议的属性的规范。不需要了解有关它们的技术细节。

假设我们希望形式化我们的服务降级度量。我们确定通过事件与公开服务API的端点交互的客户端请求的处理

invoke(时间t,Rat进程时间)

此事件表示请求已在t吨并且请求具有合理性进程时间作为其处理时间。在我们的形式化中,服务视图标识与特定服务度量相关的所有事件,并将名称与每个此类事件关联。简单地将调用事件标识为唯一相关事件并将名称“查询”与此事件关联的视图表示如下:

查看降级{invoke(Time t,Rat procTime)查询}

图5显示了计算慢查询百分比作为主要指标的语法退化,退化.字符串“fas.live.200毫秒“给出了度量的名称。调用事件的参数进程时间,在语法中直接以其名称引用,并用于计算退化,退化语法进一步利用了辅助概念碳纳米管慢Cnt.

Pair<String,Rat>degradement=Pair(“fas.live.200ms”,0);Int cnt=0;Int slowCnt=0;S::=查询{cnt=cnt+1;slowCnt=slowCnt+案例(procTime>200){真=>1;错误=>0;};降级=对(“fas.live.200ms”,slowCnt/cnt);}S公司

图5:服务降级语法

资源软件服务。我们在ABS中对所示的各种服务进行建模图3抽象层次。通过示例,我们展示了服务实例的模型(图6)和负载平衡服务(图7).负载平衡器通过循环策略分发请求并将其转发给服务实例。真实的服务实例处理请求并返回响应,例如,Fredhopper Cloud Services中的产品列表。ABS模型从详细的实现中抽象出来,并通过语句关注执行成本[成本:成本]log=log+1.注释[成本:成本]是估计指令数的度量。它的初始值可以通过使用SACO工具对ABS工具套件中的模型进行成本分析,或者通过对现有代码的执行时间求平均值来获得。

类ServiceImpl(…)实现服务{...响应调用(请求请求){断言状态==RUNNING;Int cost=成本(请求);Int时间=currentms();[成本:成本]log=log+1;时间=currentms()-时间;延迟=最大值(延迟,时间);返回success();}}

图6:服务实例

类LoadBalancerEndPointImpl实现LoadBalencerEnd点{Int log=0;状态状态=STOP;列表<服务>服务=零;列表<服务>当前=零;...响应调用(请求请求){log=log+1;断言状态==RUNNING;if(current=Nil){current=服务;}端点p=水头(当前);电流=尾部(电流);返回等待p!调用(请求);}...}

图7:负载平衡服务端点

谈判阶段。在接受提议的SLA之前,我们需要确定是否可以通过部署一些服务实施实例。我们假设一个环境服务实施实例在已分配容量属于K(K)执行资源(CPU执行能力,也称为ECU)。

利用中美合作所产量进行静态分析成本/K作为所需的总时间援引方法来回复单个查询,因此我们获得(成本/K)=<0.2作为SLA的第一个绑定。为了满足服务退化我们需要确定符合SLA的配置中的最小资源数量。为了简单起见,我们这里假设请求的到达时间一致,忽略负载平衡和分配的开销,并让n个是具有K(K)我们需要的执行资源。在这种情况下,我们知道(100 x成本/n x K)=<20,我们获得(5 x成本/K)=<n。对于更复杂的场景(尤其是涉及子服务和同步),ABS工具套件非常方便,可以帮助计算所需的机器数量。

这会忽略请求的实际到达时间以及外部的因素(请参见图1)这可能会影响服务的执行。为了确保在非理想条件下符合服务指标,我们使用服务外部的代码来持续监视它。

观察阶段。我们框架中的观察阶段包括计算中语法指定的服务度量函数的值图5来自给定事件跟踪。这涉及到根据语法分析事件跟踪。根据语法,我们自动合成相应解析器的ABS实现。语法的使用允许建立在成熟且广为人知的解析技术之上,并具有最佳性能。观察也可以来自使用HTTP上的API与模型交互的外部系统。

给定系统的ABS模型,我们现在可以重放真实世界日志使用此API,该API根据日志文件中指定的时间为模型生成相应的调用事件(请参见图8).然后根据语法分析调用事件的结果跟踪,以计算“降级”服务度量。

日志重播图8:日志回放

反应阶段。图9显示了与上述语法对应的服务降级监控器。这里度量历史包含通用监控框架提供的度量值的时间戳历史记录。监控框架进一步集成了一个功能强大的工具(ABS Smart Deployer),用于根据部署配置的高级要求自动部署新服务实例。求解器综合ABS类实现部署人员IF使用适当的缩放操作。

单元监控器(DeployerIF部署器){大鼠退化=头(metricHist);如果(退化>5/1000){deployer.scaleUp();}否则,如果(降解<1/1000){deployer.scaleDown();}}

图9:服务降级监视器

上述ABS监控器可以通过调用部署人员来向上或向下扩展服务实例来对这些指标作出反应。运行监控器可能会非常昂贵,并且必须非常小心,以免其本身将性能降低到SLA中规定的水平以下。ABS模型的静态分析与仿真在一起使用监视器可以分析监视器对SLA的影响之前系统已部署。ABS允许异步部署监控器并使其解耦。

问卷调查

你会花钱吗3分钟回答3个简单问题关于这份白皮书?
您的反馈很重要,请回复

https://goo.gl/forms/vMNzDQX6cvLWPE292

作者

本白皮书由以下人员编写:

Frank S.de Boer(1)、Elena Giachino(2)、Stijn de Gouw(3)、Reiner Hähnle(4)、,
艾纳·布罗奇·约翰森(5)、科西莫·拉涅夫(2)、卡伊·潘(5)和吉安路易吉·扎瓦塔罗(2)

(1) CWI荷兰阿姆斯特丹
(2) 意大利博洛尼亚大学和法国INRIA
(3) SDL Fredhopper,荷兰阿姆斯特丹
(4) 德国达姆施塔特大学
(5) 挪威奥斯陆大学

工具书类

[CloudGuidelines2014]云选择行业组。云服务级别协议标准化指南,2014年6月。作为委员会欧洲云战略的一部分开发。可在http://ec.europa.eu/information_society/newsroom/cf/dae/document.cfm?action=display&doc_id=6138.

留下回复