为大量外部API请求扩展软件/硬件?

smo*_*nky 5 java api scaling multithreading

我们有一个系统给出一批请求,对外部第三方API进行相同数量的调用.鉴于这是一个I/O绑定任务,我们目前使用大小为20的缓存线程池来为这些请求提供服务.除此之外,解决方案是:

使用具有更多内核的更少机器(更少上下文切换,能够支持更多并发线程)

要么

利用商品/廉价硬件(披萨盒)使用更多机器

我们每天收到的请求数量大约为数百万.

我们使用的是Java,因此这里的线程是内核,而不是"绿色".

其他要点/想法:

  • Hadoop通常用于此类问题,但这需要实时与定型离线数据挖掘.
  • API请求平均需要200毫秒到2秒
  • 请求之间没有共享状态
  • 有问题的第三方能够提供比我们可能解雇的更多请求(支付供应商).

Sco*_*amb 1

对我来说,您根本不需要更多资源(更大的机器或更多机器),这并不明显。如果您谈论的是一天内最多 1000 万个请求,每个请求最多花费 2 秒,这意味着:

  • 每秒约 110 个请求。那没那么快。要求特别大吗?还是有大爆发?除了分派到第三方 API 之外,您是否还进行繁重的处理?到目前为止,您还没有向我提供任何信息,使我相信不可能在单个核心上运行您的整个服务。(如果您想要 n+2 冗余,请将其称为三台最小的机器。)
  • 平均约 220 个活跃请求。同样,对于单台机器来说,即使使用(池化)每个请求线程模型,这似乎也没有问题。为什么不扩大你的泳池规模然后就到此为止呢?这些真的爆吗?(您是否有非常严格的延迟/可靠性要求?)它们在活动时是否需要大量 RAM?

您能否提供更多信息来说明为什么您认为必须做出这一选择?