假设当前Web系统,需要集成大量第三方系统API(服务不稳定、不可靠),各位大神,如何设计这个系统比较好一点,求指点,万分感谢! 以下是个人的拙见,求指点,主要考虑的点: 1、第三方系统API,不稳定(10ms~30s):容易消耗线程资源,按1000个线程算,极端情况下,全阻塞30s,整个系统就瘫痪了,下文引入NIO,主要也是基于这点考虑(可能不是很适合这种场景) 2、如果无限制创建线程:按1M线程栈内存空间算,1000个也要1G内存,4000个线程也是很大的负担,且不算上下文切换开销,而且也不够用 一、方案一 1、Tomcat(NIO)接收用户请求 2、将请求压入队列,异步调用第三方系统API (1)调用第三方系统API(异步 + 线程池 + NIO):部分API调用时间过长(10ms~30s),容易阻塞线程,把线程消耗完毕,因此不得已考虑NIO 3、等待第三方系统API响应,再把响应结果返回给客户端请求 二、方案二 1、Tomcat(BIO)接收用户请求 2、将请求压入队列,异步调用第三方系统API (1)调用第三方系统API(异步 + 线程池 + NIO):部分API调用时间过长(10ms~30s),容易阻塞线程,把线程消耗完毕,因此不得已考虑NIO (2)立即返回客户端未完成的请求(请求未完成) 3、获取请求结果 (1)主动拉取:轮询的方式,获取请求结果 (2)被动获取:长连接,被动接受服务端推送的请求结果
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
不过怎么弄,给C端访问客户的体验都是极差的, 遇到请求30秒后才响应成功时,客户会很受伤######没办法,有些服务就是太慢了!要不就是预先生成静态页面######你这单机无法解决问题的,第三方API就那么烂再怎么也吃不消。 需要做多机负载,明显的可以提高负载容量。######不是单机,会有集群,但是单机吞吐量容易受限!######使用消息队列,异步处理数据。 SWBT框架 https://github.com/YWNA/SWB