集群部署
JDG的缓存模式包括本地(Local)模式和集群(Clustered)模式。本项目采用多节点的Clustered模式部署,数据在多个节点的子集间进行复制,而不是同步复制到所有的节点。使用子集复制可以提升容错的效率但对可伸缩性不会造成太大影响。在使用Clustered模式部署之前,应该配置JGroup。
1. 使用UDP方式广播。
l 适用于大的集群(超过100节点);
l 适用于Invalidation和Replication模式;
l 提高socket通信的效率。
2. 使用TCP方式广播。
更适合于distribution模式的小规模(少于100节点)的集群,这时因为TCP协议在点对点通信中更加高效。
Clustered模式又分为Invalidation、Replication和Distribution模式。
Distribution模式
JDG的Distribution模式可以存储缓存数据在集群的子集节点,而不是存储数据到每一个节点中。通常存储到多于1个节点来提供数据冗余和容错。
Distribution模式使用一致性Hash算法从集群中选择存储数据的节点,一致性Hash算法配置为一个缓存数据存储到多个副本。副本数的设置需要平衡性能和容错,过多的副本会影响性能而过少的副本会造成节点失效时丢失数据。
在Distribution模式中,一个put操作会执行num_copies次远程调用,同样在任意节点的get操作会执行至少一次的远程调用。实际上,get操作甚至也会执行num_copies次远程调用,但它们是并行的,只要有一个返回,结果就会被返回给调用者。
读一致性
由于get操作是并行从多个节点取数并使用第一个返回的结果,在使用异步方式时可能会导致数据的不一致。注意这种情况只会出现在异步调用方式,如果是同步方式,则不会出现读不一致。
配置缓存容器和缓存
JDG的Cache在使用时,必须在standalone/configuration/clustered.xml配置文件中设置要使用的Cache配置。如果客户端访问了未配置命名的Cache,将视为非法操作。
在<subsystemxmlns="urn:infinispan:server:core:5.2"default-cache-container="clustered"> …… </subsystem>中配置cache-container和distributed-cache,本项目使用分布式缓存模式。
节点<cache-containername="clustered" default-cache="default">中增加对Cache的配置节点,如下面的名称为default的cache(默认缓存配置):
<cache-container name="clustered" default-cache="default"> <transport executor="infinispan-transport" lock-timeout="60000"/> <distributed-cache name="default" mode="SYNC" segments="20" owners="2" remote-timeout="30000" start="EAGER"> <locking isolation="READ_COMMITTED" acquire-timeout="30000" concurrency-level="1000" striping="false"/> <transaction mode="NONE"/> </distributed-cache> </cache-container> |
以上的配置项目并非所有的都是必须,各节点说明见下:
#定义缓存默认的过期策略
#lifespan: 缓存条目最大的生存时间,单位毫秒,-1表示从不过期。
# max-idle: 缓存条目的最大空闲时间,单位毫秒,-1表示从不过期。如果空闲时间超过该值,条目将被视为过期。
#interval: 从缓存中清除过期条目的执行间隔时间(毫秒)。如果要完全禁用定期回收任务,设置为