跳转到主要内容
Chinese, Simplified

普罗布斯特:我叫凯瑟琳·普罗布斯特。我是谷歌的工程总监。我在这里向你们介绍复杂系统、微服务和人类。让我们从一个可能会有点意外的问题开始。北极熊与微服务有什么关系?乍一看,你可能会说他们之间可能没什么关系。让我们再深入一点。你可能知道,北极熊吃海豹。很容易理解北极熊的数量与海豹的数量有着密切的关系。如果你再往前走几步,事情就会变得复杂得多,速度也会快得多。让我们这样做吧。随着气候的变化,北极熊和海豹的栖息地也在发生变化。栖息地的变化对海豹以及北极熊种群的影响实际上要复杂得多。那么食物链上的其他动物呢,比如企鹅或磷虾。很快,你就会发现你的生态系统很难让我们真正了解。

微服务架构的行为方式

我认为,在某些方面,微服务体系结构的行为是相似的。我们很少有一个服务实际吃另一个服务,但我们确实有那些复杂的关系。让我们深入探讨一下。如果你已经开始了微服务的旅程,你可能已经从一个架构图开始,这个架构图看起来有点像我们左边的那个。您已经考虑了您的业务逻辑。你想要完成的事情。你的系统必须做什么。您已经绘制了一个架构图,它清楚地说明了所有内容的位置、行为方式以及您将要创建的服务之间的关系。

随着时间的推移,事情变得越来越复杂。也许你会组建新的团队。你有一个商业理由需要有新的功能,或者你意识到你的一项服务仍然包含了太多的行为,你想打破它。然后,当然,您要添加数据库,您要添加缓存,等等。很快,您就到了一个很难看到所有关系甚至写下架构中所有服务之间的所有关系的地步。事实上,这就是理论。实际上,当你与拥有非常复杂系统的公司交谈时,他们的系统看起来更像右边的一个,非常复杂的体系结构,其中许多公司拥有数百甚至数千个服务,并且它们都相互交互。也许并不是所有人都能直接互动,但他们之间有着很强的关系。当你看到如右图所示的东西时,实际上很难只写下体系结构和系统中发生的一切。

我想强调的是,从我的角度来看,这并不意味着巨石是正确的答案,微服务本身让生活变得艰难。这不是我的观点。我的观点是,如果你有和这里一样多的功能,需要数百或数千个服务,如果你把所有这些都放在一个整体中,你会有很多其他的问题。这不一定更容易推理。在我看来,有些情况下,巨石是正确的架构。在许多情况下,微服务也是正确的体系结构。微服务和复杂的微服务系统很难推理,这是我觉得我们应该接受的事实。事实上,该行业正在使用和构建许多工具来帮助我们理解这些系统。

当您构建微服务体系结构时,我们中的许多人都遵循某些最佳实践。例如,您在左侧看到的是一个关于此架构如何与团队协调的提示。有些团队可能拥有多个微服务。我们真正想要避免的反模式是,许多团队共同拥有一个服务。将这些职责清晰地分开确实有助于分解功能,使团队能够对其系统的各个部分进行单独的推理。然后,不仅是关于它的原因,而且也演变了他们在这个系统中的部分。

我们的人类系统就像我们的分布式系统一样

我认为有一个方面值得一提,那就是我们实际上已经有了一个由人组成的组织。我们在通常组织成团队的组织中工作。你可以在左边看到一个理论组织结构图。这看起来就像你在自己的公司里看到的一样。我们有这些组织结构图,还有这些团队组织。那么,组织结构图不一定能很好地映射到微服务架构上,也许它不应该。这些团队之间的相互关系实际上比你在组织结构图中看到的更微妙、更复杂。这是因为如果您有微服务,并且这些微服务之间存在依赖关系以及它们之间的交互,那么拥有它们的团队有时需要相互交互。微服务的构建方式使各个团队尽可能地独立和自主。我们还了解到,微服务仍然可以相互影响,因此,在这些团队之间建立这些强大的联系仍然是有益的。

复杂系统的两个层次

我想说的是,我们实际上有两个层次的复杂系统。我们有我们的微服务,然后我们有我们的人类组织,我们的人类系统覆盖,或者你可以称之为微服务系统的基础。没关系。关键是它们实际上是两个系统,它们都是复杂的。他们都以有趣的方式相互交流,我认为我们需要更深入地讨论和研究。

微服务系统

当我们谈论驯服这些系统的复杂性时,我的思维模式是这分为三个粗略的阶段。这不是唯一的分类方法。这有助于我在谈论如何更好地理解系统、如何创建一个系统、如何保持一个健康、良好运行的系统时,了解需要思考的问题。我的心智模型分为这三类。第一个bucket是配置和设置。这就是你想的,我的架构是什么样子的?我所做的基本设计选择是什么?例如,我是否创建服务网格,甚至是否创建微服务?我希望遵循的最佳实践是什么?

然后,创建系统。然后你就有了一个系统,这个系统需要不断地改变。我们已经讨论过添加新服务,但是在现有服务中也发生了许多变化。您需要改进业务逻辑,添加新功能,等等。在这个领域有很多工作正在进行,讨论如何快速、安全地将新代码交付到生产环境中,比如CI/CD、GitOps。我们的最佳实践是测试和缓慢推出更改。

第三个铲斗是第2天的操作。这意味着生产中正在运行的代码。您的客户正在与该代码交互。您希望确保生产中运行的任何东西都能保持运行,并为您的客户保持良好的运行。有一系列的工作正在进行,我会粗略地描述为掉进了那个桶里,比如负载测试。

了解系统可以承受的负载。监控非常基本的事情,比如日志监控、测试、混沌测试等等。同样,这是我的心理模型,边界有些模糊。显然,我们拥有的一些工具,比如Kubernetes,不仅可以帮助您进行配置和设置,还可以帮助您进行更改。负载测试不仅仅是测试已经在生产环境中运行的系统,它还帮助您进行安全的更改。粗略地说,我觉得它很有用,因为它帮助我理解,我需要注意哪些事情?在这些桶中,我使用了哪些工具来帮助我获得基本的理解?

事件/意外(incidents)

当我们谈论系统和保持系统健康时,我们经常谈论事件。这是一个重要的组成部分,但我想强调的是,拥有一个健康的系统不仅是为了防止事故,也是为了确保我们能够以合理的速度发展我们的系统,以便我们能够快速添加功能。比如说,他们不需要几年的时间来添加。我们的系统实际上是可观察的、经过良好测试的、可维护的。事故是健康系统的重要组成部分。因为我们希望我们的客户体验一个非常可靠的系统,他们可以以适合自己业务需求的方式进行交互。

让我们谈一谈事件。几乎从定义上讲,如果你做得对,事故或停机是令人惊讶的。为什么?因为我们中的许多人都会在事后进行尸检,或者在事情发生后进行反思,或者在事件发生后进行事件回顾。这些事件审查的全部目标是确保同一事件不再发生。如果您这样做是正确的,那么几乎按照定义,停机将让您感到惊讶。我想没关系。我认为接受这一点是可以的,并且说,是的,我们在不断改进。我们有时仍然会遇到麻烦,因为我们需要提供一个没有人可以解释的系统。我认为接受这一点是很好的一步。有助于使我们保持一种心态,不断改善系统的健康状况和对系统的理解。

例如,当事件发生时,它们可能发生在系统中彼此相距很远的部分,实际上很难看到这是如何发生的。你可以举一个例子,比如左边的服务,比如说,这是一个推荐系统。比如说,你推出了一种新的算法,可以帮助你更好地推荐,无论你想推荐什么。然后在右上角有一个系统,假设这是你的计费系统。显然,您的计费系统对您的业务非常重要,因为这是客户向您付款的方式。像左边的推荐系统这样的系统可能会对计费系统产生真正的负面影响。你可能会坐在那里想,为什么会这样?这不应该发生。这是正确的。它永远不应该这样。也许一个答案是你有一个隐藏的依赖。通常,在复杂的微服务系统中,您拥有这些依赖关系,您甚至可能没有意识到您拥有这些依赖关系,或者您没有意识到您拥有这些依赖关系的程度。再次回到我的三个bucket,也许服务网格可以真正帮助您了解这些依赖关系的位置以及它们的强度。

关于事件的另一个重要方面是,它们实际上可能在代码发布后的几天或几个月内发生。问题是,它可以在任何时间点命中。不管什么时候发生,感觉都很不方便。我们在右下角以Alice为例。也许她正在为其中一个系统待命,也许她正在为计费系统待命。一切都进行得很顺利,但是这个新的推荐算法在一段时间后对这个隐藏的依赖性产生了负面影响,现在影响到了她的系统。也许爱丽丝刚刚投入了一整天的工作,她真的很累,正要回家,然后警报响起。

人体系统

这真的让我们讨论了人类系统实际上如何影响我们的微服务系统的健康。当你们谈论人类系统时,我的心智模型实际上和我关于微服务系统的心智模型并没有什么不同。在这一点上,我仍然相信我们有这三个粗糙的桶,帮助我通过我需要思考和需要注意的事情进行推理。在第一个bucket中,我们有配置和设置。这是组织花费大量时间思考工作阶梯和组织文化的地方。如何激励人们。如何设定特定角色的期望。此外,这也是多样性、公平性和包容性发挥巨大作用的地方。真正创建一个高效运作的组织是本书的重点。

第二个因素是承认组织在不断变化。从积极的方面来说,我们有人得到提升,然后他们可能会有更多的发展空间。太好了。看到人们在事业上取得进步真是太好了。这是对我们所拥有的组织体系的改变。这可能意味着这个人现在承担了额外的责任,因此他们不再像以前那样关注系统的某个部分。也许这会留下一个缺口。同样,我们也有新人加入。显然,我们需要训练他们。我们有人离开球队,有时令人遗憾,有时却没有。无论哪种方式,这些都是系统的重大变化。然后,当然,当您移动整个组织时,组织会发生变化,并且需要真正确保新的组织运作良好,团队之间相互作用良好。这是本质上由组织本身推动的变化。

还有一类我称之为第二天操作的东西,只是为了与我们之前的操作相比较。这就是我所认为的外部力量和更广泛的文化变化。外部力量是我们所有组织都经历过的一件大事。一个非常明显的例子是新冠病毒,它不可能以一种全面的方式进行规划。作为一个组织,我们需要处理并充分利用它。我们需要做大量的工作来确保我们的组织仍然健康,尽管由于这些外部因素(如新冠病毒)给我们的组织和员工带来了各种压力。那么积极的文化变革就是我们所做的变革,再一次,也许是为了确保在那里工作的每一个人都感觉到自己的参与,并且能够表现出来,把他们最好的作品带到工作中去。

事件的真实性

如果你想一想这三个桶,你会花一点时间回想一下我们刚刚谈到的事件,爱丽丝在那里待命。她在呼叫计费系统,但它失败了。这三个桶与事件的结局有什么关系?我想说的是,事实上他们与此有很大关系。爱丽丝现在正经历着情绪的过山车。她可能很沮丧。她很害怕。她的晚餐计划被破坏了,她很沮丧。这里起作用的是整个文化,组织的基础文化。例如,她是否从同龄人那里得到了适当的培训?这很清楚。那么,还有,假设她发现她需要联系某人,她觉得这样做舒服吗?她是否拥有了解联系对象所需的正确工具?

通常,事故需要来自世界各地的专家。回到我们这里的事件示例。爱丽丝在这里的右边。她负责计费系统。左边是伊桑,他负责推荐系统。我敢肯定,由于推荐系统的改变,会有更多的人,比如对这种依赖性负责的人,出现问题。现在,让我们考虑一下相互关系。爱丽丝认识伊森吗?她和他接触感到舒服吗?他们一起工作吗?他们是否有共同努力解决这一问题的正确动机?或者,他们是否有动力将问题抛到一边,让其他人来处理,例如,因为他们担心这可能对他们的职业生涯意味着什么。所有这些文化因素在这一事件的发展过程中起着巨大的作用。我想强调的是,这不仅仅是事件。您可以对组织的健康状况提出同样的论点,影响您交付功能的速度、代码的可维护性等等。从我的角度来看,我们必须尽我们所能建立健康的组织,这不仅对组织中的人来说是健康的,这是非常关键的,而且他们实际上也会对底线产生影响。

这里的主要收获是,我相信两个复杂系统之间存在着复杂的相互作用。我们经常说,发生的任何事情都不是一个单一的根本原因,而是许多促成因素。同样,这可能是一个意外事件。它可能是一个延迟的功能启动或类似的事情。也许没有一个根本原因,但有几个因素,如一个人可能有冒名顶替综合征。也许有一个人不会承认他们不知道什么。也许我们没有适当的警报和指标。所有这些东西都相互作用,产生我们可能喜欢也可能不喜欢的结果。

一些现有技术

当我们谈论人类系统时,我会假设,事实上,有很多现有技术。从我的角度来看,我们需要将大量的现有技术带到我们的组织中,并利用它尽我们所能建立健康的组织。我在这里给你们举了一些例子,但这张幻灯片的真正目的是让你们思考哪些方面可以帮助我更好地了解公司?显然,在组织心理学方面有很多研究。还有其他一些领域也涉及到具体方面。例如,人为因素研究人为错误与环境之间的相互作用。你可能会想,我在做什么,让人们更容易慢慢地进行更改?我有什么系统?同样,这可能是我们前面提到的系统之一,比如Kubernetes或服务网格。有一些CI/CD工具在帮助自动化这些步骤方面非常有用,而不是强迫人们在许多步骤中手动操作,而他们可能不会这样做。

然后,这实际上与我在行为经济学中感兴趣的研究有关,比如说,与激励有关。我们是否在我们的环境和组织中建立了正确的激励机制?我们是否确保激励人们寻求帮助,激励他们与其他团队合作?或者,我们真的在为这样做制造障碍,或者不幸的是,将它们推开?这是我在这里举的另一个例子。让他们不要问别人。也许他们看到过这样的例子,他们的绩效评估受到了伤害,因为他们问了某人一个问题,而那个人反应不好。我们需要确保我们的组织是以一种能让我们在这里取得成功的方式建立起来的。

最后一点是关于动机。这真的是深思熟虑,人们真的能够带来他们最好的作品吗?他们是否有这样做的动机?他们学习新事物的动机是掌握吗?他们有权利自主吗?他们是否了解他们的工作如何与更广泛的情况相适应,以及为什么这很重要?同样重要的是要指出,不同的人受到不同事物的驱动,或者这些事物的不同组合。我认为,真正了解我们的组织,而不仅仅是推动一件事情,也是非常有帮助的。这些只是我认为我们可以学习的领域的例子。实际上,我认为这是一个重要的步骤,因为有这么多的工作和这么多的现有技术可以帮助我们真正理解如何使我们的人类系统更好,以及我们的微服务系统更好。

现在怎么办?微服务系统

我们怎么处理这些?我想我想让你们了解的一件主要事情是,从我的角度来看,微服务系统,是的,它们可以是超级复杂的。如果你有成百上千的微服务,它们可能很难解释。然而,正确的选择不是说“它们太复杂了,我不会走那条路。”从我的角度来看,在很多情况下,它们仍然是正确的选择。然后,正确的方法是接受,是的,它们很复杂。现在,我们该怎么办?这就是我要说的,这个行业实际上已经花费了大量的时间和精力来创建各种工具和方法来帮助我们理解和改进我们的系统。我在这里列出了一些。还有很多。我想说的一件事是,弄清楚你在用这些工具做什么实际上非常重要。我建议不要因为其他人都在采用这些工具而采用其中一种,你会说,“我会采用它,然后我会找出它是如何有用的,或者为什么我需要它。”相反,要非常清楚你在努力实现什么。也许我介绍的配置更改和第2天操作的心智模型有助于了解您需要了解的系统类型。为了使您的系统更加自动化、改进和稳定,您需要准备什么样的东西。我认为,明确目标是至关重要的。

现在怎么办?人类系统

当谈到人类系统时,我觉得我们经常谈论游戏日、教育论坛、设计审查和随叫随到的培训。我认为这些都是非常棒和非常重要的。我认为他们做得还不够。我认为我们需要更深入一层。这就是我在谈论文化和包容以及我们建立的合作激励机制时所要表达的意思,等等。因为我认为,如果你的组织运作不好,激励机制也不好,那么世界上所有的比赛日都不会让你处于一个好的位置。世界上所有的随叫随到培训都不会让你处于这样一种境地,即随叫随到的人都会感到舒适,如果这正是你的组织所鼓励的。我的观点是,我们真的需要更深入地思考我们建立的各种工作阶梯,我们建立的组织。我们的人民如何在其中发挥作用。我们如何持续改善组织健康。就我所处的位置而言,组织健康本身就非常关键。让人们觉得他们可以参加工作真的很重要。他们有一条职业道路。他们对此感到高兴。即使你不是出于这种动机,我认为有一个非常清楚的理由可以证明,组织健康对企业健康有着真正的影响。

问答

布莱恩特:在一个团队关系由门票和官僚制度驱动的组织中,你能建议一些快速的胜利来让这些关系更顺利地运行吗?

问题:显然,我认为这取决于组织。我曾见过一些组织,并与那些在组织中工作的人交谈过,在这些组织中,一切都是通过票证来完成的,一切都是通过票证解决的速度来衡量的。这就是激励人们的方式。从某种意义上说,我不知道有什么捷径可以解决整个问题。当我看到一些组织,他们希望做出重大转变,那么可能需要一段时间。将组织推进到一个不同的方向需要很多推动。话虽如此,我认为根据我的经验,当情况恶化到人们只是就门票和事件进行交流,然后把他们放在一个房间里或虚拟房间里,只是相互了解,这对我来说真的很有帮助。也有人发帖说,微笑可能会有所帮助。这也是一个很好的观点。

布莱恩特:接下来,你谈到让团队的开发者拥有微服务?这不会产生额外的筒仓吗?如果是这样,您如何管理或避免这种情况?

问题:我不确定它将如何创建额外的筒仓。根据我的经验,有一件事是有点反模式的,那就是如果你有一组人编写代码,另一组人可能对代码一无所知,但在凌晨3点出错时必须接听电话。这本身在理论上可能不是一个筒仓,但在实践中,这在这两支球队之间造成了差距。基本上,在一个团队中,团队不仅编写代码并推出更改,可能与另一个团队一起,而且在系统出现问题时,至少部分地处于钩子上,我认为这创造了一种感觉,我驱动它。我拥有它。我已经准备好了,这是我的。我认为这确实很有帮助。

布莱恩特:我见过Netflix的人谈论事物的全生命周期所有权,这非常有趣。

问题:当然也可以为单独的团队留出空间,比如SRE团队或类似的团队,这也是整个流程的一部分。我认为,尽可能让这些团队共同拥有它是非常有帮助的。

布莱恩特:我正在设计微服务,但我有大约10个服务,并且已经看到了很多集成问题?您如何管理这些服务中的混乱?

问题:系好安全带。我认为这是完全正确的。事情很快变得复杂起来。我认为这就是为什么在可观察性上有如此多的投资,在这个工具上,所以我们可以让我们的头脑绕过它。我认为,显然,我们需要大量的工具和仪器来尽可能多地了解系统。这也涉及到分布式跟踪和理解系统如何相互影响,等等。我想我的建议是,不要回避,但要投资。投资于尽可能地了解系统的行为。

布莱恩特:现在回到更多的人这边。你能举例说明你过去参与过的组织中的激励措施吗?

问题:我认为当你谈论激励时,人们通常首先开始谈论钱。当然,这是一个激励因素。老实说吧。我觉得有点深。我认为,从我的角度来看,当激励措施以一种创造正确行为的方式建立起来,并且实际上让人们快乐并发展他们的事业时,激励措施最有效。让我们回到这个例子,如果出现问题,开发人员可能还需要在凌晨3点拿起电话。也许在某些组织中,他们不会因此得到任何奖励。这意味着你没有以奖励他人的方式建立激励机制。即使是在绩效考核中,或是在同侪的强化下,或是在领导层的强制执行下,你实际上是在奖励,那么奖励就不同了。它是以不同的方式设置的。这就是我说的动机。例如,如果您需要一个团队协作良好的组织,您如何激励它?你可能不仅通过创建会议,而且还通过奖励那些真正推动合作的人来激励这种合作。

布莱恩特:你能推荐一些关于面对人类挑战的书吗?我知道你放了一些像丹·平克的经典书,就在那里。还有别的书吗?

问题:我有很多我喜欢的。我现在正在重读《轻推》。

布莱恩特:马尔科姆·格拉德威尔?

问题:不,是这个。这并不完全是关于商业的,但它确实讨论了如何创造小的激励和小的推动来慢慢改变行为。我真的很喜欢这样,因为我认为当你有一个大的组织,或者你正试图完成的一个大的改变,通常最好的行动方式就是慢慢地朝一个方向前进。这与商业无关,但一个具体的例子是,如果你尽量不吃太多糖果,而把糖果留在厨房而不是桌子上,你就会少吃糖果。这是关于轻推的建议。您可以将其应用于许多不同的情况。

布莱恩特:我读过这本书。这是一本很棒的书。

再次进入技术领域。如何最好地评估微服务系统。假设你是一名技术领导者。你已经进入了一个组织。您已经对愿景有所了解,并且希望了解技术方面和人员方面的情况。有什么建议吗?

问题:我想如果你对这个系统完全陌生,我首先要考虑的是,你的团队是否了解他们所有的上游和下游依赖关系?这并不总是被理解的。您的团队是否了解其系统的限制?这也不总是很好理解。如果您不能与所有这些下游服务通信,您的系统会发生什么情况?您是否设置了指标、仪表盘和其他设置?那是另一个。然后,我要看的另一件事是速度。您能够以多快的速度进行更改,并在生产中安全地实现这些更改?有时候,你的系统中生长的藤壶越多,事情就越慢。我认为这是另一个非常重要的方面。

布莱恩特:你如何衡量组织的健康状况?

问题:我们谈论微服务系统是复杂的。我认为人类是无限迷人的,人类的组织也许更是如此。当涉及到度量或评估组织的健康状况时,有很多事情。一些更明显的事情是,你的记忆力是什么?人们总是在沮丧中离开吗?这是出问题的明显迹象。我认为,当你也在观察你的组织的生产力时,有很多代理指标,人们会发现它们有很多缺点。我明白为什么。比如代理指标,比如提交了多少代码,或者我们能以多快的速度完成代码审查之类的事情?这些都是代理指标,但它们可以告诉你一些事情,也可以告诉你趋势。这是一件事。另外一件事,老实说,我发现你只需要和人们谈谈,因为每个人都有不同的观点。世界上所有的代理指标都无法让你更深入地了解人们在为什么而挣扎,人们在为什么而高兴。

原文:https://www.infoq.com/presentations/microservices-best-practices/

 

Article
知识星球
 
微信公众号
 
视频号