(1)微服务是什么?它的优缺点有哪些?

 “微服务”一词来源于 Martin Fowler 的《Microservices》一文。微服务是一种架构风格,即将单体应用划分为小型的服务单元,微服务之间使用 HTTP 的 API 进行资源访问与操作。

在笔者看来,微服务架构的演变更像是一个公司的发展过程,从最开始的小公司,到后来的大集团。大集团可拆分出多个子公司,每个子公司的都有自己独立的业务、员工,各自发展,互不影响,合起来则是威力无穷。

臃肿的系统、重复的代码、超长的启动时间带给开发人员的只有无限的埋怨,丝毫没有那种很舒服的、很流畅的写代码的感觉。他们把大部分时间都花在解决问题和项目启动上面了。

微服务架构的优势
使用微服务架构能够为我们带来如下好处:

1)服务的独立部署
每个服务都是一个独立的项目,可以独立部署,不依赖于其他服务,耦合性低。

2)服务的快速启动
拆分之后服务启动的速度必然要比拆分之前快很多,因为依赖的库少了,代码量也少了。

3)更加适合敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。

4)职责专一,由专门的团队负责专门的服务
业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。

5)服务可以动态按需扩容
当某个服务的访问量较大时,我们只需要将这个服务扩容即可。

6)代码的复用
每个服务都提供 REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。

微服务架构的劣势
微服务其实是一把双刃剑,既然有利必然也会有弊。下面我们来谈谈微服务有哪些弊端,以及能采取什么办法避免。

1)分布式部署,调用的复杂性高
单体应用的时候,所有模块之前的调用都是在本地进行的,在微服务中,每个模块都是独立部署的,通过 HTTP 来进行通信,这当中会产生很多问题,比如网络问题、容错问题、调用关系等。

2)独立的数据库,分布式事务的挑战
每个微服务都有自己的数据库,这就是所谓的去中心化的数据管理。这种模式的优点在于不同的服务,可以选择适合自身业务的数据,比如订单服务可以用 MySQL、评论服务可以用 Mongodb、商品搜索服务可以用 Elasticsearch。

缺点就是事务的问题了,目前最理想的解决方案就是柔性事务中的最终一致性,后面的章节会给大家做具体介绍。

3)测试的难度提升
服务和服务之间通过接口来交互,当接口有改变的时候,对所有的调用方都是有影响的,这时自动化测试就显得非常重要了,如果要靠人工一个个接口去测试,那工作量就太大了。这里要强调一点,就是 API 文档的管理尤为重要。

4)运维难度的提升
在采用传统的单体应用时,我们可能只需要关注一个 Tomcat 的集群、一个 MySQL 的集群就可以了,但这在微服务架构下是行不通的。当业务增加时,服务也将越来越多,服务的部署、监控将变得非常复杂,这个时候对于运维的要求就高了。
 

### 微服务架构与单体架构的优缺点对比分析 #### 单体架构的优点 单体架构因其结构简单,适合小型项目或初期快速验证。开发人员可以在一个代码库中开发和管理整个应用程序,不需要关注分布式系统的复杂性,因此开发和维护成本较低。此外,由于整个应用程序作为一个整体部署,部署和运维也相对简单,只需将整个应用程序部署到服务器上,并进行统一的管理和监控[^3]。 #### 单体架构的缺点 单体架构的主要缺点在于其难以扩展和维护。各个模块的耦合度太高,例如用户模块需要更新时,其他模块也可能需要随之更新。当存在性能瓶颈时,需要对整个服务进行扩容,而不是只复制特定的服务,导致资源浪费。此外,一个项目实现所有业务逻辑,复杂性和代码量都过于庞大,很难使开发者完全理解它的全部,从而增加了维护和扩展的难度[^3]。 #### 微服务架构的优点 微服务架构通过将大型应用程序拆分为多个小型服务,使得每个服务可以独立开发、部署、运行和升级。这种架构提升了系统的可维护性和可扩展性,适用于大规模、分布式系统。微服务之间的松耦合设计使得系统具有更高的灵活性,同时支持团队并行开发[^2]。此外,由于服务拆分和自治性,当一个服务需要进行修改或升级时,只需要关注该服务的代码和依赖,不会对整个系统造成影响,从而降低维护的风险和成本。微服务架构还支持针对特定服务进行性能优化,提高整体系统的响应能力。 #### 微服务架构的缺点 微服务架构的复杂性较高,需要对多个服务进行管理和监控,包括服务的部署、监控、日志收集和故障排查等,因此需要有一套完善的运维管理工具和流程来支持。此外,微服务之间的通信依赖网络,增加了网络延迟和潜在的故障点,同时也会带来更高的运维成本。微服务架构的成功实施需要成熟的技术团队支撑,对于资源有限的小型团队或初创项目来说,可能难以胜任[^1]。 #### 技术选型建议 在进行架构设计决策时,应根据业务规模、团队能力和长期目标综合权衡。如果项目规模较小、需求较为简单且资源有限,单体架构是较为合适的选择;而如果项目规模较大、需求复杂且需要高并发和灵活扩展,微服务架构则更具优势。在某些情况下,可以通过渐进式拆分(如“绞杀者模式”)从单体架构过渡到微服务架构,以降低迁移成本并逐步提升系统的可维护性[^1]。 ```java // 示例:微服务架构中的服务间通信(使用 Spring Cloud Feign) @FeignClient(name = "order-service") public interface OrderServiceClient { @GetMapping("/orders/{userId}") List<Order> getOrdersByUserId(@PathVariable("userId") Long userId); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值