从单体架构到微服务架构的演进

本文探讨了从单体架构到微服务架构的发展,通过比较SOA(面向服务架构)和微服务,强调了后者在解耦、DevOps和容器化的应用。讨论了两者关注点的不同以及微服务的粒度选择策略。

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

1.1.1 单体架构

开发⼀个⼀个Web项⽬,可以使⽤Spring、SpringMVC、Mybatis等技 术。⽐如之前的快递驿站项⽬,旅游⽹项⽬SSM版,账单管理项⽬等,项⽬结构如下图第一张所示。

整个系统的架构⾮常简单,使⽤Spring+SpringMVC+Mybatis构建⼀个基础⼯程、MySQL数据库 作为持久化存储,在这个⼯程中创建不同的Service实现项⽬中不同的业务场景,如线路、线路分类、⽤ 户等。最后把项⽬构建成⼀个war包部署在Tomcat容器上即可使⽤,这时我们之前经常采⽤的架构。 通常来说,如果⼀个war包或者jar包⾥⾯包含⼀个应⽤的所有功能,则我们称这种架构为单体架 构。 很多传统互联⽹公司或者创业型公司早期基本都会采⽤这样的架构,因为这样的架构⾜够简单,能 够快速开发和上线。⽽且对于项⽬初期⽤户量不⼤的情况,这样的架构⾜以⽀撑业务的正常运⾏。

1.1.2 集群和垂直化

 

1.1.3 SOA

核⼼⽬标是把⼀些通⽤的、会被多个上层服务调⽤的共享业务提取成独⽴的基础服务。这些被提取出来的共 享服务相对来说⽐较独⽴,并且可以重⽤。所以在SOA中,服务是最核⼼的抽象⼿段,业务被划分为⼀ 些粗粒度的业务服务和业务流程。

SOA主要解决的问题是: 信息孤岛和共享业务的重⽤。

 1.1.4 微服务架构

业务系统实施服务化改造之后,原本共享的业务被拆分形成可复⽤的服务,可以在最⼤程度上避免 共享业务的重复建设、资源连接瓶颈瓶颈等问题。那么被拆分出来的服务是否也需要以业务功能为维度 来进⾏拆分和独⽴部署,以降低业务的耦合及提升容错性呢?

微服务就是这样⼀种解决⽅案,从名字上来看,⾯向服务(SOA)和微服务本质上都是服务化思想 的⼀种体现。如果SOA是⾯向服务开发的思想的雏形,那么微服务就是针对可重⽤业务服务的更进⼀步 优化,我们可以把SOA看成微服务的超集,⼀但服务规模扩⼤就意味着服务的构建、发布、运维的复杂 度也会成倍增加,所以实施微服务的前提是软件交付链路及基础设施的成熟化。因此微服务在我看来并 不是⼀个新的概念,他本质上是服务化思想的最佳实践⽅向。由于SOA和微服务两者的关注点不⼀样, 造成了这两者有⾮常⼤的区别:

SOA关注的是服务的重⽤性及解决信息孤岛问题。

微服务关注的是解耦,虽然解耦和可重⽤性从特定的⻆度来看是⼀样的,但本质上是有区别的,解 耦是降低业务之间的耦合度,⽽重⽤性关注的是服务的复⽤。

微服务会更多地关注在DevOps的持续交付上,因为服务粒度细化之后使得开发运维变得更加重要, 因此微服务与容器化技术的结合更加紧密。

如图所示,将每个具体的业务服务构成可独⽴运⾏的微服务,每个微服务只关注某个特定的功能, 服务之间采⽤轻量级通信机制REST API进⾏通信。细⼼的读者会发现SOA中的服务和微服务架构中的 服务粒度是⼀样的,不是说SOA是微服务的超集吗?其实我们可以把⽤户服务拆分的更细,⽐如⽤户注 册服务、⽤户鉴权服务等。实际上,微服务到底要拆分到多⼤的粒度没有统⼀的标准,更多的时候是需 要在粒度和团队之间找平衡的,微服务的粒度越⼩,服务独⽴性带来的好处就越多,但是管理⼤量的微 服务也会越复杂。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值