微服务概述
什么是微服务?
答:微服务(microservice)是基于业务领域建模的,可独立发布的服务。它会把业务内聚的功能封装起来,并通过网络供其他服务访问。将这样的服务组合起来构建出更复杂的系统。
微服务特点
微服务与单体
单体
“系统中的所有功能必须一起部署时,我们可以视它为一个单体。
单体又细分为,单进程单体,模块化单体(依然是单进程),分布式单体
单体的优势
开发流程简单,系统监控,故障排除和测试工作大大简化
微服务的优势
微服务的痛点
- 开发者体验,本地开发需要启动微服务多。
- 技术过载,引入大量新技术。
- 成本,
- 生成报表的成本变高
- 监控和故障排除较复杂,需要引入分布式可观测
- 安全,数据传输跨多服务,对安全性提出了更高的要求。
- 测试成本变大
- 延迟,数据在微服务之间进行序列化传输反序列化,容易造成系统延迟问题
- 数据一致性挑战
微服务建模
合理划分微服务边界
我们希望微服务能够独立更改和独立部署,并将功能发布给用户。能够独立更改一个微服务而不影响其他微服务的能力至关重要。微服务建模过程中合理的划分微服务边界尤为重要。
要掌握以下三点,对确立微服务边界至关重要。
- 信息隐藏
- 内聚
- 耦合
信息隐藏
将尽可能多的实现细节隐藏在微服务边界内部。
优势:
- 提升开发效率,“允许模块独立开发,我们可以并行完成更多的工作,并减少添加项目人员带来的影响。
- 可理解性,每个模块可以被独立的定位和理解,可以更清楚的认知模块的定位。
- 灵活性,每个模块可以被独立的修改,在不对其他模块修改的情况下,依然可以对系统功能进行更改。此外,模块还可以按不同的组合方式以提供新功能。
内聚
一起变化的代码应该组织在一起。将变更限制在尽可能小的范围内,当业务需要变更时就更加容易了。
将相关行为放在一起,将无关行为放在别处。如果一个功能的修改需要在很多地方更改,功能上线时就要发布很多不同的服务,一次部署很多服务是有风险的,这要尽量避免。对于微服务架构,我们的目标是要实现高内聚。
耦合
和内聚常常伴随出现的词汇就是耦合了,耦合高,就是一个服务的更改依赖于对另一个服务的更改。耦合低,服务的更改不会影响到其他服务。这也是内聚的目标,耦合和内聚的概念是一脉相承的。
目标:高内聚低耦合
通过采用合适的技术实现方案可以降低耦合
在实际开发中服务之间的耦合是不可避免的,但是我们要尽可能降低耦合,比如两个服务有依赖关系,根据对功能需求的评估,这个功能可以异步调用不需要同步返回结果,那么两个服务的调用可以尽量使用消息队列,而不是直接依赖。
耦合的类型
耦合程度从低到高排序如下:
- 领域耦合
- 传递耦合
- 公共耦合
- 内容耦合