phabricator本身非原生集群系统,但可通过主从数据库分离、s3兼容对象存储替代本地文件、aphlict独立部署加redis桥接、git服务外置负载均衡等分层解耦方式构建高可用协作架构。

Phabricator 本身不是原生支持集群部署的系统,它默认按单实例设计,但可通过架构分层与外部组件组合实现类集群的高性能、高可用协作环境。关键不在于“Phabricator 集群”,而在于“以 Phabricator 为核心的服务化协作架构”——把数据库、文件存储、通知服务、代码仓库访问等解耦并横向扩展。
主从分离 + 多读实例
Phabricator 支持主从数据库配置,这是最实用的性能扩展方式:
- 主库(写节点):仅处理所有 INSERT/UPDATE/DELETE,部署在高 I/O、强 CPU 的服务器上,启用 binlog 并配置为 GTID 模式
- 从库(读节点):N 台只读 MySQL 实例,通过 `conf/local/local.json` 中的 `"mysql.read"` 字段配置多个地址,Phabricator 会自动轮询分发 SELECT 请求
- 注意:Differential(代码审查)、Maniphest(任务)等模块重度依赖事务一致性,跨库 JOIN 或写后立即读的场景需加缓存或强制走主库,可用 `PhabricatorEnv::getDatabaseConnection('w')` 显式指定连接
共享存储与对象化文件服务
用户上传的附件、截图、Diff 补丁包等必须全局可读,否则多实例间会出现 404 或内容错乱:
- 禁用本地文件系统存储(
src/applications/files/storage/PhabricatorFilesLocalDiskStorage.php) - 改用 S3 兼容对象存储(如 MinIO、阿里云 OSS、腾讯云 COS),配置路径:
conf/local/local.json中设置"storage.type": "s3"及对应 endpoint、bucket、key - 若内网部署,MinIO 单节点即可满足中小团队;生产环境建议 MinIO 分布式模式或 Ceph RGW,确保元数据与对象高可用
Aphlict 实时服务独立部署
WebSocket 推送(评论提醒、状态变更通知)是典型有状态服务,不可简单复制多实例:
- Aphlict 必须单点运行,或使用 Redis Pub/Sub 做跨进程消息桥接(需修改
support/aphlict/server/aphlict_server.js加入 Redis client) - Nginx 反向代理 WebSocket 连接时,需开启
proxy_http_version 1.1和Upgrade头透传,避免连接被静默断开 - 建议将 Aphlict 与主应用分离部署:同一台机器也可,但更推荐独立小规格 VPS,避免主 PHP 进程异常影响通知实时性
代码仓库访问的负载均衡
Git HTTP(S) 访问(Diffusion)是性能瓶颈之一,尤其在大量 clone/pull 场景下:
- 不依赖 Phabricator 自带的 git-http-backend,改用 Nginx + Smart HTTP 后端(如 cgit、gitweb 或专用 Git 服务如 Gitea 做只读镜像)
- 或部署 Git Daemon(
git daemon --reuseaddr --export-all --base-path=/var/repo),配合 Nginx TCP 负载均衡(stream 模块)分发 git:// 请求 - Phabricator 侧通过
repository.uri指向统一域名,内部由 DNS 或 VIP 轮转到不同 Git 节点











