软件的复杂性带来的问题

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

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

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

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

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

把时钟拨回到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相关推荐

  1. 【人物】一个程序员决定写代码到60岁

    重要也更深远的意义或许在于,阳振坤的存在创造了一种新的生态.他颠覆了时下困扰这个行业的「35岁危机」:一个程序员必须在35岁之前跻身进入管理层,否则将无法以技术身份立足,年长的技术人员意味着贬值.淘汰 ...

  2. 程序员门槛再被“神器”降低:只要会英文,就能写代码!

    近日,OpenAI带着他们最新.最神自动编码神器Codex霸榜各大科技媒体头条,我们知道OpenAI是微软投资的通用人工智能平台,而GitHub是微软旗下的代码托管平台,这样微软出算力.OpenAI出 ...

  3. 抢程序员饭碗?自动写代码的Deep TabNine真如此神奇?

    作者 |  James Vincent等 编译 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 导读:在过去的一年中,AI 生成书面文字的能力大大提高.通过扫描庞大的文本数据集,机器学 ...

  4. 熬夜写代码,不如换女装入GitHub获上千Star?

    作者 | 琥珀 出品 | AI科技大本营(ID: rgznai100) 程序员如何以合规手段快速获得 GitHub 上千 Star? 新年刚过,GitHub Trending 上一个名为"D ...

  5. 隔壁组Leader降级了!从不pua,亲自写代码,自己加班也不让下属加班!

    什么才是一个好的leader?是杀伐果断,毫不留情?还是身先士卒,冲锋陷阵? 一个程序员发帖讲了这样一个故事:隔壁组leader被降级了.这个leader人不错,对下属也挺好的,从来不pua,经常犒劳 ...

  6. CTO集体怒吼:我到底要不要继续写代码(下篇)

    http://www.devstore.cn/new/newInfo/4708.html 5.在人人创业的时代里,竞争压力非常大.有很多产品,甚至会有多个竞争对手,那么产品技术和布局会非常重要.CTO ...

  7. CTO集体怒吼:我到底要不要继续写代码(上篇)

    1.CTO有假期吗? 黄鑫(极光推送):最近一次休假是今年2月份,过年的时候,平时没有连续的休息的时间. 赵庆华(AppCan):我有两个孩子,都比较小,一个4岁,一个2岁,所以我的重点是从工作中抽出 ...

  8. 离职后竟半夜偷溜回办公室写代码?一个为自由软件而战斗的程序员

    作者 | 年素清 责编 | 王晓曼 出品 | 程序人生 (ID:coder _life) 理查德•马修•斯托曼(Richard MatthewStallman)是个非常厉害的程序员,他开发出了Emac ...

  9. 使用 .NET WinForm 开发所见即所得的 IDE 开发环境,实现不写代码直接生成应用程序...

    GitHub:https://github.com/iccb1013/Sheng.Winform.IDE SailingEase WinForm Framework WinForm开发框架开发手册:h ...

最新文章

  1. C++ 笔记(27)— 指针变量、数组和指针、指针数组、数组指针、指针常量与常量指针
  2. Python的enumerate()的坑
  3. java 验签_JAVA验签方式转换为PHP代码,求教怎么写
  4. java.text.SimpleDateFormat多线程下的问题
  5. Got error: 1449: The user specified as a definer ('root'@'%') does not exist when using LOCK TAB
  6. Eclipse提示The **** cannot be resolved. It is indirectly referenced from required .cl
  7. 【渝粤教育】国家开放大学2018年春季 0064-22T20世纪欧美文学 参考试题
  8. 20165203 2017-2018-2 《Java程序设计》第一周学习总结
  9. 如何在VisualStudio中加入你自己的assembly的Intellisense?
  10. 图解linux32位平台下进程线程长什么样子
  11. 编译原理语义分析代码_Pix2Pix原理分析与代码解读
  12. 用AlphaGo背后的人工智能做金融投资
  13. vue单页面应用中node做反向代理的原理
  14. Cap01_信息化和信息系统
  15. 单片机定时报警C语言程序,单片机控制的简易定时报警器电路设计( - 控制/MCU - 电子发烧友网...
  16. C++ 二叉树求叶子结点数及输出叶子结点的路径
  17. 无盘服务器教程,无盘入门教程之解读无盘构造
  18. 【USACO】2007 Feb Silver Lilypad Pond 白银莲花池
  19. 嵌入式方面名词术语总结
  20. python量化交易:筹码分布(4)_计算方法_依据成交明细及及换手率估算

热门文章

  1. 互联网晚报 | 05月17日 星期二 | 郑州首套房贷利率最低降至4.4%;可口可乐被曝员工不得购买竞品...
  2. java求一批数据的最大值、最小值、以及掐头去尾之后的平均值。
  3. 自动控制原理(2) - 线性化和传递函数
  4. android动画制作工具,一款非常好用的动画库Lottie
  5. windows上安装并使用exiftool修改图像exif信息
  6. 苹果手机home键在哪里_苹果手机为什么没有返回键? 原来隐藏着更好的方法, 涨知识了...
  7. 微信群抽奖,有什么好用的抽奖小程序?
  8. 直播美颜sdk免费版有吗?为什么美颜sdk没有免费版?
  9. 华为研究院高级研究员几年心得终得趣谈网络协议文档,附资深架构师讲解
  10. 打破985校史!她以独作身份投中顶刊,曾因换方向重读博士7年,科研之路也“坎坎坷坷”……...