Couchbase - 通过Java SDK批量插入 - 如何扩展Akka?

时间:2015-04-21 21:45:49

标签: java akka couchbase

我的任务是扩展我需要在Couchbase服务器中进行大量插入的系统。我顺便使用Couchbase Server 2.5和Couchbase Java Client 1.4.4

我希望从邮件队列中收到大约100K的邮件,然后我将其关闭,然后尽快将这些邮件保存到Couchbase中。我打算通过利用像Akka这样的并发框架来引入并发性。我打算为每条消息产生新的演员并坚持下去,所以在任何给定的时间点,理论上我可能会有> 100K演员住在系统中,同时尝试通过Couchbase客户端保留消息。

几个问题:

  1. 我应该如何考虑资源争用?假设一台4核机器,理论上只能以真正的并行方式进行4次写入。
  2. 假设我的Couchbase群集在优秀的硬件上运行,并且应该能够非常快速地扩展到> 100K的请求。我的理论是,我可能会在客户端遇到瓶颈,如果我这样做......
  3. 我应该如何扩展我的客户端以便能够执行那么多(或更多写入),而无需超时?有没有办法在客户端调整我的线程池?
  4. 最后,我是否应该采用某种方式限制我的写作,以便卸载"压力"在couchcbase客户端?
  5. 在考虑如何正确,优雅,无意外错误/资源泄漏时,我还缺少什么?
  6. 谢谢!

1 个答案:

答案 0 :(得分:2)

首先,在撰写本文时,您应该切换到新的Java客户端 - 2.1.2。它的速度更快,依赖性更低,并且更易于推理并发性。

  1. 这并不完全正确,因为客户端在内部缓冲操作并且有多个IO线程批量处理工作队列。因此,您不限于并发写入中的核心数。在这里查看Java批量插入示例:http://docs.couchbase.com/developer/java-2.1/documents-bulk.html
  2. 您可能会在客户端遇到CPU瓶颈,特别是如果您要对序列化对象。这里没有神奇的解决方案,你需要扩展它。
  3. 虽然您可以配置客户端工作线程计数和各种其他参数,但您应首先使用默认设置进行尝试。如果您看到某些内容无效,您可以尝试稍后进行诊断和调整,但通常默认设置适用于大多数情况。此外,由于客户端缓冲操作,因此通常不需要执行任何手动客户端池。您要小心创建太多客户端实例;例如,你绝对不会在你的案例中为每个演员创建一个实例。您可以在此处找到所有高级配置选项的文档:http://docs.couchbase.com/developer/java-2.1/env-config.html
  4. 2.x Java客户端实际上在高负载和故障情况下抛出BackpressureException。您需要处理它,可能需要进行某种指数退避重试。
  5. 切换到2.x客户端版本,阅读所有文档(http://docs.couchbase.com/developer/java-2.1/java-intro.html):)