HazelCast分布式Map介绍和分析

       HazelCast是一个高度可扩展的数据分发和集群平台,可以帮助架构师和开发者更容易设计和快速开发出高可扩展性的的实时应用,它提供的功能之一就是分布式实现java.util.{Queue,Set,List,Map}。

       分布式Map使用方法如下:

HazelCast分布式Map介绍和分析_第1张图片

        根据官方介绍,数据是分布式分布式的保存在集群中某台机器上,而且会有备份,这样即使某台机器突然down掉,数据也不会丢失,那么它是如何实现的呢,现在将源码分析如下:

       首先查看IMap的类结构如下:

HazelCast分布式Map介绍和分析_第2张图片

        可以看出IMap其实是继承了JDK的ConcurrentMap,因此它是一种线程安全的Map.继承LegacyAsyncMap说明此Map是可以进行异步获取返回结果的,而且它继承自DistributedObject接口,DistributedObject是分布式Map,分布式Set,分布式Queue等的超类,它具有PartitionKey,HazelCast使用它来进行分区。

        其次debug源码,来分析下Map数据的存储和获取原理。

a)HazelCast每一个应用节点启动都是一个Node,node里面包含了本节点对应的所有信息和Service,例如下图包含的这些service

HazelCast分布式Map介绍和分析_第3张图片

我们getMap的过程其实就是从集群内各个Node搜索其保存在哪里的过程,由于IMap其实是一个DistributeObject,因此本质上就是一个getDistributedObject的过程,如下图所示:

HazelCast分布式Map介绍和分析_第4张图片
如上图所示程序先从当前node获取到本机到ProxyService

b)使用代理ProxyService找到 继承了DistributedObject的IMap.

ProxyService是通过注册在内存的ProxyRegistry来进行处理的,如下图所示

HazelCast分布式Map介绍和分析_第5张图片

ProxyRegistry来进行寻找或者生成一个DistributedObject.

c)ProxyRegistry内部包含了一个RemoteService,由remoteService来进行远程或者本地的调用来获取DistributedObject,如下图所示,

HazelCast分布式Map介绍和分析_第6张图片

由于我们寻找的是一个Map,所以就会进入MapRemoteService的逻辑

createDistributedObject本质上返回的是一个Map的代理类MapProxyImpl,如下图所示

HazelCast分布式Map介绍和分析_第7张图片

d)MapProxyImpl是个什么呢,且看类图如下:

HazelCast分布式Map介绍和分析_第8张图片

看到没,本质上还是一个DistributedObject,只不过相关的获取数据,put数据都是在MapProxySupport内部做的。以get数据为例,

HazelCast分布式Map介绍和分析_第9张图片

需要先将key序列化byte数组,然后使用getInternal方法获取到key对应的value,然后使用toObject将byte数组反序列化为内存对象。后续的细节后面在分析!

@程序员  @IT互联网

欢迎关注我的微信公众号:

HazelCast分布式Map介绍和分析_第10张图片

你可能感兴趣的:(HazelCast分布式Map介绍和分析)