【发布时间】:2022-01-19 09:33:17
【问题描述】:
我正在寻找在同一节点上的 pod 之间共享只读内存缓存的任何现有实现。这种设置将允许快速访问,而无需将整个缓存加载到每个 pod 内存中。
示例:1GB 查找字典保持最新,每个 pod 都具有对数据的读取访问权限,从而允许快速查找而无需有效地将数据克隆到内存中。所以最终结果将是节点上仅使用 1GB 内存,而不是 1GB * N(pod 数量)
k8s 的设想解决方案:
- 具有 tmpfs 卷 RW 的单个(守护程序)pod,维护最新的缓存数据
- 具有相同 tmpfs 卷 R(仅)的多个 pod,映射数据文件以读取数据
- 自然地读出值并对其进行操作预计会产生传递性内存使用情况
注意事项:
- 我找到了multiple entries regarding volume sharing between pods,但是上面没有完整的解决方案参考
- tmpfs 是 R/W 缓存速度的理想选择,但显然它可以超过常规 fs
- 寻找可以是特定语言或不可知论的解决方案以供参考
- 特定语言将使用特定语言将文件数据映射为字典/其他 KV 查找
- 语言不可知和更通用的解决方案可以使用sqlite,在我们的例子中,进程是 pod
【问题讨论】:
-
我遇到了你的问题,或者我们可以说计划很好,毫无疑问,如果我们在 K8s 上运行守护进程,它会在每个节点上使用
tmpfs安排 POD,但你的服务如何将确保连接到同一节点 POD 只读实例?理想情况下,从服务到 POD 的流量与读取写入副本无关。在您的应用程序中,您不能使用 POD ip 左右。阅读更多相同场景讨论:stackoverflow.com/questions/70452338/… -
Redis 中有一个用于客户端缓存的选项,但正如您提到的 1GB * N(pod 数量):redis.io/topics/client-side-caching
-
@HarshManvar 假设 writer pod 被设置为 daemonset,确保每个节点都有一个有效的文件缓存 - 而其余的 pod 挂载它并“看到”它作为它们的本地只读副本跨度>
标签: kubernetes caching tmpfs