Cassandra源码学习:机架感应策略
发布时间:2020-12-13 13:46:50 所属栏目:百科 来源:网络整理
导读:Snitches概述 Cassandra提供了Snitches功能,可以知道集群中的每个节点所属数据中心和机架。所有机架感应策略都实现了相同的接口IEndpointSnitch。先来看看Snitches的类图: IEndpointSnitch接口中提供了比较实用的方法: [java] view plain copy print ? //
Snitches概述
Cassandra提供了Snitches功能,可以知道集群中的每个节点所属数据中心和机架。所有机架感应策略都实现了相同的接口IEndpointSnitch。先来看看Snitches的类图: IEndpointSnitch接口中提供了比较实用的方法:
(1)SimpleSnitch:这种策略不能识别数据中心和机架信息,适合在单数据中心使用; (2)NetworkTopologySnitch:这种策略提供了网络拓扑结构,以便更高效地消息路由; (3)DynamicEndpointSnitch:这种策略可以记录节点之间通信时间间隔,记录节点之间通信速度,从而达到动态选择最合适节点的目的。 NetworkTopologySnitch
此策略提供了网络拓扑结构,因此可以知道节点之间的远近关系,该抽象类实现了compareEndpoints方法,代码如下:
2、到这里表示3个节点ip均不相同,与1一样,比较数据中心,然后比较机架;
3、到这里表示同数据中心,同机架,返回0.
这里用到了两个方法:getDatacenter和getRack,不同的子类实现不同。AbstractNetworkTopologySnitch有四个子类实现:
PropertyFileSnitch
使用属性文件配置拓扑结构,该文件位于conf/cassandra-topology.properties中,配置类似
[html]
GossipingPropertyFileSnitch
通过属性文件(conf/cassandra-rackdc.properties)定义当前节点的数据中心和机架,并使用Gossip协议传播到其他节点,当cassandra-topology.properties文件存在的时候,cassandra-rackdc.properties只是做为一个备用。配置类似:
该策略便于快速传播一个节点的变化,一般和PropertyFileSnitch配合使用。其获取数据中心的代码如下:
2、不是本机的情况:如果接收到了Gossip消息,直接返回Gossip消息中的数据中心;否则返回本机conf/cassandra-topology.properties文件中的数据中心;
机架的获取与数据中心获取类似。
RackInferringSnitch
其实现与PropertyFileSnitch类似,根据ip地址确定数据中心和机架,如图所示:
第二个8位决定数据中心,第三个8位决定机架。
Ec2Snitch
主要使用在单区域数据中心,使用私有ip地址的情况。
DynamicEndpointSnitch
该策略通过监控两个节点的通信时间,来决定最佳选择方案,该策略是默认使用的,也是Cassandra推荐的。该策略和失败检测密切相关,Cassandra失败检测原理基于Hayashibara的一篇论文(http://ddg.jaist.ac.jp/pub/HDY+04.pdf).
参考资料:
http://www.datastax.com/documentation/cassandra/2.0/cassandra/architecture/architectureSnitchesAbout_c.html
源码下载地址git://git.apache.org/cassandra.git
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |