Hazelcast 简明教程

Hazelcast - Introduction

Distributed In-memory Data Grid

数据网格是分布式缓存的超集。分布式缓存通常仅用于存储和检索跨缓存服务器分布的键值对。然而,数据网格除了支持键值对存储之外,还支持其他功能,例如,

  1. 它支持其他数据结构,如锁、信号量、集合、列表和队列。

  2. 它提供了一种通过丰富的查询语言(例如 SQL)查询存储数据的途径。

  3. 它提供了一个分布式执行引擎,帮助并行操作数据。

Benefits of Hazelcast

  1. Support multiple data structures − Hazelcast 支持与 Map 配合使用多种数据结构。其中一些是锁、信号量、队列、列表等。

  2. Fast R/W access − 鉴于所有数据都在内存中,Hazelcast 提供了非常高速的数据读/写访问。

  3. High availability − Hazelcast 支持跨机器分发数据以及对备份的附加支持。这意味着数据不会存储在单台机器上。因此,即使机器宕机(在分布式环境中经常发生),数据也不会丢失。

  4. High Performance − Hazelcast 提供可用于在多台工作机器间分配工作负载/计算/查询的构造。这意味着计算/查询使用来自多台机器的资源,可极大地减少执行时间。

  5. Easy to use − Hazelcast 实现并扩展了许多 java.util.concurrent 构造,使其非常易于使用并与代码集成。在机器上开始使用 Hazelcast 的配置只需将 Hazelcast jar 添加到我们的类路径中。

Hazelcast vs Other Caches & Key-Value stores

将 Hazelcast 与其他缓存(如 Ehcache、Guava 和 Caffeine)进行比较可能不是很有用。这是因为与其他缓存不同,Hazelcast 是一个分布式缓存,也就是说,它将数据跨机器/JVM 分发。尽管 Hazelcast 也可以在单个 JVM 上很好地工作,但它在分布式环境中更有用。

同样,将其与 MongoDB 之类的数据库进行比较也没有多大用处。这是因为 Hazelcast 主要将数据存储在内存中(尽管它也支持写入磁盘)。因此,它提供了较高的 R/W 速度,但限制在于数据需要存储在内存中。

与其他数据存储不同,Hazelcast 还支持缓存/存储复杂数据类型并提供了查询它们的接口。

然而,可以与 Redis 进行比较,它也提供了类似的功能。

Hazelcast vs Redis

在功能方面,Redis 和 Hazelcast 非常相似。然而,以下几点是 Hazelcast 优于 Redis 的地方−

  1. Built for Distributed Environment from ground-up − 与最初作为单机缓存的 Redis 不同,Hazelcast 从一开始就为了分布式环境而构建。

  2. Simple cluster scale in/out − 对于 Hazelcast,维护添加或删除节点的集群非常简单,例如,添加节点只需使用所需配置启动节点即可。删除节点只需要简单关闭节点。Hazelcast 会自动处理数据的分区等。对 Redis 进行相同的设置并执行上述操作需要更多的预防措施和人工工作。

  3. Less resources needs to support failover − Redis 遵循主-从模式。为了故障转移,Redis 需要额外的资源来设置 Redis Sentinel 。这些 Sentinel 节点负责在原始主节点宕机时将从库提升为主库。在 Hazelcast 中,所有节点被视为平等,节点的故障由其他节点检测到。因此,节点宕机的案例被以相当透明的方式处理,而且不需要任何额外的监控服务器。

  4. Simple Distributed Compute − Hazelcast 及其 EntryProcessor 提供了一个简单的接口,用于将代码发送到数据用于并行处理。这减少了数据在网上的传输。Redis 也支持这一点,但实现这一点需要人们了解 Lua 脚本,这增加额外的学习曲线。