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