您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

微服务的流程和组织,终于有人讲明白了

时间:2019-10-12 10:16:53  来源:  作者:

导语:微服务架构最重要的好处是它可以实现大型的复杂应用程序的持续交付和持续部署。持续交付和持续部署是DevOps的一部分,DevOps是一套快速、频繁、可靠的软件交付实践。高效能的DevOps组织通常在将软件部署到生产环境时面临更少的问题和故障。

作者:克里斯·理查森

如需转载请联系华章科技

对于大型和复杂的应用程序,微服务架构往往是最佳的选择。然而,除了拥有正确的架构之外,成功的软件开发还需要在组织、开发和交付流程方面做一些工作。

图1展示了架构、流程和组织之间的关系:

微服务的流程和组织,终于有人讲明白了

图1

▲大型复杂应用程序快速、频繁和可靠地交付软件需要具备几项DevOps关键能力,其中包括持续交付和持续部署,小型自治团队和微服务架构

我们已经谈过了微服务架构,现在来看看组织和流程。

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)的概念,其中阐述了人们如何对变化做出情绪化的反应。它包括以下三个阶段。

  1. 结束、失落和放弃:当人们被告知某种变化,这类变化会把他们从舒适区中拉出,这类情绪开始滋生和蔓延。人们会念叨失去之前的种种好处。例如,当被重组到一个新的跨职能团队时,人们会想念他们之前的同事。再比如,对于负责全局数据建模的团队来说,每个服务团队负责自己的数据建模,这对他们是一种威胁。
  2. 中立区:处理新旧工作方式交替过程中,人们普遍会对新的工作方式无所适从。人们开始纠结并必须要学习处理新工作的方式。
  3. 新的开始:最终阶段,人们开始发自内心地热情拥抱新的工作方式,并且开始体验到新工作方式所带来的种种好处。

本书介绍了如何管理转型过程中每个阶段的问题,提高转型的成功率。FTGO显然正在单体地狱中煎熬,急切地需要转型到微服务架构。他们也需要对组织结构和开发流程做出调整。为了成功地实现这一切,FTGO必须认真面对这些转型模式和所有可能的情绪化反应。

 

总结

  • 单体架构模式将应用程序构建为单个可部署单元。
  • 微服务架构模式将系统分解为一组可独立部署的服务,每个服务都有自己的数据库。
  • 单体架构是简单应用的不错选择,微服务架构通常是大型复杂应用的更好选择。
  • 微服务架构使小型自治团队能够并行工作,从而加快软件开发的速度。
  • 微服务架构不是银弹:它存在包括复杂性在内的诸多弊端。
  • 微服务架构模式语言是一组模式,可帮助你使用微服务架构构建应用程序。它可以帮助你决定是否使用微服务架构,如果你选择微服务架构,模式语言可以帮助你有效地应用它。
  • 你需要的不仅仅是通过微服务架构来加速软件交付。成功的软件开发还需要DevOps和小而自治的团队。
  • 不要忘记采纳微服务过程中的人性层面。你需要考虑员工的情绪才能成功转换到微服务架构。

关于作者:克里斯·理查森(Chris Richardson),世界十大软件架构师之一,《POJOS in Action》等技术名著的作者,也是著名开源项目 Cloud Foundry 和 Eventuate 的创始人。他的研究领域包括微服务架构设计、分布式数据管理、事件驱动的应用架构、领域驱动设计、持续交付、Spring 框架、Scala、NoSQL 数据库等。

本文摘编自《微服务架构设计模式》,经出版方授权发布。



Tags:微服务   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  Tags: 微服务  点击:(9)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  Tags: 微服务  点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  Tags: 微服务  点击:(35)  评论:(0)  加入收藏
实施微服务架构,我们一直在遵循一个实践原则:每个微服务要有自己独立的数据库,避免数据库层面的耦合。这种理所当然感觉好像不需要多加思考,就是应该这样做; 图片来源:James Lewi...【详细内容】
2021-10-11  Tags: 微服务  点击:(42)  评论:(0)  加入收藏
在今年的NGINX Sprint 2.0虚拟大会上,NGINX(来自流行的开源web服务器/负载均衡器和反向代理背后的公司F5),发布了NGINX现代应用参考架构(MARA)。该公司在一篇博客文章中说,这将帮...【详细内容】
2021-09-26  Tags: 微服务  点击:(61)  评论:(0)  加入收藏
今天,字节跳动正式宣布开源 CloudWeGo。这是一套以 Go 语言为核心、专注于微服务通信与治理的中间件集合,具有高性能、可扩展、高可靠的特点。项目地址:https://github.com/clo...【详细内容】
2021-09-08  Tags: 微服务  点击:(93)  评论:(0)  加入收藏
1. Spring Boot 与 Spring Cloud Spring Boot 是用于编写微服务的 Java 基础框架。在Spring Cloud 提供了各种构建全栈微服务的功能。构建小型和大型系统都适合。由于控制反...【详细内容】
2021-08-31  Tags: 微服务  点击:(163)  评论:(0)  加入收藏
现有问题在 EFK 日志收集 篇中,我们讲解了如何利用 EFK 收集 Kubernetes 集群日志。但是,还存在如下问题。 Elasticsearch 以单节点的形式部署,不能满足生产环境的要求 Fluentd...【详细内容】
2021-08-13  Tags: 微服务  点击:(104)  评论:(0)  加入收藏
在 Java 和 Kotlin 中, 除了使用Spring Boot创建微服务外,还有很多其他的替代方案。 名称 版本 发布时间 开发商 GitHub ...【详细内容】
2021-08-06  Tags: 微服务  点击:(175)  评论:(0)  加入收藏
一、微服务的现状及未来1.服务架构的演变1.1 单体架构  单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问...【详细内容】
2021-07-22  Tags: 微服务  点击:(125)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条