《SpringBoot揭秘:快速构建微服务体系》—第1章1.3节微服务会带来哪些好处

1.3 微服务会带来哪些好处
显然,随着系统复杂度的提升,以及对系统扩展性的要求越来越高,微服务化是一个很好的方向,但除此之外,微服务还会给我们带来哪些好处?
1.3.1 独立,独立,还是独立
我们说微服务打响的是各自的独立战争,所以,每一个微服务都是一个小王国,这些微服务跳出了“大一统”(Monolith)王国的统治,开始从各个层面打造自己的独立能力,从而保障自己的小王国可以持续稳固的运转。
首先,在开发层面,每个微服务基本上都是各自独立的项目(project),而对应各自独立项目的研发团队基本上也是独立对应,这样的结构保证了微服务的并行研发,并且各自快速迭代,不会因为所有研发都投入一个近乎单点的项目,从而造成开发阶段的瓶颈。开发阶段的独立,保证了微服务的研发可以高效进行。
服务开发期间的形态,跟服务交付期间的形态原则上是不需要完全高度统一的,即使我们在开发的时候都是各自进行,但交付的时候还是可以一起交付,不过这不是微服务的做法。在微服务治理体系下,各个微服务交付期间也是各自独立交付的,从而使得每个微服务从开发到交付整条链路上都是独立进行,这大大加快了微服务的迭代和交付效率。
服务交付之后需要部署运行,对微服务来说,它们运行期间也是各自独立的。
微服务独立运行可以带来两个比较明显的好处,第一个就是可扩展性。我们可以快速地添加服务集群的实例,提升整个微服务集群的服务能力,而在传统Monolith模式下,为了能够提升服务能力,很多时候必须强化和扩展单一结点的服务能力来达成。如果单结点服务能力已经扩展到了极限,再寻求扩展的话,就得从软件到硬件整体进行重构。
软件行业有句话:“Threads don't scale, Processes do!”,很明确地道出了原来Monolith服务与微服务在扩展(Scale)层面的差异。
对于Java开发者来说,早些年(当然现在也依然存在),我们遵循Java EE规范开发的Web应用,都需要以WAR包的形式部署到TOMCAT、Jetty、RESIN等Web容器中运行,即使每个WAR包提供的都是独立的微服务,但因为它们都是统一部署运行在一个Web容器中,所以扩展能力受限于Web容器作为一个进程(process)的现状。无论如何调整Web容器内部实现的线程(thread)设置,还是会受限于Web容器整体的扩展能力。所以,现在很多情况下,大家都是一个TOMCAT只部署一个WAR,然后通过复制和扩展多个TOMCAT实例来扩展整个应用服务集群。
当然,说到在TOMCAT实例中只部署一个WAR包这样的做法,实际上不单单只是因为扩展的因素,还涉及微服务运行期间给我们带来的第二个好处,即隔离性。
隔离性实际上是可扩展性的基础,当我们将每个微服务都隔离为独立的运行单元之后,任何一个或者多个微服务的失败都将只影响自己或者少量其他微服务,而不会大面积地波及整个服务运行体系。在架构设计上有一种实践模式,即隔板模式(Bulkhead Pattern),这种架构设计模式的首要目的就是为了隔离系统中的各个功能单元和实体,使得系统不会因为一个单元或者服务的失败而导致整体失败。这种思路在造船行业、兵工行业都有类似的应用场景。现在任何大型船舶在设计上都会有隔舱,目的就是即使有少量进水,也可以只将进水部位隔离在小范围,不会扩散而导致船舶大面积进水,从而沉没。当年泰坦尼克号虽然沉了,但不意味着他们没有做隔舱设计,只能说,伤害度已经远远超出隔舱可以提供的基础保障范围。在坦克的设计上,现在一般也会将弹药舱和乘员舱隔离,从而可以保障当坦克受创之后,将伤害尽量限定在指定区域,尽量减少对车乘成员的伤害。
前面我们提到,现在大家基本上弱化了Java EE的Web容器早期采用的“一个Web容器部署多个WAR包”的做法,转而使用“一个Web容器只部署一个WAR包”的做法,这实际上正是综合考虑了Web容器的设计和实现现状与真实需求之后做出的合理实践选择。这些Web容器内部大多通过类加载器(Classloader)以及线程来实现一定程度上的依赖和功能隔离,但这些机制从基因上决定了这些做法不是最好的隔离手段。而进程(Process)拥有天然的隔离特性,所以,一个WAR包只部署运行在一个Web容器进程中才是最好的隔离方式。
现在回想一下,好像自从各个微服务打响独立战争并且独立之后,无论从哪个层面来看,各自“活”得都挺好。
1.3.2 多语言生态
微服务独立之后,给了对应的团队和组织快速迭代和交付的能力,同时,也给团队和组织带来了更多的灵活性,实际上,对应交付不同微服务的团队或者组织来说,现在可以基于不同的计算机语言生态构建这些微服务,如图1-2所示。
微服务的提供者既可以使用Java或者Go等静态语言完成微服务的开发和交付,也可以使用Python或者Ruby等动态语言完成微服务的开发和交付,对于团队内部拥有繁荣且有差异的语言文化来说,多语言生态下的微服务开发和交付将可以最大化的发挥团队和组织内部各成员的优势。当然,对于多语言生态下的微服务研发来说,有一点需要注意:为了让服务的访问者可以用统一的接口访问所有这些用不同语言开发和交互的微服务,应该尽量统一微服务的服务接口和协议。
在微服务的生态下,互通性应该是需要重点关注的因素,没有互通,不但服务的访问者和用户无法很好地使用这些微服务,微服务和微服务之间也无法相互信赖和互助,这将大大损耗微服务研发体系带来的诸多好处,而多语言生态也会变成一种障碍和负累,而不是益处。
记得时任黑猫宅急便社长的小仓昌男在其所著的《黑猫宅急便的经营学》中提到一个故事,日本国铁曾经采用不同于国际标准的集装箱和铁路规格,然后发现货物的运输效率很低,经过考察发现,原来是货物从国际标准集装箱卸载之后,在通过日本国铁运输之前,需要先拆箱,重新装入日本国铁规格的集装箱,然后装载到日本国铁上进行运输。但是,如果日本国铁采用国际标准的集装箱规格,那么货物集装箱从远洋轮船上卸载之后就可以直接装上国铁,这将大大加快运输效率(日本,国铁改革后也证明确实如此)。日本国铁在前期采用私有方案时,只关注了自己的利益和效率,舍弃了互通,也带来了效率的低下。所以,在开发和交付微服务的时候,尤其是在多语言生态下开发和交付微服务,我们从一开始就要将互通性作为首要考虑因素,从而不会因为执迷于某些服务或者系统的单点效率而失去了整个微服务体系的整体效率。

时间: 2024-08-31 19:45:18

《SpringBoot揭秘:快速构建微服务体系》—第1章1.3节微服务会带来哪些好处的相关文章

《SpringBoot揭秘:快速构建微服务体系》—第1章1.4节微服务会带来哪些挑战

1.4 微服务会带来哪些挑战微服务给我们带来的并非只有好处,还有相应的一些挑战.服务"微"化之后,一个显著的特点就是服务的数量增多了.如果将软件开发和交付也作为一种生产模式看待,那么数量众多的微服务实际上就类似于传统生产线上的产品,而在传统生产模型下,为了能够高效地生产大量产品,通常采用的就是标准化生产.比如在汽车产业,在福特T型车没有出来之前,大多汽车企业的生产效率都不高,而福特在引入标准化生产线之后,福特T型车得以大量生产并以低成本优势快速普及.在其他行业也是同样的道理,个性化生产

《Nmap渗透测试指南》—第7章7.15节SSH服务密钥信息探测

7.15 SSH服务密钥信息探测表7.15所示为本章节所需Nmap命令表,表中加粗命令为本小节所需命令--SSH服务密钥信息探测. https://yqfile.alicdn.com/c2f07fbe12bd2ee0dae2ad1ee889f371508699ca.png" > SSH是英文Secure Shell的简写形式.通过使用SSH,可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗.使用SSH,还有一个额

《SpringBoot揭秘:快速构建微服务体系》目录—导读

前 言为什么写这本书忘了是2015年的哪一天,只记得几个朋友跟友商的其他几个做技术的朋友吃饭,并简单做下技术交流.席间,友商的几位朋友对SpringBoot框架实施微服务很感兴趣,交谈甚欢之际,我无意间开玩笑说:"是不是该考虑写一本SpringBoot的书?"钟伦甫(原淘宝聚石)同学随口一句,"你倒是写啊!",得,以行践言吧,谁让你把话说出去了呢?当然,朋友的"热切期盼"只是其一,微服务盛行也是本书写作的一个契机, 希望本书成为国内第一本微服务相

《SpringBoot揭秘:快速构建微服务体系》—第1章1.1节了解微服务

第1章 了解微服务SpringBoot是一个可使用Java构建微服务的微框架,所以在了解SpringBoot之前,我们需要先了解什么是微服务.1.1 什么是微服务微服务(Microservice)虽然是当下刚兴起的比较流行的新名词,但本质上来说,微服务并非什么新的概念.实际上,很多SOA实施成熟度比较好的企业,已经在使用和实施微服务了.只不过,它们只是在闷声发大财,并不介意是否有一个比较时髦的名词来明确表述SOA的这个发展演化趋势罢了.微服务其实就是服务化思路的一种最佳实践方向,遵循SOA的思路

《SpringBoot揭秘:快速构建微服务体系》—第1章1.5节本章小结

1.5 本章小结在带领大家探索本书的主角SpringBoot微框架之前,本章首先为大家介绍了SpringBoot微框架服务的核心场景,即微服务.然后一起探索了微服务的概念以及由来,并探讨了微服务可以为我们带来哪些好处,以及同时又为我们带来哪些挑战.总的来说,微服务化虽然是当下流行的趋势,但并非任何场景都合适,我们还是要审慎地在"大一统"(Monolith)服务架构和微服务架构之间做出选择, 而一旦确定选择了微服务化之路,那么,就应该围绕团队和组织的主要语言生态以及微服务方向积极探索高效

“努力构建安全诚信网络购物环境座谈会”北京召开,拉手网金字塔服务体系构建桥梁

当人类创造互联网的时候,并未想到其未来的生产生活可以因此而深度改变,无论是社交网络.电子商务.网络视频.网络游戏还是正在爆发式增长的移动互联网行业,人类因为这些行业的崛起进入到一个虚拟消费的时代.而电子商务则是互联网世界里,与网民直接利益挂钩的产业,其安全性和可靠性也必须随时经受严格的考验. 近日,由中国消费者报社主办.拉手网协办的"努力构建安全诚信网络购物环境座谈会"在京召开.会上,拉手网宣布在全国十大重点城市开通了"12315绿色通道",在当地工商部门的监督和指

如何快速构建一项新的云服务?

Azure的管理门户为客户提供了构建和部署云服务的两种方法:"快速构建"(Quick Create)与"自定义构建"(Custom Create). 本文介绍了如何使用快速构建方法构建一项新的云服务,然后使用上传(Update)功能,在Azure中上传和部署云服务包.如果你使用这种方法,Azure管理门户提供了方便的链接,以满足你的所有要求.如果你在构建云服务时准备部署云服务,可以使用"自定义构建",同时执行这两项操作. 注意:如果你打算从Win

强基层惠民生构建县域医疗服务体系建设

本文讲的是强基层惠民生构建县域医疗服务体系建设,近日,2011年山东省县级公立医院改革及数字化医院建设主题研讨会在山东邹城市成功召开.山东省卫生经济协会会长王天胜.卫生部医管司主任王敬瑶.省卫生厅医改处处长万书臻,邹城市市政府副市长宋景春.济宁市卫生局副局长张作辉出席会议并致辞.山东省县.区级医院院长.副院长以及部分科室负责人共120余人参加会议.与会领导和专家以更高.更广的视角解析山东省县级医院目前的现状,共享医院管理和系统建设的经验,研讨公立医院的发展之道.会议由会议由山东省经济协会秘书长邱

Gartner:超两成企业将用物联网构建数字化安全服务体系

众位分析师于2014年9月15到16日将齐聚阿联酋迪拜,在Gartner安全与风险管理峰会上探讨网络安全与物联网议题. 根据Gartner公司给出的预测性结论,截至2017年底将有超过两成企业利用物联网设备及服务构建数字化安全服务体系.从而实现业务项目保护.目前利用物联网设备实现特定诉求的商业案例已经切实存在,而物联网在业务及行业中逐步提升的重要地位也将迫使更多企业接纳并为之设计安全保护机制. "物联网设备在改变环境状态及自身属性方面表现出的强大能力将促使首席信息安全官(简称CISO)们重新定义