Hazelcast系列(二):hazelcast集成(嵌入式)
Hazelcast系列(三):hazelcast集成(服务器/客户端)
Hazelcast系列(五):Auto-Detection发现机制
Hazelcast系列(十一):Map(三)备份、过期驱逐与内存格式
Hazelcast 是一个开源内存数据网格 (IMDG)。它提供弹性可扩展的分布式内存计算,并被广泛认为是提高应用程序性能的最快且最具可扩展性的方法。更重要的是,Hazelcast 通过提供许多对开发人员友好的 Java 接口(例如 Map、Queue、ExecutorService、Lock 和 JCache)的分布式实现,使分布式查询、计算变得简单。
Hazelcast 具有高度可扩展性和可用性。分布式应用程序可以使用 Hazelcast 进行分布式缓存、同步、集群、处理、发布/订阅消息传递等。
当前,Hazelcast也提供商业版本,分为 Pro 和 Enterprise 。Enterprise 商业版提供了内存存储压缩、热重启持久化、安全套件等额外的功能。
Hazelcast服务模式分为 嵌入型 和 服务器/客户端 。
嵌入型仅需使用对应的 hazelcast.jar 即可开启本地缓存服务,缓存的数据通过序列化后放在 堆内存 中,同业务存储数据耦合。
服务器/客户端模式拆分独立的服务器开启缓存集群,客户端通过 ClientConfig 进行缓存访问。
这里仅和同为key/value的存储数据库 Redis 对比。
Hazelcast | Redis | |
---|---|---|
开发语言 | JAVA | C |
线程 | 多线程,分为3种类型:接收请求、读取数据、写入数据 | 单线程 |
缓存一致性 | 缓存服务提供 write-through 等直写等策略 | 旁路策略,需要额外的线程处理 |
数据存储 | 序列化后存储在堆内存,数据太多会导致垃圾回收器 stop the world | jemalloc内存分配器,经过编码压缩在内 存中 |
备份 | 通过271个分区,每个节点都有自己的主数据,每个节点都有数据备份 | 主从sentinel |
查询 | 基础查询和支持复杂的查询,类SQL查询语言 | 基础查询和通过设计复杂key实现复杂的 查询 |
性能 | 多节点线程越多提升越快 | 单节点CRUD性能较强 |
分布式集群 | 自带的多种发现机制形成集群 | 自带redis-cluster |
脑裂 | 通过限制最小成员数量和合并策略,无法根本解决 | 从节点通信数和通信ACK时间来处理脑裂 ,无法根本解决 |
技术文档 | 文档较少,社区活跃度不高 | 文档非常多,社区非常活跃 |
语言支持 | 相对较少,主要是java | 更多 |
如上所述,Hazelcast 更专注于内存数据管理、分布式计算和查询,而 Redis 是一种更通用的数据存储,具有高级功能和更广泛的语言支持。如果只是作为简单的内存数据库使用,Redis显然更加适合。