Hazelcast系列(一):初识hazelcast

系列文章

Hazelcast系列(一):初识hazelcast

Hazelcast系列(二):hazelcast集成

Hazelcast系列(三):hazelcast管理中心

Hazelcast系列(四):Auto-Detection发现机制

Hazelcast系列(五):Multicast发现机制

Hazelcast系列(六): TCP-IP发现机制

目录

前言
特点
优劣势
其他
总结

    

前言

Hazelcast 是一个开源内存数据网格 (IMDG)。它提供弹性可扩展的分布式内存计算,并被广泛认为是提高应用程序性能的最快且最具可扩展性的方法。更重要的是,Hazelcast 通过提供许多对开发人员友好的 Java 接口(例如 Map、Queue、ExecutorService、Lock 和 JCache)的分布式实现,使分布式查询、计算变得简单。

Hazelcast 具有高度可扩展性和可用性。分布式应用程序可以使用 Hazelcast 进行分布式缓存、同步、集群、处理、发布/订阅消息传递等。

当前,Hazelcast也提供商业版本,分为  Pro 和 Enterprise 。Enterprise 商业版提供了内存存储压缩、热重启持久化、安全套件等额外的功能。

Hazelcast服务模式分为 嵌入型服务器/客户端

嵌入型仅需使用对应的 hazelcast.jar 即可开启本地缓存服务,缓存的数据通过序列化后放在 堆内存 中,同业务存储数据耦合。

服务器/客户端模式拆分独立的服务器开启缓存集群,客户端通过 ClientConfig 进行缓存访问。

   

特点

  • Hazelcast简单,单用Java语言编写的,没有其他依赖,直接添加 hazelcast.jar 就可以使用
  • Hazelcast可扩展性好,具有天然的集群优势,通过多种发现模式,自动发现成员并添加到集群
  • Hazelcast速度快,数据存放在内存中,读取和更新非常迅速
  • Hazelcast数据冗余,每个节点都有其他节点的分区数据,成员节点发生故障能快速从备份中恢复
  • Hazelcast提供缓存一致性解决方案,write-throughread-through 等。
  • Hazelcast提供分布式存储、查询和计算,能极大的利用集群中每个服务器CPU和内存空间。

      

优劣势

这里仅和同为key/value的存储数据库 Redis 对比。

Hazelcast VS Redis

Hazelcast Redis
开发语言 JAVA         C
线程 多线程,分为3种类型:接收请求、读取数据、写入数据 单线程
缓存一致性 缓存服务提供 write-through 等直写等策略 旁路策略,需要额外的线程处理
数据存储 序列化后存储在堆内存,数据太多会导致垃圾回收器 stop the world

jemalloc内存分配器,经过编码压缩在内

存中

备份 通过271个分区,每个节点都有自己的主数据,每个节点都有数据备份 主从sentinel
查询 基础查询和支持复杂的查询,类SQL查询语言

基础查询和通过设计复杂key实现复杂的

查询

性能 多节点线程越多提升越快 单节点CRUD性能较强
分布式集群    自带的多种发现机制形成集群 自带redis-cluster
脑裂                 通过限制最小成员数量和合并策略,无法根本解决

从节点通信数和通信ACK时间来处理脑裂

,无法根本解决

技术文档       文档较少,社区活跃度不高 文档非常多,社区非常活跃
语言支持         相对较少,主要是java 更多

     

其他  

  • Hazelcast因为放在堆内存,所以当数据量很大,导致垃圾回收器长时间 Stop The World,会导致整个应用程序不可用
  • Hazelcast Platfrom 是将 Hazelcast IMDG 和 Hazelcast Jet 进行整合合并的统一版本,从5.0 开始
  • 使用 Hazelcast 可以仅使用 Hazalcast.jar 依赖,当然,如果配合 Spring Boot,可以添加hazelcast-spring 依赖,它默认扫描 hazelcast.yaml 并注入 HazelcastInstance 对象
  • Hazelcast 自己提供 Management Center 用于监控和治理整个Hazelcast集群
  • Hazelcast 每个版本 jar 里面都有当前版本所有的配置项文件 hazelcast-full-example.yaml 和 默认配置项 hazelcast-default.yaml,当然,也有客户端的,这对于使用配置项和了解当前版本情况非常有帮助

          

总结

如上所述,Hazelcast 更专注于内存数据管理、分布式计算和查询,而 Redis 是一种更通用的数据存储,具有高级功能和更广泛的语言支持。如果只是作为简单的内存数据库使用,Redis显然更加适合。

你可能感兴趣的:(数据库,Hazelcast,Hazelcast使用,Hazelcast集成)