寻找理想的服务间的集成技术指导原则:
- 避免破坏性修改
- 保证API的技术无关性
- 使服务更便于消费方使用
- 隐藏服务内部的实现细节
服务的集成时,调用的同步异步问题:
- 同步方式:可以知道调用结果,但是耗时较长
- 异步方式:对于运行时间较长的任务比较友好,但是对于请求结果需要额外处理才能获取到
跨服务调用业务流程问题:
- 编排方式:依赖于某个中心大脑来指导并驱动整个流程,其缺点是中心大脑承担了过多职责,周边服务又过于简单
- 协同方式:通过异步时间的方式,来触发多个服务一同协同完成某项复杂的流程
常见的集成方式:
- 数据库:
- 优点:简单快捷、实现速度快
- 缺点:
- 暴露了实现细节
- 难以避免破坏性修改
- 远程过程调用
- 优点:可快速自动生成 客户端 和 服务端代码
- 缺点:
- 技术耦合性:部分RPC与特定技术强绑定,如Java RMI
- 本地调用与远程调用不同,需要区别对待
- 脆弱性:部分RPC服务端代码改变,需要对应客户端代码做响应修改
- REST
- 优点:隐藏内部实现
- 缺点:
- 无法自动生成请求代码
- 延迟高
微服务的版本管理:
- 尽可能减少坏性修改的发生
- 及早的发现破坏性的修改
- 使用语义化的版本管理:版本号遵循:MAJOR.MINOR.PATCH,MAJOR的改变,意味着存在向后不兼容的修改,MINOR 意味着新功能的增加,但是向后兼容的,PATCH 代表着对已有功能的缺陷修复