开发者社区 问答 正文

求教一个系统设计的问题 400 请求报错

假设当前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)被动获取:长连接,被动接受服务端推送的请求结果

展开
收起
kun坤 2020-05-29 17:23:31 678 分享 版权
1 条回答
写回答
取消 提交回答
  • 不过怎么弄,给C端访问客户的体验都是极差的, 遇到请求30秒后才响应成功时,客户会很受伤######没办法,有些服务就是太慢了!要不就是预先生成静态页面######你这单机无法解决问题的,第三方API就那么烂再怎么也吃不消。 需要做多机负载,明显的可以提高负载容量。######不是单机,会有集群,但是单机吞吐量容易受限!######使用消息队列,异步处理数据。 SWBT框架 https://github.com/YWNA/SWB

    2020-05-29 17:23:37
    赞同 展开评论
问答分类:
问答地址: