有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

针对大量外部API请求的java扩展软件/硬件?

我们有一个系统,在给定一批请求的情况下,对外部第三方API进行等量的调用。鉴于这是一个I/O绑定的任务,我们目前使用大小为20的缓存线程池来服务这些请求。除上述之外,解决方案是:

Use fewer machines with more cores (less context-switching, capable of supporting more concurrent threads)

或者

Use more machines by leveraging commodity/cheap hardware (pizza boxes)

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

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

其他观点/想法:

  • Hadoop通常用于解决这种性质的问题,但与传统的离线数据挖掘相比,这需要是实时的
  • API请求平均需要200毫秒到2秒的时间
  • 请求之间没有共享状态
  • 有问题的第三方能够处理比我们可能解雇的(支付供应商)更多的请求

共 (2) 个答案

  1. # 1 楼答案

    我并不清楚你需要更多的资源(更大的机器或更多的机器)。如果你说的是一天内最多1000万个请求,每个请求最多耗时2秒,这意味着:

    • 每秒约110个请求。那没那么快。请求量特别大吗?还是有大爆发?除了发送到第三方API之外,您是否还在进行繁重的处理?到目前为止,你还没有给我任何信息,让我相信不可能在一个核心上运行你的整个服务。(如果你想拥有n+2冗余,可以称之为三台最小的机器。)
    • 平均约220个活动请求。同样,对于一台机器来说,这似乎没有问题,即使是每个请求都有一个(池)线程模型。你为什么不扩大你的游泳池规模,今天就到此为止?这些真的很火爆吗?(您是否有非常严格的延迟/可靠性要求?)他们需要大量的内存吗

    你能提供一些更多的信息来说明为什么你认为你必须做出这个选择吗

  2. # 2 楼答案

    与使用大量线程相比,使用node.js的事件驱动I/O可能会更好,但需要注意的是,这可能意味着需要进行大量的重写,并且节点已被删除。js相当年轻

    这个SO article可能很有趣