导语:微服务架构最重要的好处是它可以实现大型的复杂应用程序的持续交付和持续部署。持续交付和持续部署是DevOps的一部分,DevOps是一套快速、频繁、可靠的软件交付实践。高效能的DevOps组织通常在将软件部署到生产环境时面临更少的问题和故障。
作者:克里斯·理查森
如需转载请联系华章科技
对于大型和复杂的应用程序,微服务架构往往是最佳的选择。然而,除了拥有正确的架构之外,成功的软件开发还需要在组织、开发和交付流程方面做一些工作。
图1展示了架构、流程和组织之间的关系:
图1
▲大型复杂应用程序快速、频繁和可靠地交付软件需要具备几项DevOps关键能力,其中包括持续交付和持续部署,小型自治团队和微服务架构
我们已经谈过了微服务架构,现在来看看组织和流程。
成功往往意味着研发团队规模的扩大。一方面,这是个好事,因为人多力量大。但是团队大了以后,正如Fred Brooks在《人月神话》这本书中提到的,沟通成本会随着团队的规模呈O(N ^ 2)的速度上升。如果团队太大,由于沟通成本过高,往往会使得团队的效率降低。想想看,如果每天早上的站会规模达到20人会是怎样?
解决之道是把大团队拆分成一系列小团队。每个团队都足够小,人员规模为8~12人。每个团队都有一个明确的职责:开发并且可能也负责运维一个或者多个服务,这些服务实现了一个或多个业务能力。这些团队都是跨职能的。他们可以独立地完成开发、测试和部署等任务,而不需要频繁地与其他团队沟通或者协调。
为了在使用微服务架构时有效地交付软件,你需要考虑康威定律,它规定了如下内容:
设计系统的组织……往往被组织的架构所限制,最终设计的结果是这些组织的沟通结构的副本。
——梅尔文·康威
换句话说,应用程序的架构往往反映了开发它的组织的结构。因此,反向应用康威定律并设计你的企业组织,使其结构与微服务的架构一一对应。通过这样做,可以确保你的开发团队与服务一样松耦合。
若干个小团队的效率显然要高于一个单一的大团队。微服务架构使得团队可以实现某种程度的“自治”。每个团队都可以开发、部署和运维扩展他们负责的服务,而不必与其他团队协调。更进一步,当出现了某个服务故障或没有满足SLA等要求时,对应的责任人(团队)也非常清楚。
而且,开发组织的可扩展性更高。你可以通过添加团队来扩展组织。如果单个团队变得太大,则将其拆分并关联到各自负责的服务。由于团队松散耦合,你可以避免大型团队的沟通开销。因此,你可以在不影响工作效率的情况下添加人员。
采用微服务架构以后,如果仍旧沿用瀑布式开发流程,那就跟用一匹马来拉法拉利跑车没什么区别—我们需要充分利用微服务带来的各种便利。如果你希望通过微服务架构来完成一个应用程序的开发,那么采用类似Scrum或Kanban这类敏捷开发和部署实践就是必不可少的。同时也需要积极实践持续交付和持续部署,这是DevOps中的关键环节。
Jez Humble把持续交付定义为:
持续交付能够以可持续的方式安全、快速地将所有类型的更改(包括新功能、配置更改、错误修复和实验)交付到生产环境或用户手中。
持续交付的一个关键特征是软件总是随时可以交付的。它依赖于高水平的自动化,包括自动化测试。在将代码自动部署到生产环境的过程中,持续部署把持续交付提升到了一个新的水准。实施持续部署的高绩效组织每天多次部署到生产环境中,生产中断的次数要少得多,并且可以从发生的任何事情中快速恢复。微服务架构直接支持持续交付和持续部署。
持续交付和持续部署(以及更一般地说,DevOps)的目标是快速可靠地交付软件。评估软件开发的四个有用指标如下:
在传统组织中,部署频率低,交付的时间很长。特别是开发人员和运维人员通常都会在维护窗口期间熬夜到最后一刻。相比之下,DevOps组织经常发布软件,通常每天多次发布,生产环境问题要少得多。例如,亚马逊在2014年每隔11.6秒就将代码更改部署到生产环境中,Netflix的一个软件组件的交付时间为16分钟。
采用微服务架构以后,不仅改变了技术架构,也改变了组织结构和开发的流程。归根到底,这是对工作环境中的人(正如之前提到的,情绪化的生物)进行的一系列改变。如果忽略人们的情绪,那么采纳微服务架构将会是一个非常纠结和折腾的过程。FTGO的首席技术官玛丽和其他的管理层,正面临着如何改变FTGO软件开发方式的挑战。
畅销书《Managing Transitions》介绍了转型(transition)的概念,其中阐述了人们如何对变化做出情绪化的反应。它包括以下三个阶段。
本书介绍了如何管理转型过程中每个阶段的问题,提高转型的成功率。FTGO显然正在单体地狱中煎熬,急切地需要转型到微服务架构。他们也需要对组织结构和开发流程做出调整。为了成功地实现这一切,FTGO必须认真面对这些转型模式和所有可能的情绪化反应。
关于作者:克里斯·理查森(Chris Richardson),世界十大软件架构师之一,《POJOS in Action》等技术名著的作者,也是著名开源项目 Cloud Foundry 和 Eventuate 的创始人。他的研究领域包括微服务架构设计、分布式数据管理、事件驱动的应用架构、领域驱动设计、持续交付、Spring 框架、Scala、NoSQL 数据库等。
本文摘编自《微服务架构设计模式》,经出版方授权发布。