Why “微服务架构”

Posted 罗说数字化

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Why “微服务架构”相关的知识,希望对你有一定的参考价值。

微服务架构有哪些优势劣势?

要谈优势,就一定要有对比,我们可以尝试着从两个维度来对比。

一、微服务架构与单体架构的对比

序号

对比点

微服务架构

单体架构

结论

1

上手难度

API 接口调用

数据库共享或本地程序调用

单体架构胜

2.1

开发效率(简单项目)

早期设计和沟通的工作量加大,随着项目规模和时间的推移,效率变化不大

早期工作量小,随着项目规模和时间的推移,效率大幅度下降

单体架构胜

2.2

开发效率(复杂项目)

早期设计和沟通的工作量加大,随着项目规模和时间的推移,效率变化不大

早期工作量小,随着项目规模和时间的推移,效率大幅度下降

微服务架构胜

3

系统设计(高内聚低耦合)

每个业务单独包装成一个微服务,数据和代码都从物理上隔离开来,实现高内聚低耦合相对容易

以包的形式对代码进行模块划分,控制得当即可实现高内聚。但最终都是在数据层面将整个系统耦合在一起

微服务架构胜

4

系统设计(扩展性)

独立开发新模块,通过 API 与现有模块交互

在现有系统上修改,与现存业务逻辑高度耦合

微服务架构胜

5

需求变更响应速度

各个微服务组件独立变更,容易实施敏捷开发方法

需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败

微服务架构胜

6

系统升级效率

各个微服务组件独立升级,上手和开发效率高,影响面小

需要了解整个系统才可以正确修改,容易导致不相关模块的意外失败

微服务架构胜

7

运维效率

大系统被拆分为多个小系统,部署和运维难度加大,但可以利用 DevOps 等方式将运维工作自动化

简单直接

单体架构胜

8

知识积累

微服务组件可以在新项目中直接复用,包括前端页面

一般以共享库的形式复用后台代码

微服务架构胜

9.1

硬件需求(简单项目)

一个系统需部署多个微服务,需要启动多个运行容器

整个系统只需要一个运行容器

单体架构胜

9.2

硬件需求(高要求项目)

按需为不同业务模块伸缩资源节点

为整个系统分配资源,导致冗余

微服务架构胜

10.1

项目成本(简单系统)

项目早期和后期,成本变化曲线平缓

项目早期成本低,后期成本大

单体架构胜

10.2

项目成本(复杂系统)

项目早期和后期,成本变化曲线平缓

项目早期成本低,后期成本大

微服务架构胜

11

非功能需求

为单独的微服务按需调优,甚至更换实现方式和程序语言

为整个系统调优,牵一发而动全身

微服务架构胜

12

职责、成就感

拥有明确的职责划分,主人翁意识和成就感加强,容易形成自组织型团队

职责不明确,容易产生扯皮行为

微服务架构胜

13

风险

大系统被拆分为小系统,风险可被控制在小系统内,但也引入了各小系统之间的交互风险

系统是一个整体,一荣俱荣,一损俱损

微服务架构胜


结论:

对于简单项目来说,单体架构 5 胜 8 败。(优势项:开发效率、上手难度、运维效率、硬件需求、项目成本;劣势项:系统设计(高内聚低耦合)、系统设计(扩展性)、需求变更响应速度、系统升级效率、知识积累、非功能需求、职责、成就感、风险)

对于复杂项目来说,单体架构 2 胜 11 败。(优势项:上手难度、运维效率;劣势项:硬件需求、项目成本、开发效率、系统设计(高内聚低耦合)、系统设计(扩展性)、需求变更响应速度、系统升级效率、知识积累、非功能需求、职责、成就感、风险;)

二、微服务与共享库的对比

:这里以使用方自行安装微服务为场景来比较。这里的共享库指的是像 Java 中的公共 jar 依赖。

序号

对比点

微服务

共享库

结论

1

易用性

整体安装 + API 调用

共享库引用 + 本地调用

平手

2

程序耦合度

微服务为完整的业务逻辑单元,通过 API 的形式为其它模块提供服务

在使用方的源代码中引用共享库的类和方法

平手

3

版本升级

单独升级,其它模块无感知

修改源代码,升级使用方的代码版本,例如 pom.xml, build.gradle

微服务架构胜

4

Bug 修复

单独升级,自动生效  修改源代码,升级使用方的代码版本,例如 pom.xml, build.gradle

微服务架构胜


5

非功能需求

为单独的微服务优化或扩缩容;在需求更高的情况下,可以重新设计或使用不同的程序语言

为整个业务系统优化或扩缩容,共享库的程序语言必须和业务系统的程序语言相同

微服务架构胜

6

复用程度

可以复用从前端页面到后台数据库的整个业务逻辑和代码

可以复用后台代码和数据库,但程序语言需要和业务系统保持一致

微服务架构胜

总体来说,微服务架构有如下优和劣:


什么场景需要用微服务架构?

看了上面的比较,微服务架构可以说是以压倒性的优势胜过单体架构和共享库,会让人产生一种错觉,微服务架构就是软件开发中的银弹。

但是,正如大家所了解的,软件研发是一个系统工程,它没有银弹,不能够一招鲜吃遍天。正如当年的 CMMI 和敏捷方法一样,敏捷虽好,但它不一定能适用于所有的场景,它对组织环境、团队氛围、沟通方式、技术能力这些都是有一些要求的,如果用不好,反而会带来一些负面影响。

那么,我们什么时候需要采用微服务呢?从我个人的经验来看,我认为有三种场景可以考虑使用微服务。

  1. 规模大(团队超过 10 人)

  2. 业务复杂度高(系统超过 5 个子模块)

  3. 需要长期演进(项目开发和维护周期超过半年)


企业什么时候引入微服务架构?

横轴是复杂度,纵轴是生产效率。从生产效率的角度来讲,在两条曲线的交叉点之前,单体架构是占优势的,过了交叉点之后,单体架构的生产效率将大幅度下降。


企业根据自身业务发展情况选择合适的切入时间,将有利于后续的发展。

以上是关于Why “微服务架构”的主要内容,如果未能解决你的问题,请参考以下文章

「微服务架构」Medium的微服务架构实践

微服务架构是啥?

微服务入门|微服务架构怎么设计

微服务架构是啥

华为架构师揭秘微服务架构(单体架构与微服务架构对比)

谈谈微服务架构是一个怎样的存在?