ignite源码解析

节点间通信:

ServerImpl.java

节点间通信,使用ping检测节点是否存活:

ServerImpl.java

​ 《|》

pingNode(UUID nodeId)

​ 《|》

pingNode(TcpDiscoveryNode node)

​ 《|》

pingNode(InetSocketAddress addr, UUID nodeId, UUID clientNodeId)

​ 《|》

如果是已经加入的节点: ping(IgniteSpiOperationTimeoutHelper timeoutHelper)

如果是新节点,使用socket实现ping检测节点状态;


新节点加入过程:

GridManagerAdapter.class

​ 《|》

startSpi()

​ 《|》

TcpDiscoverySpi.spiStart(String igniteInstanceName)

​ 《|》

ServerImpl.spiStart(String igniteInstanceName)

​ 《|》

joinTopology()

​ 《|》

sendJoinRequestMessage(DiscoveryDataPacket discoveryData)


再平衡相关部分:

IgniteSystemProperties.class   

   /**
     * Time interval for calculating rebalance rate statistics, in milliseconds. Defaults to 60000.
     */
    public static final String IGNITE_REBALANCE_STATISTICS_TIME_INTERVAL = "IGNITE_REBALANCE_STATISTICS_TIME_INTERVAL";
		
CacheMetricsImpl.REBALANCE_RATE_INTERVAL

CacheMetricsImpl.getEstimatedRebalancingFinishTime()

CacheMetricsImpl.rebalancingKeysRate

CacheMetricsImpl.startRebalance

一致性映射部分

Affinity.java

​ 《|》

mapKeyToNode(K key)

​ 《|》

GridCacheAffinityImpl.mapKeysToNodes(@Nullable Collection<? extends K> keys)

​ 《|》

GridCacheAffinityManager.primaryByKey

​ 《|》

partition(Object key, boolean useKeyPart)

​ 《|》

RendezvousAffinityFunction.partition(Object key)

追踪到其哈希算法如下:

((h = key.hashCode()) ^ (h >>> 16)) & mask

其中mask字段的含义如下

    /** Mask to use in calculation when partitions count is power of 2. */
	/** 当分区数是2的次幂的时候,掩码mask用于计算,这里测试的时候mask的值为1023,partitions从0开始*/
    private int mask = -1;

(h = key.hashCode()) ^ (h >>> 16)这种用法与jdk中HashMap.java中的hash(Object key)实现方式一样,

其原理如下:

h = key.hashCode():第一步是得到key的hashcode值;

h ^ (h >>> 16):将键的hashcode的高16位异或低16位(高位运算),这样即使数组table的length比较小的时候,也能保证高低Bit都参与到Hash的计算中,同时不会有太大的开销;

& mask:其中mask是partitions数量减一,这个就等效于对partitions做取模运算(%),能这么做的前提是partitions是2的n次幂,取模运算采用位运算性能更好。

参考链接: https://www.cnblogs.com/rese-t/p/8016642.html


一致性id

Ignition.start(IgniteConfiguration cfg)

​ 《|》

IgniteKernal.start(...)

​ 《|》

startProcessor(new PdsConsistentIdProcessor(ctx));

​ 《|》


一致性哈希

GridConsistentHash.java

http://www.jasongj.com/java/concurrenthashmap/

https://www.cnblogs.com/slwenyi/p/6393808.html


posted @ 2022-10-18 20:16  堕落门徒  阅读(189)  评论(0编辑  收藏  举报