2.7. 持久性存储
将 Data Grid 配置为与持久数据源交互会严重影响性能。这种性能损失源自于以下事实:更传统的数据源本质上要慢于内存中缓存。当调用超出 JVM 时,读取和写入操作将始终更长。根据您对使用缓存存储的方式,数据网格性能的降低是性能的偏移量,导致内存数据提供了通过访问持久性存储中的数据提供了偏差。
使用持久性存储配置数据网格部署也会带来其他好处,例如,允许您为正常集群关闭保持状态。您还可以将缓存中的数据溢出到持久性存储,并在内存中仅提供容量之外获得容量。例如,您可以在总计有 1,000万次条目,同时只保留内存中的 200万次条目。
数据网格以 write-through 模式或 write-behind 模式为缓存和持久性存储添加键/值对。由于这些写入模式对性能有不同,所以在规划数据网格部署时您必须考虑它们。
编写模式 | 对性能的影响 |
---|---|
write-through | 数据网格同时将数据写入缓存和持久性存储,这会增加一致性并避免可能导致节点故障的数据丢失。
write-through 模式的不足之处在于,同步写入添加延迟并降低吞吐量。 |
write-behind | 数据网格同步将数据写入缓存,但随后将修改添加到队列,以便异步写入持久性存储,从而降低一致性,同时降低写入操作的延迟。 当缓存存储无法处理写入操作数时,Data Grid 会延迟新写入操作,直到待处理的写入操作数低于配置的修改队列大小,采用类似直写的方式。如果存储通常速度快,但延迟高峰在缓存写入过程中发生,您可以提高修改队列大小来包含突发时间并缩短延迟。 |
激ivation
启用传递会将数据网格配置为仅在从内存中驱除条目时将条目写入持久性存储。乘客还意味着激活。对密钥执行读取或写入会使该密钥返回到内存,并将其从持久性存储中删除。在激活期间从持久性存储中删除密钥不会阻止读取或写入操作,但这会增加外部存储的负载。
传递和激活可能会导致数据网格对缓存中给定条目执行多个调用。例如,如果内存中不可用,Data Grid 会将它放回内存,即一个读取操作,以及从持久存储中删除操作。另外,如果缓存已达到大小限制,Data Grid 会执行另一个写入操作来传递新驱除条目。
使用数据预载入缓存
影响 Data Grid 集群性能的持久性存储的另一个方面是预加载缓存。此功能会在 Data Grid 集群启动时使用数据填充缓存,以便它们"温",并可直接处理读取和写入。如果在持久性存储中的数据量大于可用 RAM 量时,预加载缓存可能会减慢 Data Grid 集群启动时间,导致内存不足的情况。