对于跨服务通信,而服务所有者归属不同团队所管理,服务等级协议提供了服务间沟通期望机制,也称之为期望管理,服务等级协议是提供某种级别服务可靠性和性能的承诺,对于业务双方是一种约束,双方在这样的约束下开展后续的工作,服务等级协议还可用于企业与用户之间法律或者合同协议,本章节更多讨论内部之间服务等级协议,如什么是服务等级协议,服务等级协议作用。
谈到服务等级协议,一般离不开几个关键词分别是SLA、SLO、SLI这三个关键词有同一共同点,那就是和服务有关,如果脱离服务那就变得毫无意义,服务是一切提供给客服有用功能的服务或者上层产品,这里多数指的是软件服务,这三个目标让其客户或者业务方都能对服务可用性、性能达成共识,如果您的服务出现故障,多久可以快速响应,对速度和功能做出的承诺,因此需要SLA、SLO、SLI,帮助我们遵守这些承诺内部目标及如何行动。
SLA服务等级协议是提供企业与客户之间关于可衡量指标的协议,如正常运行时间、响应能力等,通常情况下该协议由企业的业务团队和法律团队共同参与制定,它们代表对客户做出的承诺以及如果未能兑现承诺的后果,包括经济赔偿、服务信用等。
SLA挑战
众所周知、SLA难以衡量,对于报告和满足协议,通过团队难以衡量所做出的承诺,随着业务不断的演化,并不总是能够所有事项保持一致,很多细微的差别难以考虑到。
例如:SLA承诺团队将在24内小时解决客户提出的问题,但是很多问题可能需要客户及时协助,提供问题描述、背景、截图等,便于团队帮助诊断问题,那么规定客户在这段时间内及时响应,或者对24内小时的定义更加描述清楚,防止出现该歧义。
SLA作用
SLA服务等级协议是企业和付费客户之间的协议,免费向客户提供服务不太可能希望或为该免费客户提供SLA,更多是为了付费客户做出承诺。
SLA实战
SLA服务等级协议其实包括两部分,首先是服务等级目标SLO、其次是未达服务等级目标SLO时,要做出的后果,如经济赔偿、信用等等。
SLA是一个很好的工具,可以帮助合理配置资源。理想情况下SLA状态是:增加额外资源来改进系统所带来的收益小于该资源投给其他服务所带来的收益。
举个例子:某服务可用性从99.9%提高到99.99%所需要的资源和带来的收益之比,是决定该服务是否应该提供4个9的重要依据,说白了平衡收益和成本比,请记住,服务可用性越高,运营成本就越高,是成正比的。
SLO服务等级目标是SLA关于特点指标的协议,如正常运行时间、响应时间、服务吞吐量等,如果说SLA是与客户之间的正式协议,那么SLO是对内部业务方做出的承诺,SLO用于设定业务方的期望,并依据该SLO和内部团队衡量自身的目标。
SLO挑战
SLO不像SLA那样令人讨厌,但是如果SLO描述含糊不清、过于复杂或无法衡量时,它们可能会产生其他同样的问题,SLO的定义是只有最重要的指标才能够获得SLO状态,便于简单明了,语言阐明,并且和SLA一样,始终要考虑延迟等问题。
SLO作用
SLO不仅对SLA需要,SLO对于组织内部业务方都有用,如内部业务系统,CRM、财务系统这些可能与外部系统同样重要,因此为了建设系统的稳定性,同样也离不开SLO,SLO不仅是是是业务目标的重要部分,而且能够使内部团队对目标更加明确的重要部分。
SLO实践
SLO一般有三部分组成,分别是SLI、持续时间、目标。
在定义和制定SLO时,如何定义持续时间和目标可能会很困难,在这个过程可以确定使用SLI并随时间绘制图表,如果无法确定要使用的持续时间和目标,SLO并不完善或者不一定完美,SLO是随着业务迭代的,以确保能够满足需求。
对于配置SLO时的几个最佳实践:
对于服务首次配置SLO时,可以遵循以下原则:
设置SLO时的目标依赖于系统的不同状态,根据不同的状态设置不同的SLO,如服务状态场景、高峰期均不同,视情况而定。
SLO重要性
为什么要有SLO,这里说其实SLO的重要性,不论是对于客户而言还是组织内部业务方来说,是可预期的服务质量,能够依据该SLO衡量和设计自身的目标,对于服务提供者而言,首先是我们自身能够预期服务的质量,还可进行风险控制,对于故障发生时,能够有足够的准备应对,采取适当的措施降低损失。
SLO治理
SLO配置完毕之后,是不是整个工作就结束了呢,显然不是,如何保证SLO能够达到预期呢,那么就需要有观测和治理,通过监控和策略SLI,通过数据对比SLI来看是否达到预期,对于不满足预期,这适当调整以满足目标需要,这个过程是持续的,直到满足目标为止,对于后续还需要定期抽样检测,防止SLO经过时间的演化不满足预期,这个过程可能业务也发生了变化,因此需要定期治理,一般来说服务越可靠,运营成本就越高。
服务等级指标SLI是对服务等级目标SLO遵守情况,也可以是对服务行为的直接测量,如果对于系统的SLA定义在99.95%时间内可用,那么对应的服务SLO可能是99.95%的正常运行时间,而对于SLI的正常运行时间实际测量的值也需要是99.96%或99.99%,SLO值应大于SLA的值,通常情况下,内部的SLO目标更紧于外部的,也是我们对该SLO的定义做出的承诺,一旦没有做到,那么SLA肯定也未满足,违背双方的约定。
SLI 挑战
SLI和SLO一样,SLI的的挑战在于保持它们的简单些,选择正确指标并进行跟踪采集、并不会通过跟踪太对不重要的指标让其工作变得过于复杂,故对该指标的定义能够简单、最核心、最适合、并非全部的,这就对提指标的定义提出更高的要求。
SLI重要性
所有的SLO衡量都要依据SLI这些来进行衡量,如果没有SLI,则就没办法真正用于SLO。
选择SLI
对于SLI是经过仔细定义的测量指标,它根据不同系统特点确定要测量什么,SLI的确定是一个非常复杂的过程确定,对于SLI的选择和确定,可以尝试从以下问题寻找答案:
对于快速识别系统或服务测量的指标的方法,大致可以分为Volume容量、Availability可用性、Latency延迟、Error错误率 和Ticket人工介入次数。
衡量SLI
对于我们确定能否满足SLO,是通过对指标衡量得出的,该指标就是服务等级指标。选择最佳指标是第一步也是非常重要的一步,一旦选错或该指标来不能作为代表来计算SLO,那么可能就变得毫无意义,例如每秒请求数、每秒错误数、平均响应时间、P99响应时间等等,该指标计算类型有计数器、分布、平均值,如下:
SLI实战
值得注意是并非所有的指标都是SLI,要能选择最佳最合适最核心的,不能滥竽充数。通常将SLI视为两个数字的比率:良好的事件除以事件总数,SLI的范围是0%到100%,其中0%表示全部都是无用,100%则表一切完好。
什么样的指标可以作为SLI、理想的SLI指标具备以下特征:
在发生不良 SLI 的情况下,用户不满意未直接对应于负面事件(例如服务降级、缓慢或中断)。此外,SLI 独立于用户满意度波动。在良好 SLI 中,SLI 和用户满意度相关联,不同的满意度等级清晰,且不相关波动要少得多。
适当数量指标
通常情况下,每个服务具有多个SLI,特别是选择适当数量的指标,每个服务在不同的业务场景下提供服务时,例如读写分离,原因是这些行为会产生不同的运作方式,在这种情况下,最好选择适用每个服务指标。在某些写场景某个SLI指标可能并不能和用户的期望发生关联,这时就可采用多个SLI组合,例如在线教育系统,用户更多关心的是今天上课的流畅度,是否能够很顺利完成线上学习,而不是用户等待很久,用户并关系其他的内容。
对于SLI指标的选择,尽可能少的使用SLI来准确表示服务的容忍度,通过情况下,每个服务可以具备2到6个SLI指标,不能太对也不能少,太少可能错误有价值的内容,太多可能造成信息泛滥及干扰,甚至可以选择TOP3,逐渐改善,使其更好的满足期望值。
SLA、SLO、SLI不仅仅是有用的抽象、如果没有它们,无法知道系统的可靠性及可用性,如果它们没有明确地和业务目标联系起来,那么久不知道所做的对业务是否有帮助,更无法为付费客户做出承诺,想要了解服务的可靠性,必须要衡量成功和不成功的比列,也就是SLI基础,并非每个可跟踪指标都应该是 SLI,SLI指标要用户满意度或业务目标关联起来,通过SLI构建SLO,使用SLO,少即是多,专注那些对用户最重要的,如果需要制定SLA、SLA应该比SLO更宽松些。