2.4. 分散缓存
分散缓存与分布式缓存非常相似,因为它们允许线性扩展集群。分散缓存通过维护数据的两个副本(numOwners=2
),允许单个节点故障。与分布式缓存不同,数据的位置不会被修复;而我们使用相同的 Consistent Hash 算法来查找主所有者,备份副本会存储在最后一次写入数据的节点中。当写入源自主所有者时,备份副本存储在任何其他节点上(此副本的确切位置不重要)。
这就具有单一远程过程调用(RPC)的优势,用于任何写入(分布式缓存需要一或两个 RPC),但读取必须始终以主所有者为目标。这样可加快写入速度,但可能速度较慢,因此这个模式更适合写密集型应用程序。
存储多个备份副本也会带来稍高的内存消耗。要删除过时的备份副本,无效的消息会在集群中广播,这会产生一些开销。这可降低具有大量节点的集群中分散缓存的性能。
当节点崩溃时,主副本可能会丢失。因此,集群必须协调备份并找出最后一次写入的备份副本。这个过程会在状态传输过程中产生更多的网络流量。
因为数据的写入程序也是备份,即使集群在传输级别上指定 machine/rack/site ID 无法在同一台机器/rack/site 上处理多个故障。
您不能将分散的缓存用于事务或异步复制。
缓存的方式与其他缓存模式类似,以下是声明性配置的示例:
<scattered-cache name="scatteredCache" />
Configuration c = new ConfigurationBuilder() .clustering().cacheMode(CacheMode.SCATTERED_SYNC) .build();
分散模式不会在服务器配置中公开,因为服务器通常通过 Hot Rod 协议进行访问。该协议自动为写入选择主所有者,因此写入(具有两个所有者的分布式模式)也要求集群中的单个 RPC。因此,分散缓存不会带来性能优势。