abruzzi / consulting

2 stars 0 forks source link

Microservice Design Checklist #15

Open abruzzi opened 8 years ago

abruzzi commented 8 years ago
检查项,检查项细节,分类,关注度,规格
领域词汇表及解释,"1. 词汇表
2. 词汇表释义:比如开站,局点,网元等等,需要有明确定义",设计,中,建立对领域名词,角色,流程等名称的词汇表,方便开发团队与业务的沟通
服务与业务领域匹配(完整的领域模型,上下文映射),"1. 领域模型的定义
2. 系统的限界上下文",设计,高,完整的领域建模,包括DDD中战术模式中的 实体,值对象,仓库,领域服务,领域事件等
防腐层(与遗留系统集成,非RESTful接口),1. 列出需要集成的遗留系统(非RESTful接口),集成,高,如果系统需要和遗留系统集成,需要引入防腐层
异步通信(消息队列),1. 列出所有需要与之异步方式的系统(如邮件系统,工单系统等),集成,中,有异步通信场景的,需要考虑引入消息队列,在技术选型中也需要有体现
完善的测试机制(5层),"1. 契约测试
2. CI上的测试机制",开发,高,微服务场景下的5层测试,特别是契约测试,需要考虑和CI集成的场景
事务一致性要求,1. 如果涉及数据库操作,需要使用事务管理(比如JPA的@Transactional),设计,高,一个服务内,事务是一致的
超时机制,"1. 列出所有外部集成点,涉及到的所有网络请求
2. 对超时设置有统一的配置项(比如500ms)",集成,高,与外部通过网络集成的部分,都需要加入超时机制
熔断器,"1. 列出所有外部微服务的集成点
2. 采用熔断器机制(如Hystrix)",集成,高,与外部通过网络集成的部分,都需要加入超时机制
降级处理(缓存/错误提示),"1. 考虑缓存机制(如Redis)
2. 静态页面
3. NullObject模式",集成,中,当依赖服务不可用时,要确定如何降级
避免纯CRUD(基于聚合根),"1. 对DDD中分析出的Aggregate做CRUD
2. 如果有对Aggregate粒度以下的CRUD,则划分粒度过细",设计,中,仅仅对资源的增删改查,是贫血模型在架构上的体现,服务需要承载业务概念,需要有完整的事务一致性。
避免分布式事务,,设计,高,避免分布式事务,因为分布式事务会引入额外的复杂度。在不可避免时,可以通过CQRS,事件溯源等模式来规避