服务最佳实践
分包
- 服务接口、请求服务模型、异常信息都放在api里面
- 符合重用发布等价原则,共同重用原则
- api里面放去spring的引用配置。也可以放在模块的包目录下
- com.bai.order/***-reference.xml
粒度
- 尽可能把接口设置成粗力度,每个服务方法代表一个独立的功能,而不是某个功能的步骤。否则就会涉及到分布式事务
- 服务接口建议以业务场景为单位划分。并对相近业务做抽象,防止接口暴增
- 不建议使用过于抽象的通用接口T<泛型>
- 接口没有明确的语义,带来后期的维护
版本
- 每个接口都应该定义版本,为后续的兼容性提供前瞻性的考虑
- version(maven-snapshot)没有做环境隔离会有问题
- 建议使用两位版本号,因为第三位版本号表示兼容性升级,只有不兼容时才需要变更服务版本
- 当接口做不兼容升级的时候,先升级一半或者一台提供者为新版本,再将消费全部升级新版本,然后再将剩下的一半提供者升级新版本
- 预发布环境
推荐用法(配置)
- 在provider端尽可能配置consumer端的属性
- timeout、retires、线程池大小、loadBalance等
- 配置管理员信息
- application上面配置的owner
- 建议配置2个人以上
- 因为owner都能够在监控中心看到
配置dubbo缓存文件
1 | <dubbo:registry file=".." /> |
如果注册中心挂掉了(临时不可用),可以从缓存文件中找。进一步保证可用性。
- 缓存内容
- 注册中心的列表
- 服务提供者列表