hazelcast学习笔记---sharding与cluster

     hazelcast的目标是千亿级的缓存系统,在这样的系统里,sharding和cluster是必不可少的话题.

     1.sharding:

      hazelcast的sharding使用的是传统的hash+分片的技术.hazelcast服务器将缓存默认分为271个partitions,对于要存入hazelcast缓存的内容,首先需要进行如下几步处理:

          a.针对key序列化

          b.求hash值

          c.用271对hash进行mode,得出key应该存放在哪个partition里面.

     2.cluster

     cluster的一些基本技术有:节点发现,数据迁移,数据安全等.在hazelcast里,节点发现采用的是自动发现的理念,尽量不使用配置;hazelcast对数据迁移的处理核心是partition表的维护;对于数据容错,一方面,cluster的中心采用的是年龄为大机制,谁先启动谁是中心节点,另一方面,每个partition的数据不只是存在一台服务器上,还在另外一台机器上有一个备份,如果其中一台宕掉了,另外一台里面备份数据能够用来为整个cluster做repartitioning,而不至于数据丢失.

      2.1 节点发现

          hazelcast目前的版本支持三种类型的发现机制:

       2.1.1 multicast

          当发现机制配置为multicast 时,hazelcast会定时对局域网内可达到的机器进行广播,通知其他机器自己的存在,并期望网内的其他hazelcast服务器返回一个回应,从而确定自己不是hazelcast cluster中最老的那位(即选择cluster的leader)。

   <network>
        <join>
            <multicast enabled="true">
                <multicast-group>224.2.2.3multicast-group>
                <multicast-port>54327multicast-port>
                <multicast-time-to-live>32multicast-time-to-live>
                <multicast-timeout-seconds>2multicast-timeout-seconds>
                <trusted-interfaces>
                   <interface>192.168.1.102interface>
                trusted-interfaces>   
            multicast>
            <tcp-ip enabled="false">
            tcp-ip>
            <aws enabled="false">
            aws>
        join>
   <network>

       2.1.2 TCP/IP 

     使用multicast配置简单,但一个,当hazelcast cluster规模比较大时,广播占用的带宽可能会比较受影响,另一个,广播的范围有限,cluster的服务器可能会分布在广播难以达到的地方。这时TCP/IP是一个较好的选择。

<hazelcast>
  ...
  <network>
    ...
    <join>
      <multicast enabled="false">
      multicast>
      <tcp-ip enabled="true">
        <member>machine1member>
        <member>machine2member>
        <member>machine3:5799member>
        <member>192.168.1.0-7member>
        <member>192.168.1.21member>
      tcp-ip>
      ...
    join>
    ...
  network>
  ...
hazelcast>

       2.1.3 EC2 Cloud

     这是基于亚马逊云服务的一种发现机制,有点类似于zookeeper的意思。在分布式cluster中,EC2 cloud作为一个中介,所有cluster都与之进行通信,寻找cluster中其他的hazelcast成员。

<join>
  <multicast enabled="false">
  multicast>
  <tcp-ip enabled="false">
  tcp-ip>
  <aws enabled="true">
    <access-key>my-access-keyaccess-key>
    <secret-key>my-secret-keysecret-key>
    <iam-role>s3accessiam-role>
    <region>us-west-1region>
    <host-header>ec2.amazonaws.comhost-header>
    <security-group-name>hazelcast-sgsecurity-group-name>
    <tag-key>typetag-key>
    <tag-value>hz-nodestag-value>
  aws>
join>

      2.2 数据安全

     当cluster的hazelcast服务器个数只有一个时,所有271个partitions全部放在这个服务器上:

          

                      n=1

      当cluster的hazelcast服务器个数大于一个时,271个partitions会基本平均分配到这n个服务器上去,并且,每个partition在另外的机器上会有一个拷贝的副本:

          hazelcast学习笔记---sharding与cluster_第1张图片    

                                        n=2  

             hazelcast学习笔记---sharding与cluster_第2张图片

                                                                                  n=4                                                                    
                           
     这样,当一台机器宕机后,并不会影响到整个集群数据的运行,如果两台机器宕机了,而这两台机器的partition(自己的partition+备份的partition)没有交集,也不会影响到整个cluster的运行。

2.3.数据迁移

     cluster中每个节点都维护着一份自己的partition表。当新增或移除一个节点时,cluster中的leader负责调整整个cluster的partition的分配情况






你可能感兴趣的:(hazelcast)