https://juejin.cn/post/7283416371596558373
对于自己系统内这样一个第三方模块或者第三方服务来说,它要解决的问题也很直观。
在任何跟第三方打交道的场景之下,都要考虑好第三方崩溃的时候自己的系统怎么容错。公司或者部门内部的调用出现问题了,还可以推动同事快速修复。但是第三方是推不动的,所以只能是我们调用者考虑容错。
在一些不需要立刻拿到响应的场景,如果你发现第三方已经崩溃了,你可以将业务方的请求临时存储起来。等后面第三方恢复了再继续调用第三方处理。这种方案一般用于对时效性要求不高的业务。
我们这种容错机制其实完全可以做成利用消息队列来彻底解耦的形式。在这种解耦的架构下,业务方不再是同步调用一个接口,而是把消息丢到消息队列里面。然后我们的服务不断消费消息,调用第三方接口处理业务。等处理完毕再将响应通过消息队列通知业务方。
调用一个第三方的接口失败的时候,你可以考虑换一个第三方。
为了进一步提高可用性,降低因为第三方故障引起事故的概率,我在调用第三方这里引入了自动替换机制。我们本来有多个第三方,相互之间是可以替换的,于是我就做了一个简单的自动切换机制。当我发现第三方接口出现故障的时候,就会切换到一个新的第三方。
考虑通过 mock 来提供压测支持。和正常的测试支持比起来,压测你需要做到三件事。