温馨提示×

centos缓存如何选择合适的方案

小樊
40
2025-11-29 15:06:02
栏目: 智能运维

选择缓存方案的总体思路

  • 明确瓶颈类型:是CPU/脚本执行数据库读写磁盘 I/O,还是网络往返/静态资源分发
  • 明确一致性要求:数据是否可以容忍过期,是否需要强一致会话粘滞
  • 明确规模与复杂度:单机即可还是需要分布式、是否需要自动失效/淘汰、是否需要持久化
  • 组合使用更有效:通常将内核页缓存应用层缓存反向代理/CDN数据库缓冲分层协同,收益最大。

常见缓存层级与适用场景

层级 典型技术 适用场景 关键配置要点
内核/文件系统 Page Cache、VFS 通用文件读写加速 一般无需手动调,可通过 vm.vfs_cache_pressure 调整回收倾向
DNS nscd 降低 DNS 查询延迟 配置 hosts 缓存的 TTL(如 positive-time-to-live 3600
Web 反向代理/边缘 Nginx proxy_cache、Varnish 静态资源、可缓存的 API/页面 设置 keys_zone、max_size、inactive,按 状态码Cache-Control 管理有效期
应用/对象缓存 Redis、Memcached 数据库查询结果、会话、通用 KV Redis 支持持久化/丰富结构;Memcached 简单高性能、多核友好
数据库缓冲 MySQL InnoDB Buffer Pool、PostgreSQL shared_buffers 降低磁盘 I/O、提升查询吞吐 InnoDB 缓冲池常设为内存的较大比例;PG 的 shared_buffers 通常设为内存的约 25%
页面/对象存储 CDN 面向全球/广域用户的静态内容与热点数据 配置 缓存规则、回源策略、预热
动态内容加速 Nginx fastcgi_cache 加速 PHP 等动态页面 结合 Cache-Control/ETag,对 Cookie/登录态 请求 bypass
存储/虚拟化层 SSD 缓存、KVM 磁盘缓存模式 虚拟机/数据库等 I/O 密集场景 KVM 常见模式:writethrough / writeback / none(性能与安全取舍)
上述技术均有在 CentOS 上的成熟配置实践,可作为落地参考。

按场景给出组合方案

  • 静态站点或内容为主的网站
    • 组合:Nginx proxy_cache + CDN + 内核 Page Cache
    • 要点:设置合理的 Cache-Control/ETag,对静态资源设置较长 max-age;CDN 做边缘缓存与回源限速;内核缓存保持默认即可。
  • 动态网站(如 LNMP/PHP)
    • 组合:Nginx fastcgi_cache + PHP OPcache + Redis/Memcached + MySQL InnoDB Buffer Pool
    • 要点:OPcache 加速字节码;对象/会话用 Redis/Memcached;数据库用 InnoDB Buffer Pool 作为主缓冲;对登录态、个性化内容 bypass 页面缓存。
  • 高并发 API/门户
    • 组合:Varnish/Nginx 作为反向代理缓存 + Redis 作为应用缓存层 + 数据库缓冲
    • 要点:Varnish 做全页或片段缓存,按 Cookie/Authorization/URL 规则 控制可缓存性;热点数据放入 Redis,设置 TTL淘汰策略
  • 数据库或存储 I/O 密集
    • 组合:数据库缓冲(InnoDB/PG)+ 合适的存储/虚拟化缓存策略
    • 要点:优先调大数据库缓冲;虚拟化/块存储场景选择合适的 缓存模式(writethrough/writeback/none)I/O 调度器 以平衡性能与安全。

关键参数与容量建议

  • 系统层
    • 观察与回收:用 free -hvmstat -s | grep cache 查看缓存命中;仅在特殊场景下调 vm.vfs_cache_pressure(默认通常无需调整)。
  • Nginx 缓存
    • 示例:proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;按 200/302 10m、404 1m 设置有效期,并添加 X-Proxy-Cache 头便于观测命中。
  • PHP
    • 启用 OPcache:zend_extension=opcache.so;memory_consumption=128,interned_strings_buffer=8,max_accelerated_files=4000,revalidate_freq=60,fast_shutdown=1(按内存与应用规模微调)。
  • MySQL/PostgreSQL
    • MySQL:innodb_buffer_pool_size 设为内存的较大比例(如数 GB 到数十 GB);PostgreSQL:shared_buffers 通常设为内存的约 25%,并按负载调 work_mem/maintenance_work_mem。
  • Redis/Memcached
    • Redis:配置 maxmemory淘汰策略(如 allkeys-lru),视业务开启 持久化(RDB/AOF);Memcached:合理设置 内存与并发连接,适合简单 KV 与高吞吐场景。

实施步骤与验证

  • 基线测量:在调整前记录关键指标(如 RPS、P95/P99 延迟、缓存命中率、磁盘 IOPS/延迟、DB QPS/慢查询)。
  • 分层启用:先启用低成本高收益的层(如 Page Cache、OPcache、Nginx 缓存),再逐步引入 Redis/Memcached、Varnish、CDN
  • 规则与灰度:为缓存设置明确键命名/前缀TTL,对 Cookie/登录态/购物车 等不可缓存请求 bypass;采用灰度/AB 验证命中率与错误率变化。
  • 观测与回滚:通过 X-Cache/Varnish X-Varnish 头、命中率回源率业务指标 持续观测;异常时快速回滚或降级策略。
  • 维护与清理:必要时使用 echo 3 > /proc/sys/vm/drop_caches 清理页缓存进行问题定位(仅测试环境使用,避免生产随意清理)。

0