据记载,单独的 Redis 实例映射到单独的 CPU 内核。如果我有 8 个 redis 实例在具有 8 个内核的 Debian/Ubuntu 机器上运行,那么它们都将映射到一个内核。
1) 如果我将这台机器缩减为 4 核会怎样?
2) 更改是自动发生的(默认情况下),还是涉及一些明确的配置?
3) 有什么方法可以控制这种行为吗?如果是,程度如何?
很想了解这背后的技术原理,欢迎提供说明性示例。我运行一个托管在云中的应用程序,它使用 redis 作为后端。扩大(和缩小)机器的 CPU 内核是我必须做的事情之一,但我想知道我首先要了解的是什么。
提前致谢!
最佳答案
没有魔法。由于redis是单线程的,单个redis实例一次只会占用一个核。运行多个实例可能会在不同的内核(如果有的话)上同时执行多个实例。如何做到这一点完全取决于操作系统。 redis 本身不会做任何事情来将实例“映射”到特定的核心。
在实践中,在 8 个内核上运行 8 个实例可能会给你一些看起来像实例到内核的直接映射的东西,因为智能操作系统会跨内核分布进程(以最大化可用资源),并且应该显示出在最近腾出的同一核心上运行进程的偏好(以充分利用缓存)。但充其量,这仅适用于 1:1 映射的简单情况,系统上没有其他进程,所有进程均等加载,不受网络驱动程序等的影响。
在一般情况下,您只能说操作系统将决定如何为您运行的所有实例分配 CPU 时间,并且它可能会做得很好,因为操作系统的调度部分是由知道自己在做什么的人撰写。
关于redis - Redis 实例映射到独立 CPU 内核背后的机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54492550/