zoukankan      html  css  js  c++  java
  • Hazelcast介绍与使用

    Hazelcast 是一个开源的可嵌入式数据网格(社区版免费,企业版收费)。你可以把它看做是内存数据库,不过它与 Redis 等内存数据库又有些不同。项目地址:http://hazelcast.org/

    Hazelcast 使得 Java 程序员更容易开发分布式计算系统,提供了很多 Java 接口的分布式实现,如:Map, Queue, ExecutorService, Lock, 以及 JCache。它以一个 JAR 包的形式提供服务,只依赖于 Java,并且提供 Java, C/C++, .NET 以及 REST 客户端,因此十分容易使用。

      1 import com.hazelcast.config.Config;
      2 import com.hazelcast.core.Hazelcast;
      3 import com.hazelcast.core.HazelcastInstance;
      4 
      5 import java.util.concurrent.ConcurrentMap;
      6 
      7 public class DistributedMap {
      8     public static void main(String[] args) {
      9         Config config = new Config();
     10         HazelcastInstance h = Hazelcast.newHazelcastInstance(config);
     11         ConcurrentMap<String, String> map = h.getMap("my-distributed-map");
     12         map.put("key", "value");
     13         map.get("key");
     14 
     15         //Concurrent Map methods
     16         map.putIfAbsent("somekey", "somevalue");
     17         map.replace("key", "value", "newvalue");
     18     }
     19 }
     20 

    如何存储数据

    Hazelcast 服务之间是端对端的,没有主从之分,因此也不存在单点故障。集群中所有的节点都存储等量的数据以及进行等量的计算。

    Hazelcast 缺省情况下把数据分为 271 个区。这个值可配置于系统属性 hazelcast.partition.count。 对于一个给定的键,在经过序列号、哈希并对分区总数取模之后能得到此键对应的分区号。所有的分区等量的分布与集群中所有的节点中,每个分区对应的备份也同样分布在集群中。

    下例是拥有2个节点的 Hazelcast 集群:

    2个节点

    黑色字体表示分区,蓝色字体表示备份。节点1存储了1到135分区,这些分区同时备份在节点2中。节点2存储了136到271分区,并备份在节点1中。

    此时如果添加2个节点到集群中,Hazelcast 一个一个的移动分区和备份到新的节点,使得集群数据分布平衡。

    4个节点

    注意实际中分区并不是有顺序的分布,而是随机分布,上面的示例只是为了方便理解。重要的是理解 Hazelcast 平均分布分区以及备份。

    Hazelcast 使用哈希算法进行数据分区。对于一个给定的键(如Map)或者对象名称(如topic和list):

    • 序列化此键或对象名称,得到一个byte数组。
    • 对byte数组进行哈希。 
    • 取模后的值即为分区号。

    每个节点维护一个分区表,存储着分区号与节点之间的对应关系。这样每个节点都知道如何获取数据。

    重分区

    集群中最老的节点(或者说最先启动)负责定时发送分区表到其他节点。这样如果有节点加入或者离开集群,所有的节点也能更新分区表。

    注意 注意: 如果最老的节点挂了,次老节点会接手这个任务。

    这个定时任务时间间隔可配置系统属性 hazelcast.partition.table.send.interval。 缺省值为15秒。

    重分区发生在:

    • 节点加入集群。
    • 节点离开集群。

    此时最老节点会更新分区表,分发,接着集群开始移动分区,或者从备份恢复分区。

    使用方式

    有两种方式:嵌入式和客户端服务器。

    • 嵌入式,Hazelcast 服务器的 jar 包被导入宿主应用程序,服务器启动并存在于各个宿主应用中。优点是可以更低延迟的数据访问。

    嵌入式

    • 客户端服务器,Hazelcast 客户端的 jar 包被导入宿主应用程序,服务器 jar 包独立运行于 JVM 中。优点是更容易调试以及更可靠的性能,最重要的是更好的扩展性。

    客户端服务器

  • 相关阅读:
    [bzoj4025]二分图
    [hdu4010]: Query on The Trees
    [bzoj3514]: Codechef MARCH14 GERALD07加强版
    [hdu3943]K-th Nya Number
    [hdu5632][BC#73 1002]Rikka with Array
    在Eclipse中使用建立使用Gradle做依赖管理的Spring Boot工程
    Spring Boot 添加Shiro支持
    常用Linux命令
    HTML5之API
    JavaScript的客户端存储
  • 原文地址:https://www.cnblogs.com/seasonsluo/p/hazelcast-intro.html
Copyright © 2011-2022 走看看