如何处理 Riak 中的过时读取,例如面对网络分区时的会话
How to handle stale reads in Riak for things like sessions in the face of network partition
如果在 Riak 中存储会话,则读取可能会过时。
这不是很糟糕吗?例如,会话数据。用户注销然后刷新页面,他们仍然显示为已登录。
此外,如果存在网络分区或其他原因导致节点无响应(过度 I/O 或 CPU 使用),则用户可以注销,这会破坏会话,但如果后续读取发生在节点的另一侧,他们仍将登录,因为在该侧会话尚未被破坏。答案是什么?
对于像 Riak 这样的最终一致的数据存储,在某些情况下存在读取过时的风险,但是在大多数环境中,这被 Riak 的可用性配置文件所抵消(其中过时的读取比没有读取或无法写入要好)。
Riak 确实有一些功能可以帮助您处理会话存储,例如过期(当使用 BitCask 或 In Memory 后端时),并且 Riak 文档有一些示例和链接到构建在 Riak 上的现实世界会话存储用例,这很有价值一看:http://docs.basho.com/riak/latest/dev/data-modeling/.
如果在 Riak 中存储会话,则读取可能会过时。
这不是很糟糕吗?例如,会话数据。用户注销然后刷新页面,他们仍然显示为已登录。
此外,如果存在网络分区或其他原因导致节点无响应(过度 I/O 或 CPU 使用),则用户可以注销,这会破坏会话,但如果后续读取发生在节点的另一侧,他们仍将登录,因为在该侧会话尚未被破坏。答案是什么?
对于像 Riak 这样的最终一致的数据存储,在某些情况下存在读取过时的风险,但是在大多数环境中,这被 Riak 的可用性配置文件所抵消(其中过时的读取比没有读取或无法写入要好)。
Riak 确实有一些功能可以帮助您处理会话存储,例如过期(当使用 BitCask 或 In Memory 后端时),并且 Riak 文档有一些示例和链接到构建在 Riak 上的现实世界会话存储用例,这很有价值一看:http://docs.basho.com/riak/latest/dev/data-modeling/.