Hazelcast - 简介
分布式内存数据网格
数据网格是分布式缓存的超集。分布式缓存通常仅用于存储和检索分布在缓存服务器上的键值对。然而,数据网格除了支持键值对的存储之外,还支持其他功能,例如:
它支持其他数据结构,如锁、信号量、集合、列表和队列。
它提供了一种通过丰富的查询语言(例如SQL)来查询存储的数据的方法。
它提供了一个分布式执行引擎,有助于并行操作数据。
Hazelcast 的好处
支持多种数据结构- Hazelcast 支持与 Map 一起使用多种数据结构。一些例子是锁、信号量、队列、列表等。
快速读/写访问- 鉴于所有数据都在内存中,Hazelcast 提供非常高速的数据读/写访问。
高可用性- Hazelcast 支持跨机器分发数据以及额外的备份支持。这意味着数据不存储在单台机器上。因此,即使分布式环境中经常发生机器宕机,数据也不会丢失。
高性能- Hazelcast 提供了可用于在多个工作机器之间分配工作负载/计算/查询的结构。这意味着计算/查询使用来自多台机器的资源,从而大大减少了执行时间。
易于使用- Hazelcast 实现并扩展了许多 java.util.concurrent 构造,这使得它非常易于使用并与代码集成。在机器上开始使用 Hazelcast 的配置只需将 Hazelcast jar 添加到我们的类路径中。
Hazelcast 与其他缓存和键值存储
将 Hazelcast 与 Ehcache、Guava 和 Caffeine 等其他缓存进行比较可能不是很有用。这是因为,与其他缓存不同,Hazelcast 是一个分布式缓存,也就是说,它将数据分布在机器/JVM 之间。虽然 Hazelcast 在单个 JVM 上也可以很好地工作,但是,它在分布式环境中更有用。
同样,与 MongoDB 这样的数据库相比,也没有多大用处。这是因为,Hazelcast 主要将数据存储在内存中(尽管它也支持写入磁盘)。因此,它提供了较高的读/写速度,但数据需要存储在内存中。
与其他数据存储不同,Hazelcast 还支持缓存/存储复杂的数据类型,并提供查询它们的接口。
不过,可以与Redis进行比较,Redis 也提供类似的功能。
Hazelcast 与 Redis
从功能上来说,Redis 和 Hazelcast 非常相似。然而,以下是 Hazelcast 优于 Redis 的要点 -
从头开始为分布式环境构建- 与以单机缓存开始的 Redis 不同,Hazelcast 从一开始就是为分布式环境构建的。
简单的集群扩展/扩展- 在 Hazelcast 的情况下,维护添加或删除节点的集群非常简单,例如,添加节点只需启动具有所需配置的节点即可。删除节点需要简单地关闭该节点。Hazelcast 自动处理数据分区等。对 Redis 进行相同的设置并执行上述操作需要更多的预防措施和手动工作。
支持故障转移所需的资源更少- Redis 遵循主从方法。对于故障转移,Redis 需要额外的资源来设置Redis Sentinel。如果原始主节点出现故障,这些哨兵节点负责将从属节点提升为主节点。在 Hazelcast 中,所有节点都被平等对待,一个节点的故障会被其他节点检测到。因此,节点宕机的情况处理得非常透明,而且也不需要任何额外的监控服务器。
简单分布式计算- Hazelcast 及其EntryProcessor提供了一个简单的接口,用于将代码发送到数据以进行并行处理。这减少了线路上的数据传输。Redis 也支持这一点,但是,实现这一点需要了解 Lua 脚本,这会增加额外的学习曲线。