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