searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

外部接口调用最佳实践

2023-06-28 03:50:03
74
0

1. 背景

调用第三方接口在很多系统中都很常见,不管是调用本公司其他业务平台的接口,还是调用第三方公司的接口,一定要注意系统的容错性,谨记:任何第三方都是不可信的。

常见问题:雪崩

如客户端访问B服务,由于网络原因或者自身的原因,如果B服务不能及时响应,客户端将处于阻塞状态,直到B服务响应。此时若有大量的请求涌入,客户端线程资源会被消耗完毕,导致客户端也瘫痪。造成的级联灾难,这就是服务“雪崩”效应。

2. 最佳实践

2.1. 监控与告警

接口异常要记录,尽可能地保存业务信息,方便还原信息,错误达到阈值要报警

同时需要将接口的响应时间进行监控,针对响应时间慢的接口需要和接口提供方沟通是否有优化空间。

2.2. 超时设置

超时设置主要有两个参数:连接超时(ConnectionTimeout)、读取超时(ReadTimeout)。

需要合理的设置超时参数(通过压测数据确认超时时间),不能无限等待,如果设置超时时间过长,在高并发场景下容易导致线程挂起,CPU负载飙高,超时时间太短容易出现超时异常。

2.3. 异步处理

针对接口响应时间长的接口,可以和接口提供方协商改为异步接口,通过回调通知结果。

2.4. 服务隔离

按照一定的原则划分为若干个外部服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务。

2.5. 限流

限流也是为了保障系统的安全性,因为有时业务方因为业务扩展导致调用量激增,容易引起服务端宕机。

请求量超过接口上限时系统可以拒绝请求或排队,以此保证系统的安全性。

先压测给出合理评估量,如TPS(每秒处理的请求量);这样既不会造成系统资源的浪费。

常见的限流规则:

当接口QPS达到某个阈值,则限流

  • 快速失败:常规流控方式。当前接口超过设置阈值的流量,直接拒绝多余的请求。
  • 预热启动:适用于避免突增流量瞬间冲击系统的场景。请求流量会在预热时间内缓步增加至阈值量级,多余请求会直接拒绝掉。
  • 排队等待:适用于流量匀速器场景。触发流控后,多余请求会按照顺序等待,达到等待时长后失败

2.6. 熔断

断路器是一种非常有效的容错机制,可以在应用程序出现故障或异常时快速失败(如果不快速失败,上游服务线程会一直等待响应,占用一个线程),避免上层服务级联崩溃,并且可以在一定的时间窗口内尝试恢复故障组件的访问,从而提高应用程序的可用性和稳定性。

统计某个时间窗口

  • 根据慢调用比例%
    • 慢调用响应时间RT达到xx毫秒,则进行熔断,熔断xx秒(在该时间段内,该接口的请求都会快速失败。可以返回降级的值
  • 根据异常比例%
    • 异常比例达到阈值百分比,则进行熔断,熔断xx秒(在该时间段内,该接口的请求都会快速失败。可以返回降级的值)

2.7. 降级

和熔断相结合,当触发熔断后,直接返回预设好的结果。

0条评论
作者已关闭评论
q****n
20文章数
0粉丝数
q****n
20 文章 | 0 粉丝
q****n
20文章数
0粉丝数
q****n
20 文章 | 0 粉丝
原创

外部接口调用最佳实践

2023-06-28 03:50:03
74
0

1. 背景

调用第三方接口在很多系统中都很常见,不管是调用本公司其他业务平台的接口,还是调用第三方公司的接口,一定要注意系统的容错性,谨记:任何第三方都是不可信的。

常见问题:雪崩

如客户端访问B服务,由于网络原因或者自身的原因,如果B服务不能及时响应,客户端将处于阻塞状态,直到B服务响应。此时若有大量的请求涌入,客户端线程资源会被消耗完毕,导致客户端也瘫痪。造成的级联灾难,这就是服务“雪崩”效应。

2. 最佳实践

2.1. 监控与告警

接口异常要记录,尽可能地保存业务信息,方便还原信息,错误达到阈值要报警

同时需要将接口的响应时间进行监控,针对响应时间慢的接口需要和接口提供方沟通是否有优化空间。

2.2. 超时设置

超时设置主要有两个参数:连接超时(ConnectionTimeout)、读取超时(ReadTimeout)。

需要合理的设置超时参数(通过压测数据确认超时时间),不能无限等待,如果设置超时时间过长,在高并发场景下容易导致线程挂起,CPU负载飙高,超时时间太短容易出现超时异常。

2.3. 异步处理

针对接口响应时间长的接口,可以和接口提供方协商改为异步接口,通过回调通知结果。

2.4. 服务隔离

按照一定的原则划分为若干个外部服务模块,各个模块之间相对独立,无强依赖。当有故障发生时,能将问题和影响隔离在某个模块内部,而不扩散风险,不波及其它模块,不影响整体的系统服务。

2.5. 限流

限流也是为了保障系统的安全性,因为有时业务方因为业务扩展导致调用量激增,容易引起服务端宕机。

请求量超过接口上限时系统可以拒绝请求或排队,以此保证系统的安全性。

先压测给出合理评估量,如TPS(每秒处理的请求量);这样既不会造成系统资源的浪费。

常见的限流规则:

当接口QPS达到某个阈值,则限流

  • 快速失败:常规流控方式。当前接口超过设置阈值的流量,直接拒绝多余的请求。
  • 预热启动:适用于避免突增流量瞬间冲击系统的场景。请求流量会在预热时间内缓步增加至阈值量级,多余请求会直接拒绝掉。
  • 排队等待:适用于流量匀速器场景。触发流控后,多余请求会按照顺序等待,达到等待时长后失败

2.6. 熔断

断路器是一种非常有效的容错机制,可以在应用程序出现故障或异常时快速失败(如果不快速失败,上游服务线程会一直等待响应,占用一个线程),避免上层服务级联崩溃,并且可以在一定的时间窗口内尝试恢复故障组件的访问,从而提高应用程序的可用性和稳定性。

统计某个时间窗口

  • 根据慢调用比例%
    • 慢调用响应时间RT达到xx毫秒,则进行熔断,熔断xx秒(在该时间段内,该接口的请求都会快速失败。可以返回降级的值
  • 根据异常比例%
    • 异常比例达到阈值百分比,则进行熔断,熔断xx秒(在该时间段内,该接口的请求都会快速失败。可以返回降级的值)

2.7. 降级

和熔断相结合,当触发熔断后,直接返回预设好的结果。

文章来自个人专栏
云技术专栏
20 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0