【发布时间】:2011-11-15 01:42:19
【问题描述】:
我们有一个系统,它给出一批请求,对外部 3rd 方 API 进行等量调用。鉴于这是一个 I/O 绑定任务,我们目前使用大小为 20 的缓存线程池来服务这些请求。除上述以外,还有以下解决方案:
使用更少的机器和更多的内核(更少的上下文切换,能够支持更多的并发线程)
或
利用商品/廉价硬件(披萨盒)使用更多机器
我们每天收到的请求数量约为数百万。
我们使用的是 Java,所以这里的线程是内核,而不是“绿色”。
其他观点/想法:
- Hadoop 通常用于解决这种性质的问题,但这需要实时而不是典型的离线数据挖掘。
- API 请求平均需要 200 毫秒到 2 秒
- 请求之间没有共享状态
- 有问题的第 3 方能够处理的请求超出了我们可能触发的数量(付款供应商)。
【问题讨论】:
-
你有共享状态,用来处理请求吗?如果是这样,它的变化频率如何?这个共享状态的大小是多少?
-
第 3 方 api 有什么限制?如果您调用的 API 仍然是瓶颈,那么扩展您的堆栈是没有意义的。您可以缓存从它接收到的数据,或者使用一次调用服务/同时提供多个客户端的数据吗?
-
编辑了我原来的帖子来回答上面的问题。调用是完全独立的,所以没有数据需要缓存。
标签: java multithreading api scaling