微服务的隐性红利:你不知道的8个好处

简介: 本文讲的是微服务的隐性红利:你不知道的8个好处【编者的话】微服务未必适用于所有公司,实施过程也并非易事。之前大家讨论是否采用微服务时的重点主要在于它的自主性、敏捷性、弹性和开发者的生产能力。但这并不是微服务的所有优点,本文中提到的这些额外的好处也是值得利用的。
本文讲的是微服务的隐性红利:你不知道的8个好处【编者的话】微服务未必适用于所有公司,实施过程也并非易事。之前大家讨论是否采用微服务时的重点主要在于它的自主性、敏捷性、弹性和开发者的生产能力。但这并不是微服务的所有优点,本文中提到的这些额外的好处也是值得利用的。

微服务未必适用于所有公司,实施也并非易事

作为构建分布式系统的一种方式,微服务可以做到只用hardened API提供服务。围绕特定、有界的上下文或责任范围,这些服务具有高内聚低耦合的特点。这些服务通常很简单,但却可以构成非常丰富和复杂的应用。采用基于微服务的新方式需要付出相当大的努力,特别是从monolithic架构迁移过来的例子就更加麻烦。微服务有很多优点都是众所周知,其中不乏敏捷性、弹性、可伸缩性、可扩展性和开发效率高。本文将指微服务不为人所知的一些优点,或者说是隐性的红利,实施者应该有意识的去利用。

在微服务背后最基本的利益驱动是清晰地分离关注点,将每项服务的注意力集中在应用的某些定义清晰(well-defined)的地方。这些服务能以低耦合的方式组合,并具有独立部署能力。许多人都被其能够频繁、低风险改动的性能吸引。Robert C. Martin这样描述单一职责原则( single responsibility principle ):“ 将改变原因相同的聚一起,将改变原因不同的相分离 。”明确的分离关注点,关注点间的耦合最小化,以及潜在的高变动率导致业务敏捷性和工程速度的提升。

Martin Fowler认为,比起迁移到微服务上去,持续交付和用代码处理基础设施更重要。一些人在实施过程中采取了这些方法,由此带来了有弹性,灵活性和生产力较高的积极影响。微服务的另一个好处是,它允许架构各部分的拥有者在构建大规模分布式系统时选择不同的机制,同时顾及到持久性机制的选择、一致性和并发。这给各服务更多自主权,有助于快速适用新技术,允许仅向一部分或者某一个服务提供定制方法。

好处

虽然很难实现,但基于微服务的方法还是给组织带来了很多好处,尽管有些并不明显。以下将列出一些不那么明显的好处,但足以说明采用微服务时付出的努力都是值得的。

好处1:无需许可的创新(Permissionless Innovation)

无需许可的创新即“ 他人在我们创造的通信结构之上进行创新的能力 ”,这个概念由IETF (Internet Engineering Task Force)的主席,Jari Arkko提出。如果一切成熟,接口用户的创新将震惊接口的设计者。这与那些整合前需要咨询 gatekeeper blocker 的委婉用法)的方法不同。
有一个简单的测试可以分辨“无需许可的创新”已经达到的程度,那就是跨团队会议(和队内会议不同)的流行程度。跨团队会议意味着服务接口的协调、耦合和粒度或功能问题。工程师们会尽量避免开会,这样的会议意味着需要整合的并不只是某服务的API。接受了”无需许可的创新 ”概念的团队应该具有高实验率和低跨团队会议率。

好处2:常规故障(Enable Failure)

计算机科学中,我们仍不知道如何构建能够稳定工作的复杂系统,而且不稳定性和系统的规模和复杂性成正比。 尽管在关于微服务是否能够减少整体复杂性上有所争议,但微服务将会增加故障的次数,这个观点还是值得接受的。进一步来说,跨服务边界的故障将更难修补,因为外部调用堆栈本质上就比内部调用更加脆弱,而且调试任务会受限。 @ honest_update的一条推文有时会让人感到不舒服: “我们用微服务替代了monolith,搞得现在每次中断都像一次神秘谋杀。”

不可避免的、常规的故障会引起人们关于状态持久性、弹性、依赖管理、功能降低等方面的探讨。通过利用高速缓存、计量、流量控制、节流、减负荷和回退等技术,这些探讨可以减少特定故障的影响范围。在基于微服务的成熟架构中,个别服务的故障应该是意料之中的,但所有服务的级联故障应该不可能出现。

好处3:不再依赖小团队间的信任(Disrupt Trust)

在小公司或者代码基础较小的情况下,工程师们对部署工作心怀信任,因为他们可以查看每一个人的每一次交付。当团队规模和总速度增加时,“邓巴数字”(即150定律)就开始起作用了,这种信任也开始变得紧张。正如英国人类学家Robin Dunbar所定义的那样,这是个人通过直接接触可以维持的最大社交关系数量。

微服务可能会让团队信任面临新的问题。服务之间的边界变成一组API。用户不再影响API背后的设计、设计如何演变以及数据如何存在,而是要获取一组SLA(service-level agreement 服务层协议)来控制API的稳定性和运行特征。原来的信任可能会被自治权和问责制所取代。

Conway定律的定义者Melvin Conway说, “任何组织设计出的系统最终都会与该组织的沟通结构相匹配。”

微服务可以为组织提供一个高效模型,使其规模远大于个人接触范围的限制。

好处4:负责到底(You Build It, You Own It)

微服务宣扬“谁构建,谁负责”这样的模型。亚马逊CTO Werner Vogels在2006年与Jim Gray的谈话中这样描述该模型,这段对话在 ACM Queue  上刊登过。 “每一个服务都有一个对应的团队,这个团队对该服务完全负责,从琢磨功能,设计结构,实现,到运营。谁构建,谁运行。这让开发者们日复一日的与软件之间发生联系,也让他们日复一日地与用户发生着联系。用户们的反馈对推动服务质量来说至关重要。”

此番谈话之后的十年中,越来越多的软件工程师按照这个模型工作,也担上了更多责任,于此同时 ,随着微服务的发展,他们采取了一些方法去获得更高的自动化程度,并降低运营开销。 这些方法中就有持续部署、虚拟化或容器化,增强弹性,以及各种自修复技术。

好处5:加速关闭(Accelerate Deprecations)

在monolith架构中,很难安全关闭某一部分。但在微服务中,可以清晰提取出服务中的某列,建立起更有竞争潜力的新版本服务,或者构建一个与原版本完全不同但向后兼容重要接口的新服务。

在无需许可的情况下,服务的变更应该是常规化的。我们要努力将关闭不常用服务变得更简单。一种方法是,有足够高的资源竞争水平,这样才能保证在资源有限的团队中,可以把更多精力从衰败的服务中抽离出来,放到对用户来说更重要的服务中去。这种情况下,需要对这些不成功的服务负责的人,就变成了最在意这些服务的用户。被关掉服务的团队理所当然的认为这种情况实属无奈,尽管他们也参与了关闭服务的决定。而不希望遇到这种无奈情况的团队则会主动迁移或者终止依赖。听起来很残酷,但这是“快速失败”很重要的一部分。

好处6:端集中式元数据(End Centralized Metadata)

在亚马逊的早年,一小部分关系型数据库用来存储种鸽公司的关键交易数据。考虑到数据的完整性和性能利益,任何提交的架构更改都需要经过DB Cabal的审核通过。DB Cabal是由一群企业建模精英,数据库管理员和软件工程师组成的把关团队。有了微服务,用户不需要也不用再关心API背后的数据是如何持久存在的。事实上,置换持久机制这种事可能并不需要用户洞悉。

亚马逊的早期,少量的关系数据库被用于公司的所有关键的交易数据。在数据的完整性和性能的利益,任何提出的架构更改必须审查和批准的DB集团,一个守门组好心的企业建模、数据库管理员、软件工程师。与精卫,消费者不知道或关心数据如何坚持背后的一套API它们所依赖的,确实应该可以换出另一个持久化机制没有消费者注意或者需要被通知。

好处7:集中痛点(Concentrate the Pain)

采用微服务的组织可以按需以不同方式处理不同服务。这需要公司整体的数据分类模型保持一致,并与公司不同业务的完整性关键流程分类。这对服务建模来说是个挑战,毕竟服务要处理重要的数据和过程,实施控制对公司安全性和必要的合规性来说都非常重要。随着微服务的增长,最受规则限制的负担可以集中于一小部分服务上,从而放松了创新率更高的其他服务。

好处8:新的测试方式(Test Differently)

工程师们经常将实施微服务看做改变测试方式的契机。通常,他们会开始思考,在构建服务之前,怎样在设计阶段开始早期测试。所有权和范围的清晰定义有助于扩大覆盖范围。正如Yelp在阐述服务原则时所说, “你的接口是测试中最终要的部分。你的接口测试会告诉你用户真正看到的东西,但其他测试会告诉你怎样保证用户能够看到这些结果。”

采用诸如持续部署,烟雾测试和阶段部署等方法可以使测试保真度更高,同时降低生产问题出现时的修复时间。测试的效率更多的是由可以由修复问题的速度来描述,而不是发现问题的速度。

提示

以下指标可以判断你采用的微服务是否完整。如果发现有下列问题,那么你还没有做到真正的微服务:
  • 不同服务需要协调部署。
  • You ship client libraries。
  • 一个服务中的变动会引起其他服务中的变动或导致意料外的后果。
  • 多个服务共享持久存储。
  • 不能随意更改服务持久层。
  • 工程师需要精通其他团队服务的设计和架构。
  • 你拥有适用于所有服务的合规控制权。
  • 基础设施不可编程。
  • 不能一键部署和复原。

结论

微服务未必适用于所有公司,实施过程也并非易事。之前大家讨论是否采用微服务时的重点主要在于它的自主性、敏捷性、弹性和开发者的生产能力。但这并不是微服务的所有优点,本文中提到的这些额外的好处也是值得利用的。

原文链接:The Hidden Dividends of Microservices(翻译:马远征)

原文发布时间为:2016-08-29

本文作者:马远征

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:微服务的隐性红利:你不知道的8个好处

相关文章
|
5月前
|
存储 算法 索引
HashMap的实现原理
HashMap基于哈希算法实现,采用链表散列结构(数组+链表/红黑树)。JDK1.8前使用拉链法解决冲突,将冲突元素存入链表。JDK1.8后,当链表长度超过8时,转化为红黑树以提升查找效率;当元素数小于6时,退化为链表。通过key的hashCode计算索引,put时若key相同则覆盖,不同则添加到链表或树中。get时通过hash值定位并判断key获取对应值。
295 0
|
8月前
|
存储 网络安全 PHP
在阿里云服务器上如何搭建网站,网址怎么建站图文教程详解案例及步骤.
做好一个网站不仅需要我们对站点装修及内容发布,也需要我们学会对网站运营,如进行站长推送,将我们内容快速推送到各大搜索平台,有效的让用户能搜索到我们内容,或者需要在谷歌推广就必须对网站添加SSL证书,这样搜索域名的时候搜索框不会出现<不安全>字符在域名前面,以及运行网站要懂运维,出现BUG时要去及时解决查找原因.自始至终自身要不断学习网络相关知识,遇到问题方能迎刃而解. 本文结束,如还有不懂的同学可联系作者,倾力而为,祝您成功!
2013 75
|
消息中间件 监控 前端开发
RabbitMQ插件详解:rabbitmq_web_stomp【RabbitMQ 六】
RabbitMQ插件详解:rabbitmq_web_stomp【RabbitMQ 六】
1613 0
|
存储 虚拟化
使用DiskGenius工具来实现物理机迁移虚拟机,实现虚拟化
【9月更文挑战第1天】使用 DiskGenius 工具可将物理机迁移到虚拟机,实现系统与数据的虚拟化。此过程包括:安装 DiskGenius 和准备虚拟化平台;备份物理机数据;使用 DiskGenius 备份磁盘;在虚拟化软件中创建新虚拟机并导入磁盘备份;配置及调整虚拟机设置;测试性能并优化资源分配。这有助于测试、开发及系统管理。
1669 5
|
存储 监控 Cloud Native
ClickHouse物化视图里常见的7个坑,你踩过几个?
在 OLAP 的业务场景中,不仅要把数据存起来,还需要把数据处理好。在 ClickHouse 中,为了提高数据处理性能,使用 Materialized View 是有效的方法之一。本文主要探讨 Materialized View(下文称 MV) 的工作原理与最佳实践,并介绍了使用过程中容易踩坑的一些问题和解决方案。
1622 5
|
运维 开发工具 C#
总结两种使用OpenCv连接海康相机播放视频画面方法
总结两种使用OpenCv连接海康相机播放视频画面方法
2724 0
|
数据采集 人工智能 Serverless
AI 克隆声音,只需 3 分钟(附最全教程)
文章介绍了GPT-Sovits,一个开源的生成式语音模型,因其在声音克隆上的高质量和简易性而受到关注。阿里云函数计算(Function Compute)提供了一个快速托管GPT-Sovits的方法,让用户无需管理服务器即可体验和部署该模型。通过函数计算,用户可以便捷地搭建基于GPT-Sovits的文本到语音服务,并享受到按需付费和弹性扩展的云服务优势。此外,文章还列举了GPT-Sovits在教育、游戏、新能源等多个领域的应用场景,并提供了详细的步骤指导,帮助用户在阿里云上部署和体验GPT-Sovits模型。
36717 8
|
开发工具 C语言 数据安全/隐私保护
git提交代码到远端仓库的方法详解
git提交代码到远端仓库的方法详解
287 0
|
API 开发工具 Android开发
简述大疆无人机对接
【2月更文挑战第7天】本文介绍了对接大疆无人机的主要目的,包括实时画面获取、飞行数据监测、操控飞行、媒体管理和业务功能开发等,并列举了多种开发接口如MobileSDK、UXSDK、云开发API等。重点讨论了MobileSDK在Android平台的应用,包括SDK集成步骤、直播推流和获取飞机实时数据的细节。另外,UXSDK用于加速应用开发,提供预设UI组件。上云API则简化了无人机与第三方云平台的集成,支持MQTT、HTTPS和WebSocket协议,适用于行业级无人机。对接流程涉及Pilot2和Dock的配置,以及数据传输和业务功能处理。文章还提及了如何对接多个飞机的方法。
11133 0
简述大疆无人机对接
|
Java Maven
从原理和源码梳理Springboot FatJar 的机制
从原理和源码梳理Springboot FatJar 的机制
434 0
从原理和源码梳理Springboot FatJar 的机制

热门文章

最新文章