我对微服务架构的一些看法和理解

本文对比了微服务架构与传统单体架构在项目开发、部署及维护方面的优劣。微服务架构虽能提高模块化开发效率和系统扩展性,但也增加了设计和技术要求;而传统架构则更适用于功能简单的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近去面试几家公司,都被问到微服务的问题,可见微服务在企业应用中是多么流行。无论是大企业还是小企业的面试官,好像都把微服务作为衡量Java培训讲师水平的标准。虽然之前对微服务架构也有一定的了解,但是面试的时候总是不能够把微服务架构很好的回答出来。基于这个原因,所以才想把微服务架构总结一下。

一、传统架构

传统项目架构使用单体架构,就是一个项目集成了所有的功能模块。例如:一个商城的后台管理系统,可能包含用户管理、商品管理、订单管理等模块。如下图所示:
在这里插入图片描述
发布项目的时候,需要先把项目整体进行打包,然后再把打包后的文件发布到服务器上面。这样的缺点非常明显,比如说:
(1)项目的复杂度高
一个大型项目里面可能包含许多功能模块,而且模块之间肯定会存在一定的依赖关系,项目的复杂度非常高。如果其中某个模块出现问题,就有可能导致整个项目运行失败。

(2)部署时间长,影响范围大
由于大型项目的复杂度高,项目的构件和部署的时间也会随之增加。而且,如果某一个功能模块出现问题,那么解决问题后需要重新把整个项目重新发布。在发布过程中项目的所有功能都无法使用。

(3)功能扩展能力有限
单体架构的项目无法结合业务模块特点进行功能扩展,只能作为一个整体进行扩展,程序的伸缩性较差。

二、微服务架构

与传统架构方式不同,微服务架构把一个大型项目按照不同的功能拆分为不同的子模块。发布项目的时候,可以对各个子模块进行单独发布。每一个子模块都是运行在自己的进程中。模块之间通过一些通信机制进行数据通信。例如上面的商城后台系统,如果按照微服务架构来设计,每一个业务功能模块都可以作为一个子项目单独发布。如下图所示:
在这里插入图片描述
从上图可以看出,用户管理系统、商品管理系统、订单系统之间都是互相独立的,每一个系统都是运行在自己的进程中。它们可以通过一些轻量级的通信机制(如REST API)进行数据通信。

微服务架构相对于传统架构的优势:
(1)便于模块化开发
在一个大型项目里面,不同人员可能负责不同的模块。例如:张三负责用户管理模块,李四负责商品管理模块,王五负责订单管理模块。使用微服务架构把不同模块放在不同的子项目中,可以减少由于代码质量问题对整个项目的影响。

(2)部署应用的效率更高,模块之间的影响较少
不同模块可以单独部署。例如把用户管理模块部署的服务器1,把商品管理模块部署的服务器2。由于单个模块的代码量较少,部署的时候服务启动速度会更快。而且即使某个模块发生改变,只需要重新发布该模块即可,不会影响其他模块的功能使用。

(3)不受所使用技术的限制
开发人员可以根据项目业务需要和团队成员能力的特点,对不同模块选择不同的技术来实现。

上面介绍了微服务架构优点。但是在实际使用中也存在一些缺陷。例如:
(1)使用成本高
微服务架构底层是基于分布式技术来实现,需要有更多服务器的硬件支持,从而导致硬件成本增加。

(2)对项目设计和开发人员的技术要求更高
对于一个分布式系统来说,系统容器、网络延迟、高并发、事务控制都对软件设计和开发人员带来新的挑战。

(3)不同子模块中可能会存在相同功能
有些功能由于没有达到分解为一个微服务的程度(比如一个日期的工具类),这时候需要在各个子模块中都需要定义相同功能,导致有些功能重复。

所以,对于项目经理或架构师来说,采用怎么样的架构应该根据项目实际业务需求来决定。对于传统的单体式架构而言,可能更适合于一些功能简单、单一的应用(比如论坛系统)。如果要开发一些功能复杂的应用(比如:商城、ERP等等),由于这些应用里面有非常多的模块,如果把所有模块都放在一个项目里面,项目的维护性和扩展性会比较差。因此,这时候就可以考虑使用微服务架构对其进行设计。

三、总结

下面列出上面两种架构的不同之处:

传统架构微服务架构
对设计人员要求相对较低比较高
项目部署整个项目打包发布每个模块打包后单独部署
故障影响范围影响范围较大影响范围较小
系统响应速度响应速度快,吞吐量小响应速度慢,吞吐量大
学习难度难度较小难度大
技术多样性技术单一方便整合不同技术
系统扩展性较差很好
开发成本成本少成本大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值