繁体   English   中英

Couchbase-通过Java SDK批量插入-如何使用Akka进行缩放?

[英]Couchbase - Bulk insert via Java SDK - How to scale with Akka?

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

我希望从消息队列中接收大约100K消息,然后将它们拉出,然后尽快将这些消息保存到Couchbase中。 我打算通过利用像Akka这样的并发框架来引入并发。 我打算为每条消息生成新角色并保留,因此从理论上讲,在任何给定时间点,系统中都将有超过100K个actor,所有这些角色同时尝试通过Couchbase客户端来保留消息。

几个问题:

  1. 我在这里应该如何考虑资源争用? 假设一个4核计算机,理论上只能以真正的并行方式进行4次写入。
  2. 假设我的Couchbase集群运行在出色的硬件上,并且应该能够迅速扩展到100K以上的请求。 我的理论是,我可能会遇到客户端方面的瓶颈,如果这样做的话...
  3. 我应该如何扩展我的客户端,使其能够执行这么多(或更多的写入)操作而不会超时? 有什么办法可以在客户端调整我的线程池?
  4. 最后,我是否应该以某种方式来限制我的写入,从而减轻“ couchecbase”客户端的“压力”?
  5. 在考虑如何正确,优雅地进行扩展以免受意外错误/资源泄漏的影响时,我还缺少什么?

谢谢!

首先,在撰写本文时,您应该真正切换到新的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 ):)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM