zhangjunjia / zhangjunjia.github.io

blog of zhangjunjia
https://zhangjunjia.github.io/
0 stars 1 forks source link

chronicle-map与apache ignite的使用场景及限制性 #19

Open zhangjunjia opened 4 years ago

zhangjunjia commented 4 years ago

现工作负责的一个datanode项目,其本质是一个巨大的分布式hashmap。其含有亿级别的key,value则是用户信息UserInfo。通过hash将该巨大的hashmap分成了多个partition,然后分布到50多台机器上,即每台机器有1至3个partition。partition的数据存放于机器上datanode进程的Java Heap中,这有几个好处:

但这也带来了一些坏处:

上一篇文章浅谈有状态Java服务热部署方案探讨了解决这个问题的一些方案,本文继续讨论此问题——将Java Heap做offload的方案。

chronicle-map

chronicle-map是Chronicle Software公司开源的一款堆外hashmap,它支持两种内存模式:

第二种模式显然比较适合做Java Heap的offload。但对我们的datanode业务而言,Chronicle-Map存在着几个问题:

其实第一个问题也不是不能规避。我们可以自行维护一套内存地址到Java数据结构(UserInfo)的映射关系,在访问第N个属性时再去按需反序列化该属性。但这样又带了新问题,按下葫芦浮起瓢:

综上,chronicle-map虽然好但不适合我们。

apache ignite

Apache Ignite® is a horizontally scalable, fault-tolerant distributed in-memory computing platform for building real-time applications that can process terabytes of data with in-memory speed.

ignite是apache顶级项目之一,上文是其官方定义,它可以和以下应用扮演同样角色:

ignite支持以下几种模式:

ignite还有其他强大的特性:

总的来讲,ignite非常强悍而且功能特性非常的多,且有很多production上应用的示例。但ignite的以下几点不符合我方的业务需求: