资讯专栏INFORMATION COLUMN

跨公网调用第三方接口的服务层的思考

icyfire / 2736人阅读

摘要:当接口相应时间明显超过其历史平均响应时间时,动态降低此接口的可用线程数量。文章中给出的解决方案增大工作线程数降低超时时间拆分接口和服务层治标不治本。

跨公网调用第三方接口的服务层的思考 问题

前日有幸拜读了架构师之路的58沈剑所写的 跨公网调用的大坑与架构优化方案 一文。文中,作者提到了一个很值得思考的问题:

如何设计一个为内部系统提供跨公网第三方接口调用的服务层,才能避免因部分接口问题导致整体失效的问题?

问题的具体描述请参见原文。

在看到问题后,我先试着想了几个解决方案。

我的解决方案

对于每次接口调用,都记录其响应时间,并对服务层内每个接口求出其平均响应时间。

对于每个接口,根据其平均调用时间,设置其可用工作线程数的阈值,保证当接口出现异常时,不会影响到所有工作线程。

当接口相应时间明显超过其历史平均响应时间时,动态降低此接口的可用线程数量。

当接口的异常状态持续一段时间仍未恢复时,停止为该接口提供服务,改用对进行轮询的方式,来保证当其恢复可用后可以迅速恢复对该接口的服务。

文章中给出的解决方案

增大工作线程数、降低超时时间、拆分接口和服务层(治标不治本)。

对于可以接受非实时数据的内部系统调用方提供异步代理,对其屏蔽具体细节。即缓存外部接口调用的返回结果,对内部调用方直接提供对应的缓存结果,并定期调用外部接口来完成数据的更新。

对于可以冗余的外部接口,保证其冗余性,在主接口调用失败后迅速将服务转移至备份接口。

对于是向外部接口推(主动同步)数据而不是拉数据的业务场景,先同步写本地数据库,本地写成功后对内部调用方返回调用成功的消息,其后异步地向第三方接口推数据。

我对自己的反思

解决方案局限在一个具体的技术实现思路上(限流、动态规划),考虑太窄,没有结合实际的业务需求分析可行性。目前还停留在解决具体技术问题的阶段,看山只是山,应该努力培养自己的宏观思维。

我提出的解决方案需要直接操作服务容器的线程调度,难度大,技术可行性也未知。

因为我的计算机网络相关从业背景,我在思考过程中受到各种网络协议的设计思路影响很大(比如IP SLA探针、GLBP中的各种权重判断等),这点我认为在我的程序设计思维中可能会让我持续受益。虽然现在已经不从事网络相关行业了,但是也应该保持住网络工程师对于系统稳定性、可用性、扩展性的不懈追求。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11838.html

相关文章

  • 程序员都应该了解运维知识经验

    摘要:负载均衡器又分为四层和七层负载均衡器,顾名思义,四层的工作在协议栈上,通过修改请求报文的源目的地址和源目的端口来转发,比如,一个主机对应一个域名,适用于每秒超过一万的业务。每一次变更都是一次发布,每一次发布都是一个独立的镜像启动 showImg(https://segmentfault.com/img/bVbvtgW?w=1080&h=720); 以一个经典问题抛砖引玉,当用户在浏览器...

    reclay 评论0 收藏0
  • 服务接入层设计与动静资源隔离

    摘要:接入层作用一的聚合。接入层作用二服务发现与动态负载均衡既然统一的入口变为了接入层,则接入层就有责任自动的发现后端拆分,聚合,扩容,缩容的服务集群,当后端服务有所变化的时候,能够实现健康检查和动态的负载均衡。 此文已由作者刘超授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 这个系列是微服务高并发设计,所以我们先从最外层的接入层入手,看都有什么样的策略保证高并发。...

    jindong 评论0 收藏0
  • 架构~微服务

    摘要:接下来继续介绍三种架构模式,分别是查询分离模式微服务模式多级缓存模式。分布式应用程序可以基于实现诸如数据发布订阅负载均衡命名服务分布式协调通知集群管理选举分布式锁和分布式队列等功能。 SpringCloud 分布式配置 SpringCloud 分布式配置 史上最简单的 SpringCloud 教程 | 第九篇: 服务链路追踪 (Spring Cloud Sleuth) 史上最简单的 S...

    xinhaip 评论0 收藏0
  • 人人都是 API 设计师:我对 RESTful API、GraphQL、RPC API 思考

    摘要:通常情况下,伪都是基于第一层次与第二层次设计的。为了解决这个版本不兼容问题,在设计的一种实用的做法是使用版本号。例如,建议第三位版本号通常表示兼容升级,只有不兼容时才需要变更服务版本。 原文地址:梁桂钊的博客 博客地址:blog.720ui.com 欢迎关注公众号:「服务端思维」。一群同频者,一起成长,一起精进,打破认知的局限性。 有一段时间没怎么写文章了,今天提笔写一篇自己对 API 设...

    ormsf 评论0 收藏0
  • 人人都是 API 设计师:我对 RESTful API、GraphQL、RPC API 思考

    摘要:通常情况下,伪都是基于第一层次与第二层次设计的。为了解决这个版本不兼容问题,在设计的一种实用的做法是使用版本号。例如,建议第三位版本号通常表示兼容升级,只有不兼容时才需要变更服务版本。 原文地址:梁桂钊的博客博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」。一群同频者,一起成长,一起精进,打破认知的局限性。 有一段时间没怎么写文章了,今天提笔写一篇...

    FWHeart 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<