Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微服务的隐性收益

微服务的隐性收益

作者头像
半吊子全栈工匠
发布于 2020-12-30 02:00:29
发布于 2020-12-30 02:00:29
6690
举报
文章被收录于专栏:喔家ArchiSelf喔家ArchiSelf

引言:微服务并不适用于每个公司,而且实现微服务化的过程也并不容易。但是,实现微服务除了明显优势之外,还有一些隐性的收益值得关注。本文编译自 Tom Killalea的一篇旧文 https://queue.acm.org/detail.cfm?id=2956643,融入了一点儿个人的理解。

微服务是一种构建分布式系统的方法,在微服务系统中,服务只能通过API来公开,这是一个API的世界(可以参考没有被了解的API?一个老码农眼中的API世界)。在微服务的世界里,服务本身在特定且有良好界限的场景下或职责区域具有高度的内聚性,而且服务之间是松耦合的。这样的微服务通常很简单,但是它们可以组合成非常丰富且复杂的应用。采用微服务的构建方法所需的工作量相当大,特别是从单体架构迁移的时候。然而,微服务的好处众多,众所周知的优势包括敏捷性的增强、弹性、可伸缩性和开发人员的生产力。本文指出了微服务的一些隐性收益,我们或许应该有意识地努力收获这些收益。

微服务带来的最基本好处是明确地分离服务,将每个服务的关注点集中在整个应用中的某个明确定义的位置。这些服务可以通过服务之间的松耦合以新颖的方式组合,并可以独立部署。清晰的关注点分离,跨领域的最小耦合,以及更高变化率的潜力导致业务灵活性和工程速度的提高。许多人都被微服务架构能够更频繁地做出改变且减少负面影响的诱惑所吸引。

通过持续交付和基础设施的可编程化,这些实践在实现微型服务的过程中对弹性、敏捷性和生产力产生了积极的影响。微服务的另一个关键好处是,它们可以使整个体系结构的不同部分的所有者在持久性机制选择、一致性和并发性方面对构建大规模分布式系统做出非常不同的决策。这给了服务所有者更大的自主权,可以导致更快地采用新技术,并且可以允许他们追求定制的方法,这些方法可能只对少数服务,甚至只对一个服务是最佳的。

虽然微服务有实现上的难度,但是可以为那些麻烦的组织带来好处,尽管其中一些收益并不是显而易见的。下面是一些不那么明显的好处,这些因素可能是采用微服务的额外收益。

隐性收益 # 1: 无许可创新

关于创新,可以参考《隄上创新谁述记——老码农的“创新”漫谈》和《斯须改变如苍狗——一张图的随想》,那么,什么是无许可创新呢?无许可创新是指“其他人在我们创造的通信结构之上创造新事物的能力”。

一旦启用了微服务,它可以引导业务方创新一系列的接口,应用这些接口可能使得设计者都会感到惊讶。为了确定无许可创新是否已经到了可能的程度,一个简单的测试是观察团队间会议的流行程度。跨团队会议表明了协调、耦合以及服务接口的粒度或功能问题。一个热爱无许可创新的组织应该有较高的实验率和较低的跨团队会议率。

隐性收益 # 2: 可预料的故障

在IT领域,我们仍然不知道如何构建一个工作可靠的复杂系统,这一点不足为奇,系统的不可靠性随着规模和复杂程度的增加而增加。虽然对于微服务是否能够降低整体复杂性的看法不一,但是微型服务通常会增加故障的数量是肯定的。此外,跨服务边界的故障更难以排除,因为外部调用堆栈本身比内部调用堆栈更脆弱,而且调试任务受到更糟糕的工具和更具挑战性的特定功能分析的限制。有人说:“我们用微型服务替换了原来的单体结构,于是每一次断电都可能更像是一场谋杀之谜。”

为不可避免性失败的常态而设计,可以引发关于状态持久性、弹性、依赖管理、共同命运和优雅降级的常态讨论。这样的讨论通常利用缓存、监控、分流与限流、负载减少等技术来减少任何给定故障的爆炸半径。在一个成熟的微服务体系结构中,应该预料到单个服务的故障,而所有服务的级联故障应该是不可能的。

隐性收益 # 3: 突破信任

在小公司或小型代码库中,一些工程师可能对部署的内容有强烈的信任感,因为他们会review每一个提交内容。随着团队规模的增加,“邓巴数”开始发挥作用,导致这种信任变得越来越紧张。关于邓巴数,可以参考《有意义的不只是邓巴数》。

向微服务的转型可以迫使这种信任浮出水面并面对现实。一个服务和另一个服务之间的边界是一组API。我们放弃了对这些API背后的设计、如何开发实现以及数据如何持久化的影响,以换取一组服务质量等级(SLA)来管理API的稳定性及其运行时的特性(关于SLA可以参考浅析面向云架构的SLA 以及性能,10点系统性思考)。信任可以用自治和责任的结合来取代。

微服务可以为不断发展的组织提供一个有效的模式,它的规模远远超出了“邓巴数”的限制。

隐性收益 # 4: 构建并拥有

微服务鼓励“构建并拥有它”的模式。亚马逊 CTO Werner Vogels 在2006年与 Jim Gray 的一次对话中描述了这个模型: “每个服务都有一个与之相关的团队,这个团队完全负责这个服务——从确定功能的范围,到构建它,再到运行它。也就是说,开发者建造并运行它。这使得开发人员能够接触到这些软件的日常操作,也使他们与客户进行日常接触。客户反馈回路对于提高服务质量至关重要。”

在之后的十年里,随着越来越多的软件工程师遵循这种模式,并承担起运营和开发微服务的责任,已经推动了一系列实践的广泛应用,这些实践能够实现更大程度的自动化,并降低运营成本。其中包括持续部署虚拟化容器化、自动弹性和各种自我修复技术。

隐性收益 # 5: 加速废弃

在一个巨型单体架构体系中,很难安全地反对任何东西。使用微型服务,则很容易获得服务调用量的清晰视图,支持服务的不同版本和潜在的竞争版本,或者建立一个除了向后兼容那些用户最关心的接口之外与旧服务不共享任何东西的新服务。

在一个无许可创新的世界里,服务可以而且应该经常变来变去。需要投入一些努力,使那些没有真正流行起来的服务变得更加容易使用。解决这个问题的一个方法是对资源进行高度的竞争,任何资源有限的团队,只要负责一项不景气的服务,就会把大部分时间花在对客户更重要的其他服务上。当这种情况发生时,服务的不成功责任应该转移到最关心它的用户身上。这个团队可能理所当然地认为自己是被留下来“顶锅扛雷” ,其他团队则不希望保留对他们的依赖关系,这样就有了迁移或终止依赖服务的额外动机。这听起来可能很残酷,但这是“快速失败”的一个重要部分。

隐性收益 # 6: 终止数据库瓶颈

在亚马逊的早期,少量的关系数据库被用于公司所有关键的事务数据。为了保证数据的完整性和性能,任何提议的模式更改都必须经过 DBA团队的审查和批准。

使用微服务后,服务使用者不应该关心数据在一组API背后是如何持久化的,而且实际上,在不需要通知的情况下,将一种持久化机制替换为另一种持久化机制应该是可能的。

隐性收益 # 7: 集中面对痛苦

向微型服务的转型应该使组织能够采取非常不同的方法来满足其对不同服务的治理期望。这将从一个一致数据分类模型和不同业务流程完整性的关键度划分开始。这通常会导致为处理最重要数据和流程的服务建立安全模型,并实施必要的控制以满足公司的安全和合规需求。

随着微服务的激增,可以确保最重要的合规负担集中在极少数服务上,从而使剩余的服务有更高的创新率,相对没有这些问题的负担。

隐性收益 # 8: 不同的测试

工程团队经常把迁移到微服务视为一个机会,可以从不同的角度考虑测试。通常,在开始构建服务之前,会开始考虑如何在设计的早期阶段进行测试。更明确地界定所有权和范围可以鼓励实现更大测试的覆盖面。正如 Yelp 在阐述其服务原则时所说的,“接口是测试中最重要的组件。接口测试将告诉客户端实际看到了什么,而其余的测试将告诉如何确保客户端看到这些结果。”

采用持续集成、持续部署、冒烟测试和灰度部署等实践,可以导致在生产中发现问题时进行高保真和低修复时间的测试。一组测试的有效性不能用发现问题的速度来衡量,而更多的是用它们所带来的变化速度来衡量。

微服务转型中的危险指标

如果我们遇到了如下的情景,说明我们的微服务转型是不完整的,甚至是危险的。这些指标至少包括包括:

  • 不同的服务进行协调部署。
  • 需要提供客户端库。
  • 一个服务的改变会产生意想不到的后果,或甚至需要修改其他服务。
  • 服务共享同一个持久性存储。
  • 在没人帮助的情况下,你不能改变自己服务的持久化层。
  • 工程师需要对其他团队服务的设计和模式有深入的了解。
  • 有一个统一适用于所有服务的合规控制。
  • 基础设施不可编程。
  • 不能进行一键式的部署和一键式回滚。

结束语

微服务并不适用于每个公司,这个微服务的实现过程也并不容易。因此,关于采用微服务的讨论往往非常热烈,主要集中在自主性、敏捷性、弹性和开发人员的生产力上。然而,好处并不仅限于此,为了让微服务之旅更有价值,有意识地获得额外收益也很有意义。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 喔家ArchiSelf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何从传统单体架构转向微服务
当今,把单体架构的应用拆成微型服务是很时髦的。让我想起了2000年世纪初的那些日子,那时SOA正在流行,大多数公司,供应商和系统集成商,正忙着挥动SOA魔杖,希望它能将他们的遗留应用程序转变为更加灵活和敏捷的SOA应用程序。一个供应商甚至说,“使用SOA,您不需要编写一行代码“。不幸的是,事实却根本不是这样。虽然他们的大肆宣传,努力去做,结果却不美好。虽然服务的概念还不错,但是SOA具有强类型的服务定义,并且在HTTP上使用SOAP非常麻烦。这些缺点似于谚语中所说的“当你有一个新的闪亮的锤子时,一切看起来都像钉子”,这就是SOA的末日。
程序你好
2018/05/24
2K0
如何从传统单体架构转向微服务
(译)Medium 的微服务架构
微服务架构的目标是帮助工程团队安全快速地完成高质量的产品交付。良好解耦的服务能够在最小化对其它系统的影响的条件下进行快速迭代。
崔秀龙
2019/07/23
4810
(译)Medium 的微服务架构
第12章 Spring Boot与微服务第12章 Spring Boot与微服务12.1 微服务架构12.2 Spring Cloud构建微服务架构
随着RESTful web服务和JSON数据交换格式流行,简单快速建立一个可连接的服务已经越来越方便了。随着持续交付概念推广以及Docker容器普及,微服务将这两种理念和技术结合起来,形成新的微服务+API + 平台的开发模式,以及容器化微服务的持续交付概念。
一个会写诗的程序员
2018/08/20
5950
第12章 Spring Boot与微服务第12章 Spring Boot与微服务12.1 微服务架构12.2 Spring Cloud构建微服务架构
微服务架构体系——它适合您的软件开发吗?
“Microservice architecture provides a range of technical benefits that contribute to the development velocity and product quality in software projects, while also contributing to the overall business agility”– Mark Emeis, Senior director of software technologies, CA Technologies
程序你好
2018/09/29
7420
微服务架构体系——它适合您的软件开发吗?
微服务设计指南
微服务是当今软件工程师的一个热门话题。让我们了解如何使用微服务架构风格构建真正模块化、业务敏捷的IT系统。
yuanyi928
2018/12/07
1.2K0
微服务设计指南
可组合架构与微服务:哪个更优?
两种软件开发架构都有各自的优缺点。下面是如何决定可组合架构还是微服务架构哪种更适合你的方法。
云云众生s
2024/03/28
1610
微服务的几种设计模式
定义:微服务架构是将软件系统分解为可独立部署的自治单元,这些单元通过轻量级、与语言无关的方式进行通信,并共同实现业务目标
素履coder
2022/02/17
9280
微服务的几种设计模式
解析微服务架构(一):什么是微服务
解析微服务架构系列文章将分几篇描述微服务的定义、特点、应用场景、企业集成架构的演进以及微服务转型思路和技术决策考虑等内容,并以IBM技术为例介绍如何实现微服务架构转型。 为什么需要微服务架构 “微服务”架构是近期软件应用领域非常热门的概念。让我们先来看看传统IT架构面临的一些问题: 使用传统的整体式架构(Monolithic Architecture)应用开发系统,如CRM、ERP等大型应用,随着新需求的不断增加,企业更新和修复大型整体式应用变得越来越困难; 随着移动互联网的发展,企业被迫将其应用迁移至现代
逸鹏
2018/04/11
1.2K0
解析微服务架构(一):什么是微服务
【微服务架构】一文读懂单片到微服务架构的模式和最佳实践
在本文中,我们将学习如何使用设计模式、原则和最佳实践来设计微服务架构。我们将使用正确的架构设计模式和技术。 在本文结束时,您将了解如何在微服务分布式架构上设计系统以实现高可用性、高可扩展性、低延迟和对网络故障的弹性,从而处理数百万个请求。 Event-Driven Architecture 本课程将是软件架构设计的旅程,逐步将架构单片演变为事件驱动的微服务。 我们将从设计处理少量请求的电子商务整体架构开始软件架构的基础知识。 Journey of Design Architectures 之后逐步演
架构师研究会
2022/03/30
9470
微服务架构设计中的设计模式、原则及最佳实践
本文既有理论知识,又有实用信息:我们将学习每一种具体的模式,为什么以及应该在什么地方使用;然后,我们将看下应用了这些模式的参考架构;接下来,我们将综合运用新学到的模式设计我们的架构;最后,我们将确定选用什么技术实现架构。
用户2781897
2021/11/10
5160
什么是微服务
在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。 而所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。
前朝楚水
2018/07/26
9950
简历驱动开发?微服务中的几种失败路径
在去年 11 月的 QCon Plus 上,我介绍了微服务可能走入歧途的一些路径。我是 IBM 的一名顾问,我的一部分工作是帮助业务迈向云原生。本文提到的这些问题都是从我的经验总结出来的 -- 不幸的是,它们在实践中是非常常见的。
深度学习与Python
2022/03/23
3620
简历驱动开发?微服务中的几种失败路径
实践微服务六年,我获得了这些心得体会
我是一名微服务架构的忠心拥趸,虽然有时也会对其感到不爽。使用微服务时,我时常能感受到“小中见大”、“稳中有快”等理念,另一方面也会警惕“厨子太多烧坏了汤”。
xcbeyond
2020/10/21
8010
实践微服务六年,我获得了这些心得体会
Medium 微服务策略
微服务架构的目标是帮助技术团队更快、更安全、更高质量的推动产品,服务解耦可以让团队快速迭代,对系统的影响最小。
dys
2018/12/17
1K1
【微服务架构】什么是微服务? — 全面了解微服务架构
What is Microservices — Edureka 您有没有想过,什么是微服务以及扩展行业如何与它们集成,同时构建应用程序以满足客户的期望? 要了解什么是微服务,您必须了解如何将单体应用程序分解为独立打包和部署的小型微型应用程序。本文将让您清楚了解开发人员如何使用微服务根据需要扩展其应用程序。 在本文中,您将了解以下内容: 为什么是微服务? 什么是微服务? 微服务架构的特点 微服务架构的优势 设计微服务的最佳实践 使用微服务的公司 为什么是微服务? 现在,在我告诉你微服务之前,让我们看看在
架构师研究会
2022/04/24
2.5K0
【微服务架构】什么是微服务? — 全面了解微服务架构
跟着小程来学微服务--微服务思想
一直对微服务非常感兴趣,因为公司的架构改造正好有机会能够接触微服务,买来一些书,请教了很多微服务大牛同时自己也做了很多总结,写成了80页ppt,算是我对微服务的一个认识吧,微服务本身不同的人有不同的理解,而我就从我自己的角度来谈谈微服务是什么。
小程故事多
2018/08/22
4370
跟着小程来学微服务--微服务思想
什么是微服务?
微服务体系结构是在体系结构级别应用单一责任原则的自然结果。与传统的单片体系结构相比,这带来了许多好处,例如不同组件的独立可部署性、语言、平台和技术独立性、不同的可伸缩性轴以及增加的体系结构灵活性。
霍格沃兹测试开发Muller老师
2022/12/01
4960
一文读懂微服务
在本文中,我将讨论什么是微服务,它们为何如此重要。我们将从微服务历史以及它们与单体架构的比较开始。然后,我们将讨论微服务架构的一些原理,其潜在的缺点,以及如何与容器和Kubernetes等现代工具结合使用。
DevOps持续交付
2021/03/16
5870
一文读懂微服务
什么是微服务架构
什么是微服务? 微服务(Microservices Architecture)是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。 微服务的概念源于2014年3月Martin Fowler所写的章“Microservices”http://martinfowler.com/articles/microservices.html 单体架构(Monol
程序员鹏磊
2018/02/09
1.4K0
什么是微服务架构
微服务架构及其最重要的10个设计模式
微服务架构,独享数据库、事件驱动、CQRS、Saga、BFF、API 网关、Strangler、断路器、外部化配置、消费端驱动的契约测试
深度学习与Python
2021/01/06
1.3K0
相关推荐
如何从传统单体架构转向微服务
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档