V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
countdown
V2EX  ›  问与答

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

  •  
  •   countdown · 2018-08-31 00:02:57 +08:00 · 1671 次点击
    这是一个创建于 2303 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    说实话还不如建议接口端考虑下动态扩容的问题,另外可参考阿里的一个 sentinel 框架。
    countdown
        10
    countdown  
    OP
       2018-09-01 16:33:27 +08:00
    @night98 多谢。接口端的话,主要是不太好控制。如果接口端性能能有冗余,对于调用方来说肯定方便很多的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 22:58 · PVG 06:58 · LAX 14:58 · JFK 17:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.