Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >写代码也要讲规矩——SLA

写代码也要讲规矩——SLA

作者头像
出其东门
发布于 2022-12-05 02:58:28
发布于 2022-12-05 02:58:28
1.2K0
举报
文章被收录于专栏:01二进制01二进制

软件的复杂性带来的问题

工作一年多了,在涉及到跨部门合作的时候往往就是最痛苦的时候,其实道理很简单,刚开始,我们的组织和产品如左图,一切都比较简单,为了业务的发展,通过人工快速吃到技术和产品的红利,很多事情人工能掌控,有事吼一声,开个会就解决了,也运转得很好。

但随着慢慢发展,组织和产品就如右图,彼此连接依赖越来越复杂,为了整体的高速运转,对每个部件的稳定性越来越高,越来越精密,发展到一定程度,人力已经无法掌控,任何一个组件出异常都有可能牵一发而动全身,影响全局。每个部件的稳定性和精密程度决定了整体的工程质量,也决定了整体的发展速度。

那么,为了解决这样的问题,我们可以采取什么样的手段?

从汽车的发展到软件系统的建设

他山之石可以攻玉,软件系统虽然日益复杂,但和汽车建造无本质区别。软件编写完成后是要交付出去的,这就跟一辆车建造好后是要卖给别人一样,闭门造车无疑是自嗨。那么车主在买车的时候会考虑什么?

把时钟拨回到100多年前,贵族们在买车时,车能跑起来就万事大吉了;后来出“车祸”的人越来越多,开车变成了一件危险的事情,于是车企就开始了各种测试(例如碰撞测试);再后来,为了方便车主关心自己车子的状况,越来越多的车撞上了「仪表盘」;到了现在,没有仪表盘的汽车没有几个人敢开,因为你对车的健康、速度等状态一无所知,和闭着眼睛走路没什么区别。

如今,你再去买车,你会关心百里加速耗时多少,油耗多少,制动距离等等「指标」,因为这些「指标」让我们对最终交付给我们的车辆能提供的服务有一个明确的认识和期望,开车的时候心里更踏实。

软件系统的交付(代码->安装包->镜像)

回到软件系统,软件工程的本质就是为了解决软件系统的复杂性,而其中一个part就是就是交付过程的复杂性。

代码交付

一开始,我们会选择把代码+配置文档交给业务方,然后由业务方自己去打包、配置运行环境并进行部署和运行。这种交付手段可想而知:流程复杂且不可控,加之开发环境与生产环境的差异,上线前往往需要烧香拜佛,更多的不是技术问题而是玄学问题。

安装包交付

于是在代码的基础上更进一步,交付二进制的安装包或者将配置部署过程脚本化,实现了部署和运行的规范化。这种方式解决了流程复杂和重复的问题,但是仍然不能解决环境不一致的问题,因为宿主环境是你无法预先确定的。

镜像交付

再后来,开发者直接将代码及其依赖的环境(OS、三方库、配置等)完整地打包进虚拟机镜像,实现了一键部署和运行。这种方式既解决了流程问题,也解决了环境问题,主要问题在于虚拟机是一种比较重的技术,比较耗费资源和部署时间。而容器的出现,才真正改变了软件交付的形式,镜像将代码和环境全部打包,容器了确定镜像、部署流程与配置,实现一键部署和运行。这种方式实现了 "一处编译,处处运行" 的美好愿景(同样愿景的Java还必须依赖JVM,而容器直接与OS交互,是真真的实现了这个愿景),并且比虚拟机更轻量高效,是目前软件交付的事实标准。

我们需要交付的究竟是什么?

类比上文说的汽车的交付,软件系统交付的究竟是什么?是代码吗?功能代码是模棱两可的,谁也不知道到底正确与否,交付质量全凭价值观保证。

客户需要的,其实是你交付的系统能做到什么,不能做到什么,你的系统是否达到我的期许,如果没达到我的期许,又该怎么解决问题。这就是系统开发者与客户之间的「约定」,在软件系统中称为服务等级协议,即SLA(Service Level Agreement)

那么回到一开始的那个问题,为什么在涉及到跨部门合作的时候往往就是最痛苦的时候,本质上在于双方的SLA不对等,我认为你这个服务的提供方应该要给我提供这些能力,但是服务方却觉得这根本不是我的职责,我为什么要帮你解决问题。

升华一下,亲密关系也是如此,事先没有约定好你想要的和对方能给予的,吵架便也是家常便饭了。

SLA(Service Level Agreement)

前面铺垫了这么多,总算是来到本文的主角了。

SLA,是服务供应商与客户之间的服务等级协议,它定义了服务供应商应保证的服务质量,以及在服务不达标情况下的服务赔偿。SLA在定义上又细分为SLI、SLO与SLA。

  • SLI,服务质量指标,服务的某项质量的一个具体的量化指标。
  • SLO,服务质量目标,服务的某项SLI的具体目标值,或者目标范围。
  • SLA,服务质量协议,描述在服务不达SLO情况下的后果。

现在大家对于SLA的讨论更多是围绕着云服务厂商展开的,其实很好理解,云原生时代,云服务厂商就是最大的服务提供方,而用来确保服务双方达成一致的SLA,自然会更加重视。

云计算的最终愿景是“让计算资源和公共基础设施一样,按照使用者的规模提供随用量变化的弹性经济模式!”

虽然SLA常见于公司与外部供应商之间,但事实上SLA也可以用于公司内部两个部门,两个产品之间。公司内部可能不会涉及到服务赔偿,因此内部SLA更关注于SLO的达标情况。

一个实例快速了解SLI、SLO

给你承诺的男人不一定可靠,但连承诺都不给的男人一定不可靠。

男孩对女孩说:以后你发消息,我一定秒回,间隔时间超过xx分钟,我就给你送礼物

SLA中的对服务类型、质量时间条款的条文规定

可是女孩每次发消息的时候,男孩不是在洗澡就是在打游戏,每次都超过约定的时间

可用性低于条文中所规定的值

于是为了哄女孩开心,男孩只能道歉+送礼物

服务商所需提供的赔偿

久而久之,女孩终于忍受不了男孩的行为,选择删除好友。

客户更换服务商

在上面这个SLA的例子中,SLO(指标)就是男孩给出的秒回承诺,秒回(≈0ms)就是SLI(指标),「超过规定时间就送礼物」是未达标的后果,因此SLA又可以抽象成👇

SLA = SLO + 后果

如何描述服务质量?

对于大多数服务而言,表述服务可用性最直接的方式可能就是服务可用时间。

在这种体系下,常说的99.9%,99.99%,99.999%的可用性都是时间维度的统计,可以理解为:在规定的条件和规定的时间内,完成规定任务的概率。基于时间的可用性有如下表述形式👇

可用性 = 系统正常运行时间 / 统计周期内的总时间

关于系统的可用性,之前已经写过一篇了,可以参考👉《你的系统可用性 5 个 9 了吗?》

不同SLA不同的成本

「取舍」是软件工程中亘古不变的主题,一个有明确SLA的服务最理想的运行状态是: 增加额外资源来改进系统所带来的收益小于把该资源投给其他服务所带来的收益。

一个简单的例子就是某服务可用性从99.9%提高到99.99%所需要的资源和带来的收益之比,是决定该服务是否应该提供4个9的重要依据。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 01二进制 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
SLA通俗理解
SLA 表征服务方与客户间的服务等级协议,定义服务方需保证的服务质量以及不达标情况下的服务补偿,在SRE领域,SLA 细分为 SLI、SLO 与 SLA:
欲休
2023/04/27
5.9K0
SLA通俗理解
SLA、SLO与SLI的区别
探索 SLA、SLO 和 SLI 之间的区别。了解它们的重要性、Checkly 如何与它们协同工作,以及 SLA 的关键概念。
云云众生s
2024/06/13
7330
指导思想:服务质量目标
书中的「服务质量」一词在原作中对应的是「Service Level」。一般情况下我们可以将其简单理解为「系统的性能」。
gopher云原生
2022/06/08
8300
指导思想:服务质量目标
SRE方法论之服务质量目标
为了量化客户对服务可靠性的期望,找到客户对可靠性满意的点,我们需要制定针对用户的服务质量目标,并且努力去达到这个质量目标。在这个过程中,我们需要定义一些服务质量指标(SLI)、服务质量目标(SLO),以及服务质量协议(SLA)。这三项分别是指该服务最重要的一些基础指标、这些指标的预期值,以及当指标不符合预期时的应对计划。
不思jo
2023/08/18
2830
如何配置 SLO
无论是对外提供 IaaS PaaS SaaS 的云公司,还是提供信息技术服务的乙方公司,亦或是金融 制造等各行各业的数据中心、运维部门,我们的一个非常重要的合同承诺或考核评估指标就是:SLA(即:Service-Level Agreement 服务等级协议)。
东风微鸣
2022/04/22
1.2K0
如何配置 SLO
《SRE google 运维解密》读书笔记 (一)
新财年换了领导,管理风格也有一些区别。在团队内增加了一个 SRE 的职位。这一财年我将会承担一部分 SRE 的工作。
用户2060079
2022/05/25
1.6K0
在大规模 Kubernetes 集群上实现高 SLO 的方法
导读:随着 Kubernetes 集群规模和复杂性的增加,集群越来越难以保证高效率、低延迟的交付 pod。本文将分享蚂蚁金服在设计 SLO 架构和实现高 SLO 的方法和经验。
CNCF
2020/11/09
1.3K0
在大规模 Kubernetes 集群上实现高 SLO 的方法
「译文」常见的SLO陷阱以及如何避免它们
如今,在线服务需要接近 100% 的正常运行时间。这种需求使 DevOps 团队越来越需要维护关键业务应用程序的性能和可靠性。构建服务水平目标 (SLO)以及服务水平协议和服务水平指标,是团队评估和衡量错误预算范围内的软件性能的好方法。但是存在SLO陷阱。因此,在创建SLO时,避免这些常见错误非常重要,这些错误可能会给您的DevOps团队带来更多麻烦。
东风微鸣
2022/12/01
6700
Google SRE理论:如何提高软件系统的可靠性和效率
你是否遇到过这样的问题:你负责的软件系统经常出现故障,导致用户不满和损失;你在的项目组开发和运维团队之间存在沟通和协作的障碍,导致变更和部署的效率低下;运维人员过于繁忙,无法从事创新和改进的工作,导致技术债务的积累。
运维开发王义杰
2023/08/10
8450
Google SRE理论:如何提高软件系统的可靠性和效率
《Google SRE》读后感
这是16年国庆时的一篇读书笔记,最近线上故障频繁,重新读了下这篇读书笔记,觉得《Google SRE》非常棒,遂从简书再搬家到博客园,希望大家受益。
嘉为蓝鲸
2018/12/21
2.8K0
浅析面向云架构的SLA
云服务重塑了企业级应用的架构,公共云成为了集成企业应用、平台软件和服务的一个设计中心。API驱动的资源按需分配,与传统的企业数据中心基础设施有着很大的不同。企业应用需要适应云服务的架构设计,同时又向云服务添加了企业属性和服务的等级。
半吊子全栈工匠
2020/03/26
2K0
值得大家关注的【服务目录】
在金融企业中,IT组织架构通常包括以下职能:IT规划管理,即根据公司战略及业务发展,设计IT体系架构和部署线路;IT研发管理,即根据现有IT系统架构和系统,受理业务功能优化需求,支持业务开展;IT运维管理,即提供基础设施环境支持,确保业务连续性、可用性、安全性,提供IT运营服务支持;以及,其他IT项目管理、人员管理、外包管理等。在这样的组织架构中,IT部门主要承担成本中心角色,主要以技术提供者身份出现,强调被动支持业务需求与运行保障。随着业务与科技的快速发展,IT系统环境发生了巨大变化:架构层逐渐从本地化转向云化、虚拟化,应用层的应用数量激增,迭代速度加快,业务复杂度与系统架构越来越复杂,系统间关联度高,数据量呈指数级增长等,而现有被动支持业务需求的成本中心的工作模式将受挑战。因此,IT部门需要由被动向主动转型,首先是向强调IT主动服务能力的服务中心角色转型,目标是打造敏捷型的团队,提升IT交付效能,更好的支撑业务发展的需要。在实现服务中心后,下一步是关注并致力主动利用数字化技术创造新的业务机会,从IT资源中寻求更多的业务突破,引领业务创新,即由服务中心向业务创新中心转型。在实现业务创新中心的同时,近年来不少商业银行在向利润中心转型,为企业外部市场提供IT服务,从而为企业创造更多收入。
彭华盛
2020/07/17
2.2K0
值得大家关注的【服务目录】
浅谈SDN架构下的运维
目前国内的网络运维还处于初级阶段,工作人员每天就像救火一样,天天疲于奔命。“什么破网络怎么又断了”,“我去,服务器宕机啊”,“这个网速慢的跟乌龟爬的一样”,这些埋怨声每天都在运维人员耳边回荡。运维人员
SDNLAB
2018/11/22
1.4K0
提升测试质量的四个关键特征
今年写了很多质量保障相关的文章,也在星球内部或者公开做了几次分享,内容主要包括质量内建、质量门禁、测试左移、质量度量等。我试图通过这些内容,从不同的角度阐述我对于质量保障体系建设的实践和思考,这些方法和实践最终要达成的目标都是一致的:提升质量。
老_张
2023/08/09
2880
提升测试质量的四个关键特征
【云+社区年度征文】TeamLeader如何Owner老系统?
做互联网的童鞋们一定都有过这样的经历,看过很多架构书,看过很多架构师成长指南,看过很多优秀的案例分享以及讲座。所以当我们刚毕业的时候,对于大厂的认知一定都是这样的。
小诚信驿站
2020/12/15
1.1K0
【云+社区年度征文】TeamLeader如何Owner老系统?
SRE转型:银行 SRE 转型与 SLO 管理的深度融合
摘要:本文探讨了银行在SRE转型中如何通过SLO管理提升系统可靠性与业务连续性。随着金融行业数字化转型,传统运维模式已无法满足高可用性需求,SLO管理成为提高服务稳定性和优化运维效率的核心实践。文章比较了SLO管理与传统业务连续性管理的差异,详细阐述了SLO定义、监控、故障响应和持续改进的实施步骤,并分析了银行在落实SLO管理过程中面临的挑战及应对策略。最终,文章总结了SLO管理对提升银行系统稳定性、资源优化和跨部门协作的积极作用。
嘉为蓝鲸
2025/02/13
850
SRE转型:银行 SRE 转型与 SLO 管理的深度融合
数智万物下,重新思考运维价值
数字化战略上升到国家层面。2019年10月28日至31日召开的中共十九届四中全会上,审议通过了《中共中央关于坚持和完善中国特色社会主义制度、推进国家治理体系和治理能力现代化若干重大问题的决定》,决定指出:“要健全劳动、资本、土地、知识、技术、管理、数据等生产要素由市场评价贡献、按贡献决定报酬的机制”。这是中央首次公开提出将数据作为生产要素参与分配,意味着数据从技术中独立出来,作为一种单独的生产要素而存在。这传递了两层含义,一是数据己对国家经济增长产生突出贡献,提升现有产品和服务生产效率,并创造全新的产品和服务;二是数据作为商品参与的产出分配与收入分配,背后涉及经济结构的变化,将对行业产生颠覆性的作用。
彭华盛
2020/12/17
1.3K0
数智万物下,重新思考运维价值
【可靠性工程】GCP 定义您的可靠性目标
Google Cloud 架构框架中的这份文档提供了最佳做法,用于定义适当的方法来衡量您的服务的客户体验,以便您可以运行可靠的服务。您将了解如何迭代您定义的服务级别目标 (SLO),并使用错误预算来了解如果发布其他更新,可靠性可能会受到影响。 选择合适的 SLI 选择适当的服务水平指标 (SLI) 以充分了解您的服务执行情况非常重要。例如,如果您的应用程序具有多租户架构,这是由多个独立客户使用的典型 SaaS 应用程序,请在每个租户级别捕获 SLI。如果您的 SLI 仅在全局聚合级别进行测量,您可能会错过
架构师研究会
2022/08/26
6810
【可靠性工程】GCP 定义您的可靠性目标
五一假期学习总结:从DevOps到SRE
五一假期,没出远门,带娃露营玩水玩沙骑平衡车,累的不亦乐乎。同时,也刷了一门极客时间的课程《SRE实战总结》,给我带来了一些新的认知,我将这些认知整理了以下,特此总结分享与你,强烈建议已经实践了DevOps的童鞋了解一下SRE。
Edison Zhou
2024/05/07
1800
五一假期学习总结:从DevOps到SRE
七步成诗-快速创建有效 SLO
之前的文章- 如何配置 SLO - 东风微鸣技术博客 (ewhisper.cn)[1] 介绍了一些常用的各类 SLO, 但是在实际制定 SLO 过程中,并不一定适合实际业务需求。本次介绍 SLO 的最佳实践 - 如何 7 步创建有效的 SLO.
东风微鸣
2022/12/01
5910
相关推荐
SLA通俗理解
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文