模块分解 - 微服务,组件设计原则,领域驱动开发

微服务
巨无霸应用系统带来的问题
- 编译、部署困难: 
- 代码分支管理困难: 
- 数据库连接耗尽: 
- 新增业务困难: 
解决方案
- 拆分: 
将模块独立部署,降低系统耦合性:
微服务框架
- Web Service 与企业级分布式服务 

from wiki
处理流程:
- 服务提供这通过WSDL向注册中心提供服务接口; 
- 注册中心使用UDDI发布服务 
- 服务请求者从注册中心发现服务后,通过SOAP与服务提供者通讯 
缺点:
- 臃肿的注册与发现机制 
- 低效的 XML 序列化手段 
- 开销相对较高的 HTTP 远程通信 
- 复杂的部署与维护手段 
微服务框架需求
- 失效转移 
- 负载均衡 
- 高效远程通讯 
- 对应用最小侵入 
- 版本管理 
微服务框架
- (Dubbo)架构 

- Service Mesh 服务网格 

微服务架构落地
- 业务先行 
- 先有独立的模块,后有分布式的服务 
- 业务耦合严重,逻辑复杂多变的系统进行微服务重构要谨慎 
- 清楚实施微服务的目的是什么 
最佳实践策略
- 命令与查询职责隔离(CQRS) 
- 事件溯源 
- 断路器 
- 服务重试及调用超时 
服务调用
- 通过服务代理 

from Microservices Best Practices for Java
- 直接链接 

from Microservices Best Practices for Java
- 边车模式 

from Microservices Best Practices for Java
微服务网关

- API 接口 
- 协议转换 
- 安全: 
- 审计 
- 路由 
- 流程: 
开放授权协议 OAuth2.0

领域驱动开发
领域模型
- 事务脚本-贫血模型 

没有抽象业务对象,页面驱动。
- 领域模型-充血模型 

领域模型是合并了行为和数据的领域的对象模型。通过领域模型对象的交互完成业务逻 辑的实现,也就是说,设计好了领域模型对象,也就设计好了业务逻辑实现。
DDD 战略设计
领域驱动设计就是从领域出发,分析领域内模型及其关 系,进而设计软件系统的方法。
- 子域 : 业务上划分 
- 限界上下文:物理上,对应微服务 
- 上下文映射图: 模块各种依赖交互 
DDD 战术设计
- 实体 : 领域对象模型 
- 值对象 : 值对象的一个特点是不变性,一个值对象创建以后就不能再改变了。 
- 聚合: 一个关联对象的集合 
- DDD 分层架构 
- DDD 六边形架构 
- DDD 战略设计与战术设计 
组件设计原则
组件内聚原则
- 复用发布等同原则 
- 共同封闭原则 
- 共同复用原则 
组件耦合原则
- 无循环依赖原则 
- 稳定依赖原则 
- 稳定抽象原则 
组件的边界与依赖关系,不仅仅是技术问题
参考及引用
架构师训练营作业-李智慧老师相关讲义
Photo by Craig Adderley from Pexels
https://en.wikipedia.org/wiki/Web_service
https://philcalcado.com/2017/08/03/patternservicemesh.html
Microservices Best Practices for Java












 
    
评论