浅谈微服务
众所周知,传统 JavaWeb
开发都是以单体架构为主要架构模式,然而近几年,分布式,微服务等名词愈渐流行,微服务架构也日渐火热。那么什么是微服务,它又为什么能打败传统架构模式,让众多开发人员对它趋之若鹜呢?
我们先来看一下传统单体应用架构
所谓单体应用,是指应用的各个模块都在一个项目里,比如一个图书管理系统,有用户管理模块,图书管理模块,和前端交互界面模块,以及其他一些模块等。这些模块都在一个项目里,最终被打包到同一个 Jar
包或者 War
包中,然后部署至服务器。虽然也有一些项目是前后端分离,前后端在不同的项目里,各自运行,但其本质还是单体应用。
单体应用的优缺点
优点:
- 便于开发,所有代码都在一个项目里
- 便于部署,因为只有一个应用,部署一次即可
缺点:
- 不够健壮,一个小功能出现问题就有可能导致整个系统崩溃
- 代码量过大时,可能会模块模糊不清,代码结构复杂
- 系统耦合性高,一个小功能修改就要重新部署整个系统
总之,单体架构能够统领 JavaWeb
开发这么久,也是有其优势所在,但其缺点也是显而易见的,所以终究被淘汰。
再来看看微服务架构
什么是微服务架构?
所谓微服务架构,就是将一个单体应用,按照业务拆分成一组小型服务,每个服务运行在独立的进程,服务之间通过轻量通信机制(比如 http)进行互相调用。拆分之后,每个服务不受限于语言和平台,扩展性强。
微服务架构的优缺点
优点:
- 开发时,每个服务可以独立开发,互不影响
- 轻量化,由于拆分的缘故,每个服务的代码量不至于太多
- 健壮性强,其中一个服务发生故障时,其他服务也能正常运作
- 可扩展性高,可以轻松搭建集群
缺点:
- 由于需要 RPC 调用,受限于服务之间的网络状况
- 部署时每个服务需要单独部署,需部署多个
- 服务之间互相调用复杂的话,出现问题时不便于查找
- 存在分布式事务问题
微服务架构解决了传统软件开发中的一些痛点问题,比如修改某一功能时,只需重新部署所修改的服务,拆分之后,每个服务专注于各自的模块,代码结构清晰,并且不同的服务可以使用不同的语言进行开发,部署在不同的环境。
个人认为,微服务的关键就在于拆分粒度的把握,合理的按照业务进行拆解,解决系统过于臃肿的问题,并保证不至于拆分过细。所谓微服务,不过是一种架构模式,或者说是一种思想,它并不是一种技术, SpringCloud
也不过是便于实现微服务架构一个框架而已。
2023 年 12 月 10 日补充
编写此文章时,对微服务认知尚浅,文中若有错误之处,还请不吝指正。