请问一下各位, 现有的网络框架中,存不存在一种能通过接口响应时长,来控制接口调用并发数的解决方案。 具体业务场景如下: A 系统在调用 B 平台的接口 X 时,出现一个问题:B 平台的接口 X 会被多个业务方调用,由于 B 平台的性能问题,同一时间内支持的并发数是有限的,如果在业务繁忙期频繁调用,响应会明显变慢。 而对于 A 系统业务来说,每一天调用这个接口的次数 10 万~100 万这个量级,而且集中在早上 5 点至 9 点之间完成。对于该接口所在平台来说,我们的调用方式对系统的压力较大,故暂时约定我们的请求接口个数为 100 次 /s。
这种临时方案存在着问题,故现在想了一个解决方案,即 B 平台侧给定一个正常的响应时间,例如 100ms,A 系统异步调用 B 平台的 X 接口,如果响应时长低于 100ms,则提高请求频率;如果响应时长高于 100ms,则降低请求频率,达到动态设置请求频率的效果。
为了避免重复造轮子,也由于经验不足,故请求各位是否已有现有的解决方案?当前 A 系统是通过 AsyncHttpClient 的形式异步请求调用接口的。
附上之前搜索方案找到的几个网络框架: https://www.jianshu.com/p/35fdb2a1cded
1
kslr 2018-08-31 05:36:24 +08:00 via Android
什么时候会自动出现低于 100ms 的情况?
|
3
Lax 2018-08-31 08:17:09 +08:00 via iPhone 1
觉得可以参考 tcp 的慢启动算法写一个策略
|
4
des 2018-08-31 08:42:54 +08:00 via Android
反向代理接口 X,对请求进行排队?
|
7
jininij 2018-08-31 10:30:40 +08:00 via iPhone 1
那你请求频率这东西就不要计次了,直接计时间多好。
比如一个接口限额频率是 1 分钟 /小时。 因为负载大的时候,每个请求的响应时间都会增加。所以使用接口的人自己会想方法,尽量分散请求,尽量在负载低的时候请求。 |
8
countdown OP @jininij 不是很明白你说的计时间的方法。另外,接口提供方肯定是希望分散请求减轻压力的,但是对于调用方而言,由于业务需求,确实存在业务繁忙时也要大量调用的情况。
|
9
night98 2018-09-01 02:32:36 +08:00 via Android 1
加个线程池,根据调用时间动态调整线程池大小,调用走线程池。
说实话还不如建议接口端考虑下动态扩容的问题,另外可参考阿里的一个 sentinel 框架。 |