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

时间:2011-09-12 05:40:28

标签: java multithreading api scaling

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

  

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

  

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

我们每天收到的请求数量是数百万。

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

其他要点/想法:

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

2 个答案:

答案 0 :(得分:1)

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

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

您能否提供一些有关您认为必须做出此选择的原因的更多信息?

答案 1 :(得分:0)

使用node.js而不是使用大量线程,你可能会更好地使用事件驱动的I / O,但需要注意的是它可能意味着大量的重写以及node.js相当年轻的事实。

SO article可能会引起关注。