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
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号