第三方调用
July 13, 2024
探究技术的本质,享受技术的乐趣,今天我们来聊聊与第三方平台对接的一些事。与第三方平台对接是不可避免的,比如在登录注册的时候,会去对接微信开发者平台,实现微信扫码登录,在进行支付场景时,会对接支付宝开发者平台,实现扫码支付,你看吧,目前主流的业务系统,或多或少都会去对接第三方系统。但是在软件开发中,有一个基本原则,永远不要相信别人的东西,也就是我们提倡的防御性编程,在对接第三方平台也不例外,第三方平台终究是别人的,你没有办法要求第三方平台保证高可用性,所以一般对接第三方平台的时候,我们都会抽象出一个层,比如对接第三方支付平台的时候,我们通常会在我们的系统中抽象出一个单独的模块来负责对这些第三方支付平台的对接功能,这其实是我们最熟悉的分层架构,这种架构设计将关注点分离,将变化隔离,即使后期需求发生改变,我们需要改动的也只是这个模块而已。当然单独抽出一个模块,有一个专门的术语:一致性抽象即无论对接的是第三方支付是微信还是支付宝,使用我们模块的一方,只需要使用通用的API接口即可。这是一个对接模块最最基本的功能。前面说过,我们无法保证第三方平台的可用性,如果一次用户请求,需要用到第三方服务,而第三方服务崩溃或者响应慢,就会带着我们的系统受到影响,这显然不合理,我们需要保证整个系统的可用性,但是第三方服务又不是我们的,我们无法在服务端或者网关层面来做保证。不过好在我们还可以在客户端层来做,即我们的对接模块,在对接模块中,我们通过使用限流和重试来保证整个系统的可用性。这样就可以保证即使接入第三方服务也能保证整个系统的可用性,但是这远远不够,到目前为止我们通过一些手段保证了系统在运行时的可用性,但是在开发时,我们往往需要进行一些压力测试,而第三方服务往往会有一定的限流策略,所以在需要使用第三方服务的业务中进行压力测试这变的极为困难,所以在对接模块中,需要提供测试支持,即Mock功能,需要模拟第三方服务的响应时间,正确响应,错误响应,超时响应等。除此之外,为了能够更加快速的知道第三方服务出现问题,我们还需要监控对接模块的调用状态,据此来判断第三方服务的健康状态,一旦发现第三方服务出现了一定的问题,需要立马通知对接模块的开发人员以及使用对接模块的业务人员,达到短时间内解决问题的效果。到此我们就将由接入第三方服务导致整个系统的可用性降低的风险解决了。值得注意的是在服务治理时,我只提到了使用限流和重试来解决,实际上你可以根据具体的场景来使用其他的治理策略,比如如果针对同一个功能,比如扫码支付,对接的平台有微信,支付宝,抖音等等,那么当微信的支付服务不可用时,你可以自动替换成其他的服务,这就类似于负载均衡+重试,好了,到今天为止,微服务架构中重点的内容就介绍完毕了,接下来就需要你动手实践了。下一期我们聊聊软件设计的哪些事。