发布于 

浅谈微服务

众所周知,传统 JavaWeb 开发都是以单体架构为主要架构模式,然而近几年,分布式,微服务等名词愈渐流行,微服务架构也日渐火热。那么什么是微服务,它又为什么能打败传统架构模式,让众多开发人员对它趋之若鹜呢?

我们先来看一下传统单体应用架构

所谓单体应用,是指应用的各个模块都在一个项目里,比如一个图书管理系统,有用户管理模块,图书管理模块,和前端交互界面模块,以及其他一些模块等。这些模块都在一个项目里,最终被打包到同一个 Jar 包或者 War 包中,然后部署至服务器。虽然也有一些项目是前后端分离,前后端在不同的项目里,各自运行,但其本质还是单体应用。

单体应用的优缺点

优点:

  • 便于开发,所有代码都在一个项目里
  • 便于部署,因为只有一个应用,部署一次即可

缺点:

  • 不够健壮,一个小功能出现问题就有可能导致整个系统崩溃
  • 代码量过大时,可能会模块模糊不清,代码结构复杂
  • 系统耦合性高,一个小功能修改就要重新部署整个系统

总之,单体架构能够统领 JavaWeb 开发这么久,也是有其优势所在,但其缺点也是显而易见的,所以终究被淘汰。

再来看看微服务架构

什么是微服务架构?

所谓微服务架构,就是将一个单体应用,按照业务拆分成一组小型服务,每个服务运行在独立的进程,服务之间通过轻量通信机制(比如 http)进行互相调用。拆分之后,每个服务不受限于语言和平台,扩展性强。

微服务架构的优缺点

优点:

  • 开发时,每个服务可以独立开发,互不影响
  • 轻量化,由于拆分的缘故,每个服务的代码量不至于太多
  • 健壮性强,其中一个服务发生故障时,其他服务也能正常运作
  • 可扩展性高,可以轻松搭建集群

缺点:

  • 由于需要 RPC 调用,受限于服务之间的网络状况
  • 部署时每个服务需要单独部署,需部署多个
  • 服务之间互相调用复杂的话,出现问题时不便于查找
  • 存在分布式事务问题

微服务架构解决了传统软件开发中的一些痛点问题,比如修改某一功能时,只需重新部署所修改的服务,拆分之后,每个服务专注于各自的模块,代码结构清晰,并且不同的服务可以使用不同的语言进行开发,部署在不同的环境。

个人认为,微服务的关键就在于拆分粒度的把握,合理的按照业务进行拆解,解决系统过于臃肿的问题,并保证不至于拆分过细。所谓微服务,不过是一种架构模式,或者说是一种思想,它并不是一种技术, SpringCloud 也不过是便于实现微服务架构一个框架而已。


2023 年 12 月 10 日补充

编写此文章时,对微服务认知尚浅,文中若有错误之处,还请不吝指正。