请教下有没有一种通过接口的响应时长来动态控制调用频率的解决方案

2018-08-31 00:02:57 +08:00
 countdown

请问一下各位, 现有的网络框架中,存不存在一种能通过接口响应时长,来控制接口调用并发数的解决方案。 具体业务场景如下: 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

1491 次点击
所在节点    问与答
10 条回复
kslr
2018-08-31 05:36:24 +08:00
什么时候会自动出现低于 100ms 的情况?
countdown
2018-08-31 08:09:47 +08:00
@kslr 当 B 平台的负载不大,此时响应很快,那就可以加大请求频率。
Lax
2018-08-31 08:17:09 +08:00
觉得可以参考 tcp 的慢启动算法写一个策略
des
2018-08-31 08:42:54 +08:00
反向代理接口 X,对请求进行排队?
countdown
2018-08-31 09:19:37 +08:00
@Lax 了解下 tcp 的慢启动,确实和我这描述的需求有点像,可以参考下,多谢
countdown
2018-08-31 09:22:16 +08:00
@des 用消息队列?这个不能动态调整速度吧,请求频率是只能由接口调用方控制吧?
jininij
2018-08-31 10:30:40 +08:00
那你请求频率这东西就不要计次了,直接计时间多好。
比如一个接口限额频率是 1 分钟 /小时。
因为负载大的时候,每个请求的响应时间都会增加。所以使用接口的人自己会想方法,尽量分散请求,尽量在负载低的时候请求。
countdown
2018-08-31 12:56:53 +08:00
@jininij 不是很明白你说的计时间的方法。另外,接口提供方肯定是希望分散请求减轻压力的,但是对于调用方而言,由于业务需求,确实存在业务繁忙时也要大量调用的情况。
night98
2018-09-01 02:32:36 +08:00
加个线程池,根据调用时间动态调整线程池大小,调用走线程池。

说实话还不如建议接口端考虑下动态扩容的问题,另外可参考阿里的一个 sentinel 框架。
countdown
2018-09-01 16:33:27 +08:00
@night98 多谢。接口端的话,主要是不太好控制。如果接口端性能能有冗余,对于调用方来说肯定方便很多的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/484744

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX