数据斯塔克斯Java驱动程序能否在EE容器中安全使用?

7

com.datastax.driver.core.Session类的文档说明:

(...) 每个会话维护多个与集群节点的连接 (...)。

然而,针对EE环境的一般建议是将池化和线程管理留给容器。

在我看来,DataStax驱动程序并不主要针对EE环境,违反了这个规则。这让我担心该驱动程序是否可以安全地用于我的EE应用程序。

2个回答

5

拥有多个连接的优势在于Java客户端可以识别令牌(token)。这意味着它知道集群中数据在哪里,因此它可以向正确的节点发送查询,从而避免了不必要的向其它节点查找自己没有的数据。此外,客户端了解集群及其状态,并且可以将失败的请求透明地重定向到其他节点。如果您仅维护与单个机器的一个连接,那么您的应用程序将毫无头绪地发送请求。


5
我确实记得那个建议。我认为这是一个旧的推荐,旨在强调在大多数情况下应用程序不应尝试为容器(这里的关键词是“容器”)进行额外的线程管理。同时,搞乱线程可能会导致服务器资源过度利用,在单/双核时代这非常重要。
无论如何,今天我们有:
1.更多的内核
2.使用异步模型的更多应用程序
DataStax驱动程序允许您配置最大线程池大小,以便您可以将事物控制在自己手中。
总之,我认为使用驱动程序应该是相当安全的。您可以根据应用程序需求和服务器资源调整线程池。

我使用javax.inject.Singleton注解来创建com.datastax.driver.core.Session实例,从而将应用程序中的Cassandra会话对象数量限制为一个,而不会限制并发性(javax.ejb.Singleton会对实例强制执行锁定)。 - Schroenser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接