page contents

java 高并发对外平台发起http请求

Pack 发布于 2020-01-20 15:59
阅读 515
收藏 0
分类:Java开发

情况是这样的,公司人员上传一份一万行内容的文件(或多或少),我用redis保存,如何对多个第三方平台发起查询请求,一直有瓶颈,有时候又报错,socket超时,连接超时,代理不可用,各种小问题,但是我最大的期望是能每秒钟对多个第三方发起正常的100的请求,希望大家给点意见。

我尝试过:okHttp 发起同步的请求,我发现会阻塞很多线程,我的线程池也不够用,当我程序开机后10分钟就频频出现问题,

我又尝试过:okHttp 的异步发送,但是还是让我失望,我自认为他不是很适合这种用的方式,他官方也是说给安卓这边用的多(个人感觉)

我又尝试:apache的httpclient 发送同步,哎,还是很失望,开机不过多久就陆陆续续不稳定,可能是请求量太大了,

我后面又用apache的httpclient 发起异步的请求,如果只请求一个第三方平台的话,效果都能接受,但是多个(10个)的话,完全招不住,

目前我就想看看netty的http支持,能不能达到我要的效果,但是我也不会用,我也烦躁,每天就是睡5/6个小时,早上起来9点又上班,晚上两三点,真的好想做好,希望大家能帮助我一下,给我一点想法核意见,或者是接收给好的语言去实现也行,我感激不尽,

说说我能力的原因,我15岁进北大青鸟,17岁工作了,现在19岁,工作还算顺利,自己也有追求,但是我没有大学经验,学东西很吃力,但是我也不会放弃,所以今天找各位哥哥们求助一下。

229
Pack
Pack

看完了题主的描述和评论,大致理解题主的意思,我说下我的理解:

首先HTTP是很慢的操作,比sql还慢,单机能发起HTTP最大QPS是很有限,我们目前有类似的实现,监控显示是平均请求速度是 4000 QPS(使用的是okHttp,200个线程)。我们公司一个业务模块入口白天平均10000 QPS,以上都是单机情况下,我们模块都是大集群处理,针对入口出口明显不对等的情况下,消息队列是很有必要的,我们消息队列每天峰值会堆积7-8亿条消息。我们的业务也是请求第三方网站,第三方是稂莠不齐的,请求速度从20ms-3s不等,失败超时也是常有的事情。题主可以参考我们做的主要的优化:


1.消息队列,这个很重要,平滑消费,不至于服务被压垮,单机HTTP请求是很慢的。

2.记录第三方请求的URL超时失败等情况,动态分组调整(用不同的topic,不同的线程池去做),避免慢请求拖累整个线程池。

请先 登录 后评论