ThinkPHP高可用架构需从数据、缓存、会话、部署、容错五层系统设计:数据库主从读写分离;缓存多级降级(Redis→File→Nginx fastcgi_cache);会话与文件统一托管至Redis和OSS;多实例+负载均衡+健康检查;全链路防单点故障。

ThinkPHP 高可用架构不是靠单点优化堆出来的,而是从数据、缓存、会话、部署和容错五个层面系统设计的结果。核心目标是:任一环节出问题,业务不中断、响应不报错、关键操作不丢。
数据库主从与读写分离
避免所有请求压向单个数据库实例。ThinkPHP 6.x 支持原生主从配置,在 config/database.php 中定义 connections 时明确区分 master 和 slave:
- 设置 'read' => ['host' => ['192.168.1.10', '192.168.1.11']],框架自动轮询从库查数据
- 写操作(insert/update/delete)强制走 master,由框架底层 SQL 解析器识别并路由
- 配合中间件或模型事件,在高并发写场景下可手动指定连接,例如 User::connection('master')->save($data)
缓存故障自动降级
Redis 不可用不能导致页面 500。ThinkPHP 可通过多级缓存兜底:
- 自定义缓存驱动:在 app/common/cache/FailoverCache.php 中重写 set() 和 get() 方法,先试 Redis,失败则 fallback 到 File 缓存
- 使用链式适配器(需扩展支持):把 Redis + File 封装为一个统一缓存实例,读取时按优先级逐层尝试
- Nginx 层兜底更彻底:配置 upstream 指向 Redis 代理服务,不可达时自动切到本地 fastcgi_cache,PHP 应用完全无感
会话与文件集中化管理
单机 session 文件或本地上传目录是高可用的最大隐患:
立即学习“PHP免费学习笔记(深入)”;
- 会话改用 Redis:ThinkPHP 在 config/session.php 中设 'type' => 'redis',并配置 host/port,确保多实例共享登录态
- 用户上传禁用本地存储:所有文件必须走对象存储(如阿里云 OSS),ThinkPHP 通过 think\File 类封装上传逻辑,后端只存 URL
- 静态资源分离:CSS/JS/图片等托管至 CDN,Nginx 配置 location 匹配直接返回,不经过 PHP
多实例 + 负载均衡 + 健康检查
单台服务器永远不是高可用:
- 至少部署两个 ThinkPHP 实例,反向代理(Nginx 或 SLB)做加权轮询或最小连接数分发
- 每个实例的 Nginx 需启用健康检查,例如 proxy_next_upstream error timeout http_500;后端挂掉自动剔除
- PHP-FPM 配置 pm = static 或 dynamic,max_children 根据内存合理设定,避免雪崩式进程耗尽



















