后端工程师的高阶面经
邓明
前 Shopee 高级工程师,Beego PMC
6888 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 50 讲
后端工程师的高阶面经
15
15
1.0x
00:00/00:00
登录|注册

08|调用第三方:下游的接口不稳定性能又差怎么办?

你好,我是大明。今天我们来聊一个跟微服务架构有很强关联的话题:如何保证调用第三方接口的可用性。
到目前为止,我们可以看到任何一个系统,都难免要跟第三方打交道。
登录注册要跟微信开放平台打交道,接入扫码登录。
金融要跟银行打交道,比如结算。
重要功能发验证码,要跟短信服务商打交道。
人脸识别、身份认证也要跟供应商打交道。
所以早期我就注意到很多人的简历上都写了自己对接过这一类的 API。但是我还注意到大多数人对接这些 API 的时候只是简单实现了功能。换句话来说,就是完全没有考虑可用性和容错之类的问题。
实际上,调用第三方接口是一个非常常见的场景,面试官很容易理解,所以在面试的时候你谈到这样的项目,很容易取得共鸣。而且你可以在上面应用非常多的微服务治理措施,和前面学过的内容形成呼应。
所以今天我就来和你深入讨论一下,如果你需要调用一些第三方接口,而你难以推动这个第三方接口的提供者做一些事情的时候,如何保证你的系统高可用。

前置知识

正常来说,和第三方平台打交道的是一个独立的模块还是一个独立的服务,取决于你维护的是一个单体应用还是微服务应用。
对于自己系统内这样一个第三方模块或者第三方服务来说,它要解决的问题也很直观。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

在微服务架构中调用第三方接口的可用性对系统稳定性至关重要。本文提出了一致性抽象、客户端治理、可观测性支持和测试支持等策略来保证第三方接口的可用性。通过屏蔽不同第三方平台 API 的差异、限流和重试、监控和告警以及提供mock服务等措施,有助于提高系统与第三方接口的高可用性。此外,文章还提供了面试准备中的重要策略,包括同步转异步、自动替换第三方和压测支持等亮点方案。这些内容为读者提供了全面的技术指导,帮助他们更好地理解和应对微服务架构中调用第三方接口的挑战。文章内容丰富,涵盖了技术实践和面试准备,对于从事微服务架构开发和面试准备的读者具有重要参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《后端工程师的高阶面经》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(9)

  • 最新
  • 精选
  • 我好像一点都不像程序员
    看文章的内容,让我想到我们部门负责的短信服务,它就需要接入多个短信供应商,并且保证高可用,因此它做了接口的抽象,一个发短信的接口可以支持指定供应商,不指定则根据系统设置的权重加上触达率以及价格成本选择最合适当前业务的供应商进行发送,如果某个供应商一直不可用,检测到也会暂时下线它,又由于公司的营销业务经常需要发大量的短信,因此我们又实现了批量定时短信能力,服务自己本身也实现了限流,重试,同时为了节约成本配合业务组压测,增加一个调试模式,此模式不会真正发送短信,也做了很多的数据面板可以分析哪个供应商的性价比最高,错误率多少,错误分类占比等,然后回答下第一个问题,公司用到的第三方服务都是比较成熟的产品,所以极少出现问题,如果出问题了,那么数据补偿或者业务补偿机制可以搞一下,如果第三方可以替换,比如短信提供商,那就要支持重试后自动替换,当然,为了安抚客户,最好是用比较友好的报错提示,不要直接报服务端的错误给到用户。

    作者回复: 大佬!你们公司这个方面算是做得非常仔细了,比很多大厂做得还要仔细了。监控这部分,我是没想到还可以分析性价比,学到了!

    2023-07-03归属地:广东
    3
    14
  • penbox
    1. 你们公司有没有出现什么第三方服务不可用引发的故障?后面有没有设计什么改进方案? 一个手机短信验证码登录的功能,遇到过因为短信服务商故障,导致系统有一个小时不能通过短信验证码登录。后续的改进方案就是引入另外一家短信服务商,并加入切换机制。 2. 你的工作经历中有没有什么内容是提高同事研发效率的?如果有,你是怎么向面试官介绍这个项目并让他相信确实提高了研发效率? 做过一个流程引擎的功能。 在企业软件开发中,流程审批是一个很常见的功能,流程也经常需要根据甲方要求做调整。在引入流程引擎前,都是靠代码来实现流程的流转,代码中充斥着条件判断,混杂了业务逻辑和流程处理逻辑,很难看懂也很难进行流程调整。 后来我引入了一套流程引擎,把流程和业务完全剥离开,代码变得更清爽,流程调整也变容易了。

    作者回复: 1. 这边如果你要去面试的话,就要搞清楚切换机制的细节,比如什么时候触发切换,会不会换回来,如果都失败了怎么办?有没有可能切换本身就失败了?是人手工切换还是自动切换? 2. 这其实就是我说的很难说清楚研发效率。从你的描述里面,我能够感觉到应该是有提高的,但是就不清楚你究竟做到了什么地步。举个例子,就是同样的系统,你是做到了页面拖拉拽就生成一个新流程,还是说要写一大堆配置?还是说需要提供新接口实现。也就是难以证明我究竟提高了多少。因此你这一段话比较欠缺说服力。

    2023-07-06归属地:四川
    4
  • Geek_8755c4
    那该如何做呢?如何实现这个过程呢?理论上讨论起来似乎很简单,但是怎么落地执行呀。比如:压测支持,该如何落地执行。

    作者回复: 没你想的那么难。压测这个就很难,因为第三方一般不会配合你做压测。你就可以用一个 Mock 服务来替换第三方,然后只测试自己这一部分。

    2023-12-16归属地:北京
  • Geek_8755c4
    这个需要怎么做:如何做好监控呢?

    作者回复: 日志 + prometheus + tracing,然后在类似 grafana 之类的框架里面配置好告警,

    2023-12-16归属地:北京
  • Geek_680632
    1.调用第三方的路由是通过配置规则来确定的,第三方不可用导致出现失败订单,通过故障自动切换来解决这个问题;2.提供统一抽象接口,封装基础组件。

    作者回复: 赞! 2. 这个地方证据还是比较薄弱的,或者说你只说了自己做了什么,但是面试官看不出来效果。

    2023-10-17归属地:浙江
  • lllweiz
    现在做的项目就是遇到了调用第三方导致的诸多问题,这篇文章让我恨恨地学习了,感谢大明

    作者回复: 赶紧刷 KPI !

    2023-08-12归属地:广东
  • 码小呆
    有一个疑问,短信自动切换是如何实现的,难道是定义了多套代码,然后判断第一个出现错误,然后就请求其他短信发送接口?

    作者回复: 不是,是换实现。 你可以理解为你有一个抽象地发送短信的接口,而后针对不同服务商有不同的实现。 那么在实现层面上,比较简单的就是你用一个数组装着所有的实现,然后当一个调不通,你判定已经寄了的时候,就挪一下数组下标,用下一个实现。

    2023-07-04归属地:广东
    4
  • 3.0的A7
    1、之前公司,有个同事操作不规范,查询把 公司阿里云的 redis 搞挂了,结果一连串服务都用不了了。改进方案是,打开了阿里云 redis 后台的一些个检测规则😵‍💫,其实正常是应该代码 review 的,这样就可以发现。还有现在公司,经常有个服务一发版,就导致别的服务不可用了,咱也不知道为啥。 2、这个主要是写了写公共组件、平台给同事用。 我主要是写了一个日至组件,通过该组件日志可以输出到指定位置,然后通过 filebeat kafka es 进行收集展示,用户还可以进行设置指定级别的日志告警,保证业务出错第一时间发现。 还写了一个平台,吧啦吧啦

    作者回复: 1. 是的,正常来说,应该是走变更流程,代码 review,能避免很多问题。不过之前我们出现过的大对象,那就真的是没有预料到,因为从代码上是看不出来这里会有大对象,然后寄了。 2. 你这里如果出去面试还是可以深入讨论你的平台是怎么设计的,

    2023-07-03归属地:北京
    2
  • peter
    请教老师几个问题: Q1:第一个图的“回调”是指什么? 是本系统收到响应后调用自身的某个函数吗?回调的箭头是从第三方指向自身系统,难道是指第三方调用本系统的某个函数? Q2:怎么知道第三方是接口幂等的? Q3:公司会同时使用Prometheus和Skywalking吗?感觉都是监控的啊,用一个不就可以嘛。两个都用会重复吗? Q4:异步处理,会有超时时间吗?

    作者回复: 1. 打个比方,正常的调用方向是 A 调用 B,那么回到就是 B 反过来调用 A。比如说,A 调用了 B 之后,B 没有立刻给出响应,而是过了一段时间之后,B 再调用 A 的一个接口告诉了 A 响应。在微信平台里面,你支付成功之后,微信会回调你的接口,告诉你结果。 2. 这个你询问第三方接口就可以,一般他们都需要告诉你的。你也可以在研发阶段试试同一个请求过去会发生什么。 3. 有些公司会一起使用。它们的侧重点不同,正常来说,一家公司里面 metrics 类的监控和 tracing 类的监控就是两个工具。从采集的数据上来说,它们会有一部分重复,但是问题并不大。 4. 异步处理也可以有超时,比如说 A 调用 B,B 说一小时以内给你处理完,一小时没处理完,那么 B 就要告诉 A 超时了。异步超时一般是走回调通知机制。

    2023-07-03归属地:北京
    2
收起评论
显示
设置
留言
9
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部