一切的始发点
偶然在群里和一位大佬在闲聊,聊到了他自己业务的源站结构,并表示这种高性能集群不会死在 CDN 前面。





因为业务凉凉了

具体实现
大纲
大致的访问流程如下:

(Mermaid 单项流程示意图,仅供参考)
赛博抓药
服务器全部从雨云采购。作为高级代理六五折提货。
先讲成本。这里没有大佬那样夸张。(雨云美国二区)
类型 | 配置 | 用途 | 成本 |
aaWAF Node | 4H4G 80M↑100M↓ | 过滤部分 Web 攻击 | 327.6¥/年 |
Nginx+PHP Node | 8H16G 150M↑150M↓ | 放置 WP 文件并进行 PHP 运算,用于 Web | 1075.2¥/年 |
Mysql+Redis Node | 4H8G 100M↑100M↓ | 放置 Mysql 与 Redis,用于数据库 | 615.6¥/年 |
总计 | 2018.4¥/年 |
数据、网络互通性
雨云的云服务器支持同可用区内网互通,理论内网带宽最大 500M(为了防止内网攻击)
这里就使用内网低延迟高速互通来实现了。
数据库开放 Mysql 与 Redis 端口给 Web 节点使用,Web节点使用内网连接数据库节点。
关于 Mysql,直接复制一个与 root 账户权限相同的账户,允许所有主机,用于后续跨实例连接。
对于 Redis,直接加上 passwd,然后改 bind ip 参数为需要的值(例如0.0.0.0)
对于 Web 文件节点同步,目前的设想所有 Web 节点是挂载同一台文件节点的。但由于技术限制,没有纳入本次集群折腾。
性能测试
此处使用 WordPress 进行测试。
以下为各机器环境。
- Debian 12
- Nginx 1.26
- PHP 7.4
- Mysql 8.0
源站使用 litespeed cache 插件(基本预设+启用 Redis 对象缓存),同时使用宝塔的那个鸡肋网站缓存插件(命中率≥95%)
上述配置进行的性能测试负载结果如下:
根据漏桶效应,Web 服务器负载最大,应当是性能瓶颈。而带宽远没有满载,所以以 CPU 负载为准。(此结果不准确,保守估计)
负载(CPU) | QPS |
30% | ≈170 |
100%(推算) | ≈550(推算) |
可能的拓展
这里使用的结构只是单线流程,并没有做到故障转移,所以只是高性能,而不是高可用。同时集群只有一份。理论上来讲,您复制一份集群并让其参与负载均衡,您源站并发能力会高一倍。
如果您需要实现故障转移,可以考虑多点负载均衡或是备用点的方案:对于 Web 数据的同步,可以使用 Rsync 等增量同步工具;对于数据库的同步,可以考虑主从/主主的结构。
总结
这套方案适合对于源站并发能力有需求,且钱包单薄的人群。
完全可以自己加上故障转移或是负载均衡,做到更高的可用性与性能。
版权申明
- 本文作者:Akira(光 · 昭)
- 版权申明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。请在关于页面查看本站采用的版权协议。
- 本文链接:站点建设 | 我的 WordPress 高性能源站集群的实现 - 光昭
- 封面来源:#オリジナル 花 - Say HANa的插画 - pixiv
Comments 2 条评论
学习一下
@fishcpy 大佬见笑了
其实对于这种资源低更改率(或者叫做单点更改的)博客来说,还可以单独拉一台 File Server 存储站点文件,然后多台 Web 服务器共同挂载同一工作目录。这样既不需要琢磨数据同步,也可以扩容 Web 并发能力 