第6章 Memcached 服务器部署指南:硬件需求与实例配置
服务器指南:硬件与实例硬件与实例Memcached 支持 32 位和 64 位 x86 系统,也兼容 32 位和 64 位 ARM 平台。
它运行在许多操作系统上(Linux、BSD 系列、各种 Unix)。目前没有官方支持 Windows。硬件需求 Memcached 对硬件的要求极低。它的 CPU 占用率通常很低,会尽可能多地使用你分配的内存,而网络使用量则从轻微到中等不等,具体取决于项目平均大小和预期的流量。CPU 需求 Memcached 对 CPU 的占用通常很低,因为其目标是响应速度要极快。Memcached 采用多线程架构,默认有 4 个工作线程。这并不意味着你必须配备 100 个核心才能让 Memcached 满足需求。如果必须依赖 Memcached 的多线程特性,你自然会意识到。在常见场景下,任何具备一定 CPU 能力的机器都足够了。大多数部署甚至只需单个 Memcached 线程。内存需求 Memcached 的核心作用是将从多台主机获取的内存片段拼接起来,让应用程序将其视为一大块统一的内存。内存越多越好。但切勿挤占其他可能受益的服务所需的内存。
确保每台 Memcached 服务器拥有大致相同的可用内存是有好处的。集群的均匀性意味着你可以随意添加或移除服务器,而无需担心单台的“权重”差异,也不必担心某台服务器失效时会对集群造成不成比例的伤害。避免交换 请为 Memcached 服务器分配物理内存,并预留百分之几的额外空间。不要过度分配内存并指望交换分区(Swap)来救急。性能将会非常、非常糟糕。请务必密切监控服务器是否在使用交换分区,必要时进行调优。需要高速内存吗? 不一定需要,不划算。购买额外的高速内存不太可能带来可测量的性能提升。NUMA 考量 在常规负载下,Memcached 在 NUMA 系统上运行正常。但在基准测试条件下,当 Memcached 跨多个 NUMA 节点运行时,可以测量到明显的性能下降。如果你对性能极度敏感且拥有 NUMA 系统,最佳的规避方案是在每个 NUMA 节点上运行一个 Memcached 实例,并通过 numactl 或类似工具绑定这些实例。硬件布局 在 Web 服务器上运行 Memcached 一个简单的布局方案是利用 Web 服务器或计算节点上的闲置内存。例如,如果你购买了一台 4G 内存的 Web 服务器,但你的应用和操作系统最多只使用 2G 内存,你可以将 1.5G 或更多的内存分配给 Memcached 实例。
这种方案有一个良好的权衡:内存被更分散地分配,因此失去任何一台 Web 服务器带来的痛感不会太大。
注意事项包括额外的维护成本,以及留意应用程序的多项获取(multi-get)使用情况,因为它可能会遍历列表中的每个 Memcached 节点。如果你的应用存在内存泄漏,还有可能导致机器陷入交换分区或杀掉 Memcached 的风险。通常最好运行交换分区极少甚至没有交换分区的宿主。让活跃的服务直接崩溃,总比让它变成性能黑洞要好。在数据库服务器上运行 Memcached 这不是个好主意。如果你有数据库主机,请尽可能多地将内存分配给数据库。当发生缓存未命中时,确保索引和数据已在内存中会更有利。使用专用主机 使用专用硬件运行 Memcached 意味着你不必担心机器上的其他程序干扰 Memcached。你可以在单台主机上配置大量内存(64G+),从而用更少的机器满足内存需求。
这样做的好处是能更轻松地扩展大容量的内存空间。你不需要添加新的 Web 服务器(它们可能会闲置),而是可以添加专用机器,将海量内存集中投入解决该问题。
但这有几个注意事项。你越将 Memcached 集群压缩集中,单台主机宕机带来的痛感就越强。
假设你的缓存命中率是 90%。如果你有 10 台 Memcached 服务器,其中 1 台失效,命中率可能会降至 82% 左右。如果原本 10% 的缓存未命中能到达后端,现在这个数字跳到 18% 或 20%,意味着你的后端突然要处理两倍于之前的请求。实际影响会有所不同,因为数据库处理重复查询能力仍然不错,且典型的缓存未命中往往是数据库无论如何都需要查询的项目。但仍然是两倍!
假设你购买了一批拥有 144G 内存的服务器,但预算只够买 4 台。现在,当失去单台服务器时,25% 的缓存空间消失,你的命中率可能会大幅下跌。容量规划 鉴于上述硬件布局的注意事项,请务必做好容量规划。大致估算在应用崩溃前可以承受多少台服务器丢失。确保你拥有的服务器数量始终多于这个临界值。
如果你无法下线 Memcached 实例,升级(硬件或软件)和常规故障处理都会变得异常痛苦。为了避免不必要的煎熬,请提前规划。网络 网络需求很大程度上取决于你的 Memcached 项目平均大小。你的应用应致力于保持项目小化,这决定你是能从容使用千兆交换机上行链路,还是彻底不堪重负。
大多数部署的需求较低(每个实例 < 10mbps),但重度命中服务可能会极具挑战性。话虽如此,如果你正被迫使用 InfiniBand 或 10 千兆以太网来连接 Memcached 实例,那你可能更应分散部署它们。性能与效率