服务最佳实践

分包

  • 服务接口、请求服务模型、异常信息都放在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=".." />

如果注册中心挂掉了(临时不可用),可以从缓存文件中找。进一步保证可用性。

  • 缓存内容
    • 注册中心的列表
    • 服务提供者列表