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 进行比较。

Hazelcast 与 Redis

就功能而言,Redis 和 Hazelcast 非常相似。 不过,以下是 Hazelcast 优于 Redis 的几点 −

  • 从头开始为分布式环境构建 − 与 Redis 最初是作为单机缓存不同,Hazelcast 从一开始就是为分布式环境构建的。

  • 简单集群缩放 − 在 Hazelcast 中,维护添加或删除节点的集群非常简单,例如,添加节点只需启动具有所需配置的节点即可。 删除节点需要简单地关闭该节点。 Hazelcast 自动处理数据分区等。对 Redis 进行相同的设置并执行上述操作需要更多的预防措施和手动工作。

  • 支持故障转移所需的资源更少 − Redis 遵循主从方式。 对于故障转移,Redis 需要额外的资源来设置 Redis Sentinel。 如果原始主节点出现故障,这些哨兵节点负责将从属节点提升为主节点。 在 Hazelcast 中,所有节点都被平等对待,一个节点的故障会被其他节点检测到。 因此,节点发生故障的情况处理得非常透明,而且也不需要任何额外的监控服务器。

  • 简单分布式计算 − Hazelcast 及其 EntryProcessor 提供了一个简单的接口来将代码发送到数据以进行并行处理。 这减少了线路上的数据传输。 Redis 也支持这一点,但是,实现这一点需要了解 Lua 脚本,这会增加额外的学习曲线。