spring cloud服务提供者接口迭代兼容策略(平滑升级)

精选30+云产品,助力企业轻松上云!>>> spring cloud服务提供者接口迭代兼容策略(平滑升级)

spring cloud服务提供者接口迭代兼容策略

接口表现形式
  1. 传统接口形式的兼容(java、feign级别的兼容),如public ReturnType methodName(Params...){...return object;};
  2. http请求形式的兼容,比如uri、method等等
解决方式
  1. 当只需要修改接口实现,不需要修改接口表现形式时,且接口语义没有发生变化,这种情况下可以无感知升级(不需要通知其他人或团队,因为没必要【这时候表现形式与实现分离,只改动实现就是无感知的原因】);

  2. 当接口语义发生变化或接口形式发生变化时,通过以下两个步骤来平滑升级:

    1. 通过升级客户端jar的版本号,保持编译时的接口兼容;

    2. 通过新增接口(并同时给旧接口标注@Deprecated 注解表示未来会下线/删除)的形式,保持运行时的接口调用兼容

      另外,删除旧接口,可通过发公告、邮件甚至口头等方式通知其他人或团队整改,迁移到新接口,最后一道防线,通过流量监控等方式确保没有调用方使用旧接口了,这时候才敢下线标注了@Deprecated 的过时陈旧接口。

spring cloud服务提供者接口迭代兼容策略(平滑升级)

原则

只新增、删除接口,修改接口实现(语义未发生重大变化时)这三种情况。

具体实施
  • 一、当不需要升级客户端jar版本时(SNAPSHOT):
    1. mvn clean install deploy
    2. 通知服务调用方强制刷新SNAPSHOT包的缓存(可选)
  • 二、当需要升级客户端jar版本时(此时可能是SNAPSHOT也可能是正式版本):
    1. 升级jar源文件的pom文件版本号;
    2. mvn clean install deploy
    3. 通知服务调用方更改maven坐标(版本号)
SNAPSHOT VS 正式版本
  • 选择SNAPSHOT版本是因为代码不稳定,可持续更新,适用于非接口表现形式(即只更改接口实现,且语义最好不变)的变化(当然,一般也适用于新增服务接口的情况);
  • 但是一般情况下,线上工程尽量依赖正式版本,降低SNAPSHOT的易变性发生的代码出错风险。