总体思想:遇事不决先分层,一层不够加一层。
先放个 mermaid 架构图:
flowchart TD
%% 用户层
User[👥 用户访问]
%% Cloudflare层
CF[☁️ Cloudflare<br>🛡️ CDN + DDoS防护]
%% 抗投诉VPS层
LB[⚖️ 抗投诉VPS<br>🔄 负载均衡器]
%% 服务器群
SERVER[🏢 高性能裸金属服务器群<br>🌐 Web + 数据库 + 缓存<br>💬 Discourse系统]
%% 高防出口VPS
PROXY[🛡️ 高防VPS<br>🔒 对外访问统一出口]
%% 外部网络
INTERNET[🌍 互联网]
%% 连接关系
User --> CF
CF --> LB
LB --> SERVER
SERVER --> PROXY
PROXY --> INTERNET
%% 样式定义
classDef userStyle fill:#e1f5fe,stroke:#01579b,stroke-width:3px,color:#000
classDef cfStyle fill:#ff6f00,stroke:#e65100,stroke-width:3px,color:#fff
classDef lbStyle fill:#2e7d32,stroke:#1b5e20,stroke-width:3px,color:#fff
classDef serverStyle fill:#1565c0,stroke:#0d47a1,stroke-width:3px,color:#fff
classDef proxyStyle fill:#c62828,stroke:#8e0000,stroke-width:3px,color:#fff
classDef internetStyle fill:#455a64,stroke:#263238,stroke-width:3px,color:#fff
%% 应用样式
class User userStyle
class CF cfStyle
class LB lbStyle
class SERVER serverStyle
class PROXY proxyStyle
class INTERNET internetStyle
上图就是 LINUX DO 当前的网站服务器架构简图。省略了一些细节,包括改造后的 Discourse 服务器群,这不影响本文需要表达的东西。
可以看出来,在 Discourse 的前后,我们分别加了一层:
- Cloudflare 到 Discourse 中间添加了一个抗投诉的负载均衡层,它起到两个作用:抗 DMCA 投诉 + 负载均衡多台 Discourse web 服务器。
- 在 Discourse 后面添加了一个出口层,Discourse 对外的网络访问均经过它,从而隐藏真实的集群 IP,防止被 DDoS。当然了,即便它被打死,对 Discourse 影响也是极其有限的(只是一些链接抓取暂时不能工作,都还在失败队列里定时尝试)。
这两层服务器都是性能普通的 VPS,但它们都颇具功能性,为 LINUX DO 的稳定和安全护航。上面的软件和配置都已经容器化,可以随时替换到其他机器甚至其他供应商,而不必在被投诉和被 DDoS 的时候整个网站宕机、搬迁,非常灵活。
当然,这个架构是这么长时间演化过来的,未来应该也会根据实际情况做出调整。鬼知道这中间我踩了多少坑