当前位置:网站首页>干货丨微服务架构是什么?有哪些优点和不足?
干货丨微服务架构是什么?有哪些优点和不足?
2022-06-29 02:11:00 【传智播客】

微服务架构定义
微服务架构是一种架构风格和架构思想,它倡导我们在传统软件应用架构的基础上,将系统业务按照功能拆分为更加细粒度的服务,所拆分的每一个服务都是一个独立的应用。
这些应用对外提供公共的API,可以独立承担对外服务的职责,通过此种思想方式所开发的软件服务实体就是“微服务”,而围绕着微服务思想构建的一系列体系结构(包括开发、测试、部署等),我们可以将它称之为“微服务架构”。
根据微服务架构的定义,将传统单体架构拆分为微服务架构的方式。
传统单体架构拆分为微服务架构:

从上图中可以看出,微服务架构已将传统单体架构中的订单服务、商品服务和用户服务拆分为了独立的服务,其中的每一个服务都是一个独立的应用,可以访问自己的数据库,这些服务对外提供公共的API,并且服务之间可以相互调用。
注意:
微服务和微服务架构是两个不同的概念。微服务强调的是服务的大小,它关注的是某一个点,而微服务架构是一种架构思想,需要从整体上对软件系统进行全面的考虑。
微服务架构的优点
与传统单体应用架构相比,微服务架构有很多优点,具体表现如下:
1.复杂度可控
微服务架构在将应用分解的同时,规避了原本复杂度无止境的积累。每一个微服务专注于单一功能,并通过定义良好的接口清晰地表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性,并提高了开发效率。
2.可独立部署
由于微服务具备独立的运行进程,所以每个微服务都可以独立部署。当某个微服务发生变更时,无需编译、部署整个应用。由微服务组成的应用相当于具备一系列可并行的发布流程,使得发布更加高效,同时降低了对生产环境所造成的风险,最终缩短应用交付周期。
3.技术选型灵活
微服务架构下,技术的选型是多样化的。每个团队都可以根据自身服务的需求和行业发展的现状,自由选择最适合的技术。由于每个微服务相对简单,当需要对技术进行升级时,所面临的风险较低,甚至完全重构一个微服务也是可行并容易的。
4.易于容错
当架构中的某一组件发生故障时,在单一进程的传统架构下,故障很有可能在进程内扩散,导致整个应用不可用。在微服务架构下,故障会被隔离在单个服务中。若设计良好,其他服务可通过重试、平稳退化等机制实现应用层面的容错。
5.易于扩展
单个服务应用也可以实现横向扩展,这种扩展可以通过将整个应用完整的复制到不同的节点中实现。当应用的不同组件在扩展需求上存在差异时,微服务架构便体现出其灵活性,因为每个服务可以根据实际需求独立进行扩展。
6.功能特定
每个微服务有自己的业务逻辑和适配器,并且一个微服务一般只完成某个特定的功能,例如商品服务只管理商品、客户服务只管理客户等。这样开发人员可以完全的专注于某一个特定功能的开发,而不用过多的考虑其他,从而提高开发效率。
除了上述几点好处外,微服务架构还有很多好处,由于篇幅有限,这里就不一一列举了,但从微服务架构的好处可以看出,使用微服务可以很好的解决传统单体架构中的问题。

微服务架构的不足
微服务架构除了有上面所讲的各种优点外,还存在着一些不足,这些不足的具体表现如下:
1.开发人员必须处理创建分布式系统的复杂性
①开发工具(或IDE)是面向构建传统的单体应用程序的,不为开发分布式应用程序提供全面功能上的支持。
②测试更加困难。在微服务架构中,服务数量众多,每个服务都是独立的业务单元,服务主要通过接口进行交互,如何保证依赖的正常,是测试面临的主要挑战。
③开发人员必须实现服务间的通信机制。
④实现用例跨多个服务时,需要面对使用分布式事务管理的困难。
⑤实现跨多个服务的用例,需要团队之间进行仔细的协调。
2.部署的复杂性
在部署和管理时,由许多不同服务类型组成的系统的操作比较复杂,这将要求开发、测试及运维人员有相应的技术水平。
3.增加内存消耗
微服务架构用多个服务实例取代了1个单体应用程序实例,如果每个服务都运行在自己的JVM中,那么有多少个服务实例,就会有多少个实例在运行时的内存开销。
微服务架构与SOA的区别
通过上面的内容,相信大家对微服务架构已经有了一定的了解。细心的同学可能会有这样一个疑问,微服务架构与SOA都是对单体架构的拆分,他们有什么不同呢?下面通过一个表格对两者的区别进行对比。
微服务架构与SOA的区别:




以上就是播妞为大家分享的干货内容
希望对你有所帮助
黑马程序员
累计培养30余万名优质IT人才
8大学科火热报名中
基础班仅需 28 元,扫码免费咨询

咨询线上课程
可以直接添加播妞1对1解答哦


丨热门教程资源免费领丨
回复【领取资源】领《黑马8学科汇总教程》
回复【1026】领《SpringBoot2全套》
回复【瑞吉外卖】领《瑞吉外卖项目教程》
回复【mysql1】领《Mysql入门到精通》
回复【毕业设计】领《Java毕业设计项目》
更多教程加播妞领取:heiniu526
(在下方公众号回复对应关键词,即可领取哦)
↓↓↓

边栏推荐
- Koa 快速入门
- Digital IC design, FPGA design written examination questions, answers and analysis of autumn move (1) 2022 Ziguang zhanrui (Part 1)
- 如何用项目甘特图,做好项目汇报
- 大三下期末考試
- Which is the best billing method for okcc call center
- Cross border information station
- SystemVerilog-结构体(一)
- QT basics tutorial: qstringlist
- Introduction to super dongle scheme
- I'd like to ask you, where can I open an account in Zhongshan? Is it safe to open an account online?
猜你喜欢
![[redis] hash type](/img/8b/2585908318f5fe88b455323d3f392e.png)
[redis] hash type

Tiflash compiler oriented automatic vectorization acceleration

Use code binding DataGridView control to display tables in program interface

Understand flex layout in an article

SAP ui5 beginner tutorial 24 - how to use OData data model

Interviewer: with the for loop, why do you need foreach??

瀑布型项目管理最常用的10个小工具,可以自由搭建使用

Introduction to super dongle scheme

我把整个研发中台拆分过程的一些心得总结

【Redis】Key的层级结构
随机推荐
如何成为一名高级数字 IC 设计工程师(3-5)工具篇:SpyGlass 技术
In simple terms, server intrusion prevention
[redis] key hierarchy
Uniapp notes
Scala 基础 (三):运算符和流程控制
Eliminate the hover effect when the button is disabled
Is it safe to contact the account manager online to open an account for stock speculation?
SQL splits strings into tables
Smart world 2030
Convert flat structure to tree structure
Exclusive analysis | real situation of software test about resume and interview
[redis] data introduction & General Command & string type
Flex application: realize two rows and five columns of data, self-adaptive
Koa 快速入門
Studies of relative costs for development in different languages
Use code binding DataGridView control to display tables in program interface
直播预告|SQL也能玩转工业级机器学习?MLOps meetup V3带你一探究竟!
I'd like to ask you, where can I open an account in Zhongshan? Is it safe to open an account online?
Understand flex layout in an article
Boost the digital economy and face the future office | the launch of the new version of spreadjsv15.0 is about to begin