微服务中某个服务对外接口变化,那么调用这个接口的所有服务都需要更新,有没有什么好的方案?

219 天前
 chenzw2
看到讨论微服务优劣的帖子,我有个疑问,如果微服务中的某个基础服务对外接口发生变化,假设有 10 个服务调用了此接口,那么所有接口都需要重新改动?甚至于有时不知道哪些服务会调用到这个变动的接口,这是个大问题,请问大家都用什么方案来解决以上问题?
2684 次点击
所在节点    Java
15 条回复
littlewing
219 天前
变化当然是要考虑兼容性啊
ipwx
219 天前
把旧的接口留着,调一下新的接口相关代码呗。微软 20 年老 API 都留着呢
cvbnt
219 天前
那要看什么级别的改动,如果是接口名称,参数修改那没辙,但是可以单独将请求对外接口封装到单独的一个服务里供其他服务使用,这样外部接口发生变化,仅需要改动这一个服务就行了
quan7u
219 天前
1 、版本号 or 参数控制接口版本,比如保留 v1 、新开 v2 ,通知上游接口切换
2 、完善监控,统计接口流量、分渠道的调用量
lnbiuc
219 天前
旧的接口不变,新的改成 v2 版本,其他的服务如果有需要就改,没需要就维持现状
xuanbg
219 天前
首先,出现 10 个服务调用情况基本就是设计的问题。代码写错地方真的比写错了代码还糟糕。
然后,问题已经出现了,那该怎么办呢?简单,给一个 V2 版本就行了。需要新的改用 V2 版本,不需要的继续用 V1 ,就不需要动他了。
conn4575
219 天前
如果你有更上层的 api 网关的话,可以在上面做参数重写,这就是 api 网关的意义。否则就只能用 v1 v2 做好兼容了
wogogoing
218 天前
/api/v1

/api/v2

让需要的服务显式变更。
lasuar
218 天前
1. 内部逻辑变化不影响其他服务,仅接口出入参变化需要关联更新
2. 接口出入参变化属于较大结构调整,可能是因为之前设计不完善或业务/功能原因需要调整,频率较低
3. 微服务中的服务调用一般是基于生成式代码的 RPC 调用,不存在说 [不知道影响了哪些服务]
4. 楼主的问题在微服务中属于基础,最好是先尝试本地使用熟悉语言实践一下微服务架构,这样方能避免一知半解的状态。
looveh
218 天前
@cvbnt 你这治标不治本,那我要是改动了这一个服务咋办,不还是这样的情况么。基础服务改动最好的办法就是升级,做好兼容,实在兼容不了就强制升级呗
cyrivlclth
218 天前
这个场景和微服务没强关联,你就做下提供给移动端的 api 就知道了,有些接口你要是变更了,那没升级的那些移动端的用户是不是直接不给用了?那可不是十多个,那是成千上万个用户。
这种涉及到对外接口的,都要做版本控制的。
pxxu
218 天前
如果微服务提供的接口是为了保障和其他微服务之间的接口变化感知的话,pact 之类做服务之间的契约测试,CI 定期监控应该满足你的需求
1Z3KYa0qBLvei98o
217 天前
@ipwx void *
johnhuangemc2
217 天前
都微服务了, 得考虑接口变更治理
变更巨大就把接口版本化
小变更就尽量保证兼容性
新旧接口并行一段时间就找机会把老接口绞杀掉
CodeCaster
217 天前
微服务接口变化,而造成的调用方也要发生改变,最常规的解决方案,就是老的接口先不变,新增一个全新的接口,所有调用方根据自己的升级节奏逐步升级到新接口,待全部调用方都升级完毕之后,再将老接口下线。
其实,上述问题在微服务体系中非常常见,我觉得这个问题就是微服务架构这种模式造成的,因为不同的微服务本质上是离散的不同个体,他们之间的调用就是他们之间的强依赖关系,既然是强依赖,那么被依赖方发生改变,必然会造成依赖方要随之改变,这种变化是会传播的。
看到了微服务具有这样的问题,其实再看看过去的传统单体应用,调用方和被调用方都在一个进程中,这个时候,服务提供方发生改变,我们随手把调用方代码一起改了就完事了,根本不会有这样的问题,因为其实调用方和被调用是一个整体。
所以,这个问题,我觉得,没有什么更好的方案了,既然选择了微服务,就需要正视这样的问题存在,选择最常规最稳妥的解决方案吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://ex.noerr.eu.org/t/1113681

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX