定义
很小的服务,它属于面向服务的架构的一种
优势
| 有点 | 解读 |
|---|---|
| 复杂应用解耦 | 小服务,化整为零 |
| 独立 | 独立开发 独立测试及部署 独立运行 |
| 技术选型灵活 | 支持异构(使用不同数据) |
| 容错 | 故障被隔离在单个服务中 |
| 送耦合,易扩展 | 可根据需求对立扩展 |
挑战
分布式环境下的数据一致性【更复杂】测试的复杂性【服务间的依赖测试】运维的复杂性
微服务与 SOA 的对比
| 微服务 | SOA |
|---|---|
| 能拆分就拆分 | 是整体,服务能放在一起都放一起 |
| 纵向业务划分 | 水平多层 |
| 单一组织负责 | 按层级划分不同部门负责 |
| 细粒度 | 粗粒度 |
| 简单 | 复杂 |
| 独立子公司 | 大公司的业务单元 |
| 组件小 | 存在较复杂的组件 |
| 业务逻辑存在于每个服务中 | 业务逻辑跨多个领域 |
| 使用轻量级的通讯方式:HTTP | 企业服务总线(ESB)充当了服务之间的通信 |
| 微服务的实现 | SOA 实现 |
|---|---|
| 团队级,自底向上实现 | 企业级,自顶向下实现 |
| 系统拆分多个服务 | 服务有多个子系统组成 |
| 无集中总线,松散 | 企业服务总线,集中 |
| 集成方式简单 http/Rest | 集成方式复杂 ESB SOAP |
| 能独立部署 | 互相依赖,部署复杂 |
微服务的架构模式
聚合器服务
graph LR A[聚合器] --> S1[微服务A] A --> S2[微服务B] A --> S3[微服务C]
链式服务
graph LR A[API网关] <--> S1[微服务A] S1 <--> S2[微服务B] S2 <--> S3[微服务C]
异步消息传递微服务
graph LR A[微服务A] --> B[消息队列 Kafka RabbitMq] B --> C[微服务B]
微服务设计约束
- 微服务个体约束:每个微服务都是独立的,修改一个微服务不能影响另一个微服务
- 微服务与微服务之间的横向关系:通过第三方服务注册中心来满足服务可发现性
- 服务与数据层之间的纵向约束:数据是服务的私产,访问时需要通过微服务