hazelcast是一个基于java高可用性和高扩展性的分布式数据组件,他帮助架构师和开发人员根据他们的业务更快的设计和开发高可用和高扩展的应用。
hazelcast支持分布式队列,集合,map,线程池,锁,支持事务处理,分布式的监听和事件,支持动态增加集群节点,动态备份 数据,动态failover,使用起来非常简单,速度非常快,每秒操作数可达到几千次。需要依赖的包非常小,不足1M,执行的效率非常高效,对CPU和内 存很友好。
hazelcast对数据几乎是均匀的分布在每一个节点的,每个节点上有(1/n * 总数据量)+备份的数据量(N是集群中的节点)
如果一个节点宕机了,他的备份副本也拥有相同的数据,将会动态的将数据包括所有权和锁分配给依然活着的节点,所以数据不会丢失。
当一个新的节点加入进去时,新的节点会加载集群中的(1/n*总数据)+备份数据的数据量,减少其他的节点的压力。
没有单一的集群主机或者其他的东西会导致单点故障,集群中的每个节点具有相同的权力和责任,没有节点是超级权限,也不需要额外的依赖其他的机器。
分布式的MAP有一个默认的备份副本,所以当节点宕机后,我们不会丢失数据。备份的操作与put数据进入map时同步进行和返回的,他保证数据已经备份到了其他的节点,在读操作上,他也保证返回最新的实体数据,一致性严格的执行。
hazelcast会将map是中的数据分布在集群中jvm节点中,每一个节点保持着一部分的隔离数据,但在宕机时我们不想丢失数 据,为了保证数据安全,hazelcast允许你配置你需要的的备份节点数,这样,jvm中的数据就会复制到其他的jvm中,hazelcast支持同步 备份和异步备份,同步备份在备份成功之前会阻塞进程,而异步备份是不会阻塞进程的,不需要知道备份的结果。 默认的情况下,Hazelcast会有一个同步的备份,为了保证一致性,默认情况下,读取数据总是从数据的owner节点读取。当然你可以通过改变允许通 过备份节点读数据的配置来给你带好更好的读性能。
hazelcast支持LRU和 LFU的过期策略。hazelcast作为分布式缓存,如果time-to-live 的配置的不是0,那么数据存活的时间超过了time-to-live的时间,将会过期。
hazelcast允许你将数据像关系型数据库一样持久化在硬盘上,当你调用get(key)方法时,如果map的key不存在内存 中,Hazelcast会帮你通过你提供的加载器去加载你需要的数据,当你调用put(key,value)方式,Hazelcast会通过你提供的存储 实现将数据存储在存储器上,如果你配置了write-delay-seconds 值为0,它会直接将你的数据写入存储器中。
如果直接写入,当map.put方法调用并返回时,你可以确定
MapStore.store(key,value)已经成功将数据持久化了。内存中的数据已经更新了。内存中的备份已经成功在其他的JVM中创建了。
如果延后写入,当map.put方法调用并返回时,你可以确定
内存中的数据已经被更新了,内存中的备份已经成功的在其他的JVM中创建了,数据被标记为脏数据,并在配置的write-delay-seconds时间后会被持久化。
hazelcast的查询语句需要将有层次的bean进行扁平化操作。(查询的部分会通过另外一篇博文进行详解)
Hazelcast的nearcache是为了那些对一致性要求并不高的数据而提供的,开启了nearcache功能后,读取的速度 更快,消耗的网络流量会更少,但是这些好处从来都不是免费的,nearcache开启后,jvm将缓存额外的数据,这样会增加内存的消耗,如果数据频繁的 更新,数据失效将会带来资源的消耗。nearcache功能不提供强一致性的数据读取,有可能会读取到脏数据。
Hazelcast的索引会使得查询的速度更快,但是所有的索引必须在map没有任何元素前创建。
转载请注明:学时网 » hazelcast简介