微服务
- 是一种软件架构风格
- 元素是服务
- 关系是服务间的通信协议
如何定义微服务架构
- 第一步
- 定义系统操作
- 从需求中提炼各种关键请求
- 一个系统操作代表一个外部的请求
- 分类
- 命令型
- 新增、修改、删除
- 查询型
- 查询
- 命令型
- 定义系统操作
- 第二步
- 确定如何分解服务
- 业务架构学派
- 定义与业务能力相对应的服务
- 就是根据业务能力来划分
- 业务能力
- 为公司产生价值的商业活动
- 优点
- 业务是稳定的
- 定义与业务能力相对应的服务
- 领域驱动
- 每个子域是一个服务
- 领域模型
- 以解决具体问题的方式包含这个领域内的知识
- 一个问题就是一个领域
- 一个大问题可以拆成多个子问题,子问题又对应一个领域
- 业务架构学派
- 拆分的原则
- 单一职责
- 闭包原则
- 因为同一个原因修改的类,应该都在一个包内
- 难点
- 网络延迟
- 进程间通信导致可用性降低
- 异步是个好方法
- 数据一致性
- 传统的分布式解决方法:两段式提交。
- 同时成功、同时失败
- 缺点
- 分布式系统是进程间通信,系统都要处于可用状态
- 有些数据库不支持分布式事务,如NoSql
- saga
- 异步消息来协调本地事务
- 一个失败时,其他成功的执行补偿事务
- 传统的分布式解决方法:两段式提交。
- 数据一致的视图
- 比较好解决
- 上帝类
- DDD拆分
- 确定如何分解服务
- 第三步
- 确定每个服务的API
- 将第一步中的系统操纵分配给服务
- 就是你这个服务该完成哪些业务请求
- 将第一步中的系统操纵分配给服务
- 确定每个服务的API