是否可以创建虚拟机(节点)以在cassandra上获得更好的性能?

时间:2014-03-29 12:18:09

标签: performance cassandra virtual-machine nodes virtualization

我知道Cassandra在设置多个节点方面表现良好。节点越多,性能越好。如果我有两个具有相同硬件的专用服务器,那么我可以在两个虚拟机中创建一些虚拟机以获得更多节点吗?

例如,我有两个具有此规范的专用服务器:

1TB hard drive
64 GB RAM
8 core CPU

然后在它们中创建8个虚拟机(节点)。他们每个人都有:

 ~150GB hard drive
 8 GB RAM
 share 8 core CPU

所以我有16个节点。这两个专用服务器,这16个节点的性能是否优于2个节点? 换句话说,这种权衡的哪一方更好,更多的节点具有更低的硬件或两个更强的节点?

我知道应该进行测试,但我想知道基本上是否合理?

2 个答案:

答案 0 :(得分:2)

添加新节点总是会增加一些开销,他们需要在彼此之间进行通信并同步他们的数据。因此,添加的节点越多,您就越期望通过添加每个节点来增加开销。只有在现有节点数无法处理输入/输出需求的情况下,才会添加更多节点。因为在您描述的情况下,您实际上是在同一个磁盘上编写,实际上通过添加更多节点实际上会降低集群的速度。

想象一下这种情况:你有一台服务器,它接收一些数据,然后将它写在磁盘上。现在想象一下相同的情况,磁盘在两台服务器之间共享,并且它们几乎同时在同一磁盘上写入相同的信息。这两个服务器还使用cpu周期在彼此之间进行通信,以便数据已经写入,以便它们可以同步。我认为这是一个足够充分的信息,可以向你描述为什么你能想到的不是一个好主意。

编辑: 当然,这只是外行人的信息,C *有一个非常好的架构,其中数据实际上是根据算法传播到某个范围的节点(不是所有节点),当你查询特定的密钥时,算法实际上可以告诉你在哪里找到数据。话虽如此,当你添加和删除节点时,新节点必须与他们想要共享“负担”的集群通信,结果,重新计算所谓的“令牌环”发生在数据的结尾可能会被改组,因此可以以可预测的方式访问它。

你可以看看这个:

http://www.datastax.com/dev/blog/upgrading-an-existing-cluster-to-vnodes-2

但总的来说,当节点相互通信时确实存在一些开销,但是如果要查询单个密钥,节点的数量几乎不会对查询速度产生负面或正面的影响。

答案 1 :(得分:1)

“我知道应该进行测试,但我想知道基本上是否合理?”

这将回答你的大多数假设。

使用cassandra的基本优势是可用性。如果您计划只有两台专用服务器,那么您的数据可用性就会出现问号。考虑到最坏的情况,您在任何时间点都只有两个数据副本。

我的目标是在小块中找到一个很好的分割专用设置。一切都归结为您的用例。

1.如果您有大量数据流入并且您认为数据为王(在这种情况下,您需要更多副本来处理失败),我宁愿选择高端分布式设置。

2.如果您正在寻找相反的方法(数据不是您的强项,而您的数据只是您设置的另一部分),您只需去设置您提到的内容即可。

3.如果您有成本限制,并且如果您启动了对您来说很重要的最小数据,请在两个节点中设置复制2(简单策略)和复制1(网络)拓扑)