我在EC2上设置了一个5节点的Cassandra集群,所有这些集群都在同一个区域内。
如果我通过cqlsh(9160)连接,查询会在一秒钟内响应。
当我通过开发人员中心连接或使用本机Java驱动程序(两者都使用端口9042)时,查询需要20秒以上才能响应。
他们一直在同样的21秒区域做出回应。永远不要快,然后慢。
我已经在EC2上设置了一些Cassandra集群,之前已经看过,但不知道如何解决这个问题。最后一次,我取消了群集并构建了一个新群集,端口9042的响应时间很好。
任何有关如何调试或修复此问题的帮助都将不胜感激,谢谢。
答案 0 :(得分:2)
当前版本的DevCenter旨在支持运行(冗长)CQL脚本的主要场景(相对于一个接一个地执行查询的交互式控制台)。 DevCenter用作DataStax Java driver for Cassandra的底层连接器。
对于上述场景,为了确保没有“冲突”,为每次执行创建一个新的Session
。初始化Session
时,驱动程序会执行自动节点发现,创建连接池等。基本上,它会执行大量准备工作。根据从客户端计算机到EC2节点的延迟,群集的大小以及这些节点的配置(请参阅connection requirements),此初始化阶段可能非常昂贵。
您可以想象,准备所花费的时间并不代表运行DDL脚本的大部分时间以及相当大的插入/更新大小。但对于交互式场景,它将导致次优行为(您正在描述的行为)
DevCenter的下一个版本将解决交互式场景并对其进行优化,以便用户体验符合您的期望。在我们的优先事项列表中支持这种情况非常重要。
答案 1 :(得分:1)
底层Java驱动程序在最初连接时获取整个群集拓扑。这使它能够自动连接到群集中的任何节点。在EC2上,它只获取私有地址,尝试每个地址,然后超时。然后它通过初始连接发送请求