我最近花了一些时间尝试编写一套常规指导,用于在软件系统中监视的内容。我想出了这个列表:
所有其他服务的延迟分布和成功率取决于,以及断路器跳闸。
资源的利用率(配额,速率限制,物理和逻辑系统资源)以及相同的饱和信号以及错误或超时。
系统不变:特定系统的其他属性。例如,领导者所选系统的领导者的计数(预期为一个 - 您想知道它是否没有)。其他示例可以包括复制数据集,缓存命中率等部分的副本的数量。
这是一个好的列表。但是,当我们尝试创建关于软件操作的广义知识时,我们会做的很多事情,它有点模糊和不满意。如果我有一个重要的复杂性和范围和一个新工程师的系统,我可能无法向他们发出那个列表并希望他们实施全面的监控。该工程师不太了解特定的系统,它会带走很长时间才能完成工作,很可能会错过一些事情。
软件运营中的许多东西通常,具体而言,是这样的。你需要很多关于特定系统的知识来做得好。对新服务的生产准备评估或向SRE团队交给的服务是一个很好的例子。在某些组织中,这些都是作为建立服务的开发团队和正在船上的SRE团队之间的合作。在其他人中,咨询SRE团队与开发人员合作,以评估一套生产标准的遵守情况。
这些进程称为同一件事,但它们看起来很不同。通常,前一种PRR将花费四分之一或更长时间,因为总是新的大型服务有很多任务可以做到准备就绪。船上的SRE团队服务将花费重要的时间来发现差距,了解在服务的依赖性失败时会发生什么,提高监控和运行书和自动化。
第二种PRR通常不会揭开要做的时间,并将开发人员试图遵守本组织的生产标准的勾选盒锻炼。顾问SRES不知道有关系统的Ins-outs,而生产系统中的通用专业知识可能发现一些问题,几乎肯定会错过重要的事情。讨论这个问题,我的一位拥有超过25年的经验的朋友说:“我是那个人。我审查了该系统,它似乎是坚实的。只有在我试图使用它并找到错误时,我发现它是一个巨大的Potemkin村。“
在冬季假期,我读了詹姆斯C.斯科特的看法看起来像一个州:某些方案如何改善人类状况已经失败[1]。斯科特是一个政治学家和人类学家,他的工作主要涉及国家各国以及他们如何理解和控制他们的人口。除了试图理解他们的管家,各国试图简化事物,让他们更容易理解 - 斯科特使用的术语是“清晰的”。斯科特提出了一系列示例。正式州语言的标准化意味着运营官僚机构更容易。引入姓氏使人们更容易跟踪人们是否正在缴纳税款。在网格图案上建立城市使得更容易到处,更容易放下上行。林业的单一栽培使得更容易知道你可以收获多少棵树。
我们在软件操作中所做的事情与斯科特这个项目描述了很多共同之处。我们花了很多时间试图让我们的系统清晰。我们通过添加日志记录,监视,跟踪,状态页和其他工具来执行此操作。
我们还尝试标准化和简化我们的系统。这有巨大的力量。例如,不是谷歌的每个系统都是统一的,但是有很多统一性。几乎所有Google运行的软件都在内部内置,通常使用少数常见框架之一。 RPC机制,准备和活力检查,指标终点和状态页面(对人类运营商的曲面信息和控制)建立在。基本上在Borg上运行 - 所有作业都已被同化。标准化意味着系统更容易互操作,并且建立基础架构更容易,因为您不需要支持许多不同的方式做同样的事情。标准化程度意味着它可以为新的谷歌工程师运行一般类,它为他们提供了调查在谷歌上运行的几乎任何作业的基本技能,他们有权访问:它正在运行的地方,有关RPC的统计数据,日志,痕迹等。
同一个项目已经到了我们的其余行业,它只是不太高级。 Kubernetes是标准的编排。服务网格旨在标准化服务以进行服务通信,并使其更清晰可易懂。不变的基础设施一般是一种控制我们部署和运行的内容的方式,确保它一致。无操作系统是另一种标准化和简化形式。存在服务级别目标(SLO)以提供关于服务健康的统一信号。我们所有这些都是我们试图约束和标准化我们构建和运行的东西,使其统一和清晰,该软件相当于斯科特的城市网格布局。
我们现在在软件运营中看到的那一刻似乎是一种高现代主义。高现代主义是在冷战期间出现的现象,其特点是对科学管理和发展的信仰,以及拒绝工艺和传统。这是一个有序的乌托邦的愿景,以高层生活的形式,有规划的城市,具有简单的几何形状。
像高现代主义一样,软件高现代主义正在经历混合成功。 Kubernetes与Ever Le Corbusier的高层建筑一样分开。将大型组织的微型微服务器套装到服务网格几乎是凌乱和破坏性,因为在中世纪城市施加电网系统(以及出于越来越多的易读和卫生的原因而完成)。斯洛斯很有用,但定义有意义的非饼干切割股票是很多工作。
然而,当前软件浪潮的黑暗面高现代主义是应用这些原则可能意味着拾取现有的系统并将它们移动到一个非常不同的基础架构上 - 然后需要运行。对于非常小的组织,正在进行的kubernetes或服务网格的增加复杂性可能没有意义。对于较大的组织,实现均匀性的目标意味着将更大的系统移动到新的基础架构 - 冗长的迁移。这是一项重要的时间,工程努力,以及最有可能的错误预算。
然而,越来越多的易读性并不总是意味着在高现代主义的五年计划中迁移整个基础设施。 Tom Limoncelli的“低中下文Devops”(也在;登录:)是我们可以做的一些更少的中断事物的一个很好的例子,以提高我们的系统的易读性,例如标准化文档并将其与错误消息和警报链接,设置良好的默认值,提供体现推荐实践的基础库。
由于它以合理的成本越来越多,我们的系统的易读性和标准化越来越好,但它到目前为止它只得到我们。斯科特区分了两种知识:Techne和Metis。
Techne是普遍知识:像水的沸点一样的东西,毕达哥拉斯的定理,所有RPC应该有截止日期的规则,或者如果没有我们的工作实例,我们应该提醒。技术非常有用。我们可以写关于Techne的书籍,并在我们的工具和基础设施中嵌入其中一些,如在kubernetes或服务网格中的截止日期中的活力检查。
其他类型的知识,梅斯,是本地的,具体的,实用的。它来自经验。它不能以同样的方式编写编码。斯科特给出的比较是导航和驾驶。深水导航是一般的技能,但飞行员知道一个特定的港口 - 作为斯科特将其放置的“本地和位于知识”,包括潮汐,电流,季节变化,转换砂银和风图案。飞行员不能移动到另一个港口,并期望具有相同的技能和本地知识。当我加入一个ran路由器和交换机的团队时,我有一些有用的技术 - 了解网络协议和路由协议等 - 但我绝对不是网络工程师。我必须以网络调试技术的形式学习一个可怕的metis,如何回到先前的路由器配置,是一种暗示维护的小型可插拔收发器(我的新同事们嘲笑我,不知道那些是,混蛋 - 但他们确实解释了它),如何处理DDO,等等。
特定软件系统的知识是Metis,而不是技术。这就是为什么我们开始在新系统上工作时有学习曲线,以及为什么我们不会立即将我们的新队友拨打电话。更多标准化在基础设施中,更好的流动书等是对疏浚运输渠道并将标记放在障碍物上的软件等效的软件 - 他们可以稍微减少我们需要拥有的Metis的数量,但不能完全消除对当地飞行员的需求。
要返回我开始本文的地方,这就是为什么通用检查表总是一个平坦的原因,为什么为您对您没有深入熟悉的系统运行彻底的生产准备回顾是非常困难的。这两者都是尝试替代Metis的技术,这不起作用。
或许,这是一些老学校的Sysadmins对SRE的一些抗病的来源(如对Todd Constwood的反应2013年谈话,邮动:软件,脆弱性和可靠性的非手术故事)。 SRE被视为一个高现代主义的项目,意图在科学管理他们的系统,所有技术和没有metis; 所有SLOS和Kubernetes,没有系统知识和工艺。 那个观点并不完全是错误的。 有些人在Sre运动中看到它,这样 - 咨询SRE团队,SRE软件平台,SLOS和Kubernetes等事情是有原因的流行,他们确实有其用途。 但是,称你是什么 - 工艺,Metis - 特定的系统知识不会很快消失。 Sre或Sysadmin,Metis是我们工作的一个方面,我们不太可能自动化。