令牌环算法
对于刚开始使用Cassandra的人来说,所有术语在开始时可能有点让人不知所措。 如果您有关系数据库方面的经验,则可能会熟悉“行”或“主键”之类的一些概念。 但是,其他看起来简单明了的术语通常会让人有些困惑,尤其是与学习Cassandra时看到的一些视觉效果搭配使用时。
例如,从DataStax OpsCenter管理工具中查看以下屏幕截图:
现在来回答这些问题:
- 有多少枚令牌环 ?
- 有几个集群 ?
- 有多少个数据中心 ?
向新用户介绍Cassandra时使用的这张幻灯片怎么样:
如果您想知道,是的,您的数据实际上就是该图中的“来到美国”(完全出于本意)。 现在回答这些相同的问题:
- 有多少枚令牌环 ?
- 有几个集群 ?
- 有多少个数据中心 ?
你回答两个对所有在这两张图片的问题? 如果您做到了,您将不会孤单,但您也不是正确的。 这是一个术语有点混乱的例子。 让我们遍历这些术语,从最后一个开始,然后逐步进行。
数据中心
这是大多数人在开始使用Cassandra之前所熟悉的术语,如果您对上述问题回答了两个 ,那么您不仅是正确的,而且很容易理解这个概念。 在计算世界中,我们倾向于将数据中心视为计算机所在的物理位置。 对于Cassandra中的数据中心来说也是如此,但是不一定必须如此。
在Cassandra中,数据中心只是节点的逻辑分组。 该分组可以基于节点的物理位置。 例如,我们可能有一个“美国东部”和“美国西部”数据中心。 但是它也可以基于物理位置以外的其他东西。 例如,我们可能会设置一个“事务”和“分析”数据中心来运行不同类型的工作负载,但这些数据中心的节点可能在物理上位于同一位置。
那么,Cassandra如何知道哪些节点属于哪个数据中心? 好吧,这超出了本文的讨论范围,但是简短的答案是Cassandra中的一个部件,称为Snitch。 如果您想进一步挖掘,DataStax Academy上对Snitch的解释非常不错。
在大多数情况下,当我们在OpsCenter或上面的幻灯片中查看Cassandra的可视化描述时,节点都是按数据中心分组显示的。
集群
如果您为这个问题回答了两个,我不会怪您。 毕竟, 群集被定义为“一组彼此靠近的事物或人”,并且在这两张图片中,可以肯定看起来好像有两组单独的节点彼此靠近。 但是正如我们刚刚确定的那样,大多数时候我们看到的图片就像我们看到的是按数据中心分组的节点一样。
在Cassandra中,集群指的是跨所有数据中心的所有节点,这些节点是对等的(即彼此知道)。 对于这两个映像,我们都有两个数据中心,它们之间正在发生复制。 因此,尽管有两个数据中心,但是在这两个图像中仅描绘了一个群集。
令牌环
这给我们留下了关于令牌环数量的问题。 我试图通过询问令牌环而不只是环来具体说明。 通常在Cassandra中,术语“环”(本身)与“集群”可互换使用,以指代所有数据中心中的所有节点。 但是,当我们说令牌环时,我们通常指的是Cassandra数据分发中的特定概念。
如果您一直在使用Cassandra,那么现在您知道在创建表时,您可以选择“主键”。 该主键的一部分(通常是第一列或有时是第一组列)称为分区键。 例如,看一下KillrVideo的users表 :
CREATE TABLE users (
userid uuid,
firstname text,
lastname text,
email text,
created_date timestamp,
PRIMARY KEY (userid)
);
在这里,分区键是userid列。 当我们将数据插入该表时,userid的值用于确定Cassandra中的哪些节点将实际存储数据。 选择主键很重要(如最近的一篇博客文章所强调 ),但这与令牌环有什么关系?
好吧,当Cassandra想知道将数据放置在哪里时,它将获取您的Partition Key值并通过一致的哈希函数运行它。 这种一致的哈希函数产生的哈希有时称为令牌。 在Cassandra中,群集中的节点拥有所有可能标记的范围(或存储桶)。
因此,例如,让我们假设我们有一个散列函数,可输出0-99之间的令牌。 这些标记在八节点群集中所有节点之间的分布可能看起来像这样:
现在这是一个真正简化的示例,因为可用的令牌范围很小。 在实际的Cassandra部署中,大多数人都坚持使用默认的Murmur3分区程序 ,该分区程序输出-2 63到2 63 – 1范围内的令牌,但是即使可用范围更大,原理也是相同的。
可用令牌的总范围及其在群集中的分布通常在Cassandra中称为令牌环。 令牌的范围分布在整个群集中 ,每个节点都拥有令牌环的一部分。 因此,即使我们将我们的8节点群集放在上面,并在两个数据中心之间对节点进行逻辑分组,仍然只有一个令牌环。
这真的很难缠住你的大脑,尤其是当您看到上面两个图片时。 在这些图片中,英语单词中肯定有两个“环”。 但是用Cassandra术语来说,即使节点被分组并显示为两个数据中心,也只有一个令牌环(如果我们将该术语与“集群”互换使用,则只有一个“环”)。
结论
如果您在开始使用Cassandra时遇到一些术语上的麻烦,希望这可以帮助您清除一些问题。 我强烈建议您在DataStax Academy上查阅DS201:Apache Cassandra的基础知识,以更深入地研究其中的许多概念。 复制(和复制策略)之类的东西都是建立在此基础之上的,因此理解这些概念对于成为Cassandra专家可能有很长的路要走。
翻译自: https://www.javacodegeeks.com/2016/04/one-token-ring-rule.html
令牌环算法