数据中心架构演进
8 个阶段,按规模从小到大;每一阶段都从「上一版什么撑不住了」开始。
① 两台服务器
2 台服务器 · 1 个机房
这一版架构:一台交换机;只有 web 对外(80/443),数据库只有内网地址 —— 两台之间走私网互通
上一阶段什么撑不住了
- 这是起点 —— 一个视频网站刚上线,一台跑 web、一台跑数据库。
- ★ 数据库只有内网地址,和 web 走私网互通,公网上压根找不到它。这件事两台机器的时候就该做对,不用等规模上来 —— 对外暴露的只有 web 的 80/443。
- ★ 真正的问题是完全没有冗余:交换机、宽带、每台服务器都是单点。能这么干只是因为挂了也没多少人看得见。
- ★ 另外 web 前面什么都没有 —— 访问控制只靠这台主机自己那套 iptables。下一步会把它收进一台专门的设备。
动手试试(web 和数据库:同一个内网)
- ★★ 把数据库改到别的网段,看它怎么断 —— 这个规模上没有路由器,所以「不同网段」就等于「不通」,没有别的办法。
② 三台服务器
3 台服务器 · 1 个机房
这一版架构:加第二台 web,于是第一次有了「摘掉一台还能服务」的可能;同时把出口收进一台防火墙 / NAT,南北向策略统一在一个地方管
上一阶段什么撑不住了
- ★★★ 上一阶段 web 只有一台:重启一次、发一次版、崩一次,业务就整体中断,连「把它摘掉」这个选项都没有。所以第三台机器加的不是别的角色,而是第二台 web。
- ★★ 同时一台 web 的出方向带宽和并发连接也顶不住了。视频尤其明显:带宽的增长比 CPU 快得多,加 CPU 解决不了。
- ★ 两台 web 立刻带来一个新问题:请求怎么分到两台上。这个规模还不值得上负载均衡设备,先用 DNS 轮询顶着 —— 但它有个坑:DNS 有缓存,摘掉一台坏机器不会立刻生效,有些用户会继续往坏的那台撞。这个坑要等到 10 台上了负载均衡才真正解决。
- ★ 防火墙 / NAT 这一步不是为了「把数据库藏起来」—— 它上一阶段就已经在内网了。是为了把访问控制从每台主机各一套 iptables,收拢到一个地方管:机器越多,散在主机上的规则越会长歪。
动手试试(两台 web + 数据库)
- ★★ 两台 web 都要能连到数据库。把其中一台的掩码改错,就会出现「一半用户正常、一半报错」—— 这种半坏的故障最难查。
③ 10 台服务器
10 台服务器 · 1 个机房
这一版架构:一个机柜、一台 ToR;用 VLAN 把 web/应用/数据库分成三段;加一台负载均衡
上一阶段什么撑不住了
- ★★ 上一阶段所有机器在同一个广播域里。10 台的时候这就开始疼了:任何一台机器发广播(ARP、DHCP、乱掉的网卡)所有人都要处理一遍。
- ★★ 而且一台 web 顶不住流量了 —— 视频的出方向带宽增长比 CPU 快得多,必须能把请求分到多台机器上。于是负载均衡出现。
- ★ 安全上也需要分段:web 被攻破了,不该能直接连到数据库。防火墙管南北向,VLAN 管东西向。
动手试试(十台分三个 VLAN:跨 VLAN 要经三层交换机)
- ★★★ web 1 → 数据库 1 是跨 VLAN的,所以必须上到 ToR 的三层口再下来。换成 web 1 → web 2 对照一下:那是同 VLAN,二层直通,三层口压根不参与。
- ★★★ 把 web 1 的网关清掉 —— 同 VLAN 的还能通,跨 VLAN 全断。★ 这正好解释了那个经典现象:「同段能 ping,跨段不行」几乎总是网关的问题。
- ★★ 把数据库 1 的 IP 改成 10.0.20.x(应用段的地址)—— 地址算得通、线却接在 VLAN 30 上,于是报「送到那一段了,但人不在」。IP 规划和物理接线不一致就是这个样子。
④ 100 台服务器
100 台服务器 · 1 个机房
这一版架构:接入-汇聚-核心三层架构;每台 ToR 双上行;VRRP 做网关冗余;独立的带外管理网
上一阶段什么撑不住了
- ★★★ 上一阶段一台 ToR 挂了整个机柜就没了。100 台装不进一个机柜,于是有了多个机柜;一旦有多个机柜,就必须有一层设备把它们连起来 —— 汇聚层。
- ★★ 单台交换机的端口数也到顶了。这是最朴素的物理约束,但它是三层架构诞生的直接原因。
- ★★★ 有了冗余就有了环路,于是必须跑 STP —— 而 STP 的做法是把冗余链路阻塞掉。所以图上那两条灰虚线是买了却用不上的带宽。这笔账会一直背到 leaf-spine 出现。
- ★ 还有一件事这时候必须做:带外管理网。交换机配错了把自己的管理口关掉,没有带外网就只能去机房插串口线。
动手试试(一百台:网关在汇聚层)
- ★★★ 注意网关在汇聚层,不在 ToR 上 —— 所以跨 VLAN 的流量要「上到汇聚、再下来」。这就是三层架构里跨机柜流量的代价,也是后面 leaf-spine 要解决的问题。
- ★★ 把 VLAN 20 服务器的网关改成 10.1.10.1(另一段的网关)——报「网关不在本网段」。★ 这个错在 VLAN 多起来之后特别容易犯。
⑤ 1000 台服务器 · 2 个数据中心
1000 台服务器 · 2 个机房
这一版架构:两个机房互为备份;MLAG 取代 STP 阻塞;自己申请 AS 号和 IP 段,BGP 双运营商多归属;DNS/GSLB 在两个机房之间调度用户
上一阶段什么撑不住了
- ★★★ 上一阶段整个机房是一个故障域。断电、光缆被挖断、消防喷淋误动作 —— 任何一个都让业务全停。冗余做到设备级别是不够的,必须做到机房级别。
- ★★★ STP 那笔账到这里还不了了:一半上行链路被阻塞,等于买一半带宽扔掉。MLAG(把两台交换机对外伪装成一台)让两条上行同时转发。
- ★★ 还有一件事变了:以前 IP 地址是运营商给的,换运营商就得换 IP。现在必须自己申请 AS 号和 IP 段,用 BGP 同时挂两家运营商 —— 一家断了,路由自己收敛过去,用户不用改任何东西。
- ★ 两个机房一旦都在跑,就要回答一个新问题:用户该去哪个。这是 DNS/GSLB 出场的地方。
⑥ 10k 台服务器 · 4 个数据中心(2 个城市)
10000 台服务器 · 4 个机房
这一版架构:Leaf-Spine(Clos)取代三层架构,所有链路靠 ECMP 同时转发;VXLAN + EVPN 做多租户和虚机迁移;同城机房之间走裸纤/DWDM,跨城走自建骨干;对外服务用 Anycast
上一阶段什么撑不住了
- ★★★ 上一阶段的三层架构假设流量是南北向的(用户 → 服务器)。但视频转码、分布式存储、大数据这些让东西向(服务器 → 服务器)流量成了主角,而东西向要穿过汇聚层 —— 那一层是按收敛比设计的,压根不是为这个准备的。
- ★★★ VLAN 只有 4094 个。开始把机器分给不同业务线(后来是不同租户)之后,这个数字很快就不够了。VXLAN 的 VNI 有 1600 万个。
- ★★ 虚机要能跨机柜迁移而不改 IP。三层架构里网关在汇聚层,换机柜就换网段;EVPN 的分布式任播网关让每台 leaf 都是同一个网关。
- ★ 两个机房不够了:同城双活能扛机房级故障,但扛不住整个城市的事故(地震、大面积断电、全城光缆中断)。于是变成两个城市、每个城市两个机房。
⑦ 100K 台服务器 · 多国多数据中心
100000 台服务器 · 12 个机房
这一版架构:自建全球骨干网(MPLS / SR-TE 做流量工程);在多地 IXP 直接对等,少买 transit;CDN PoP 下沉到离用户最近的地方;跨洲走海缆;控制面按区域拆开
上一阶段什么撑不住了
- ★★★ 上一阶段跨城走的是买来的 transit。出了国之后这条路走不通了:跨国 transit 又贵又抖,而视频对丢包和抖动极其敏感。于是必须自己买/租跨洋容量,把骨干变成自己的。
- ★★★ 更根本的是物理距离:用户在欧洲、机房在亚洲,一个来回 250ms 起,起播慢、拖进度条卡。这个问题加带宽解决不了 —— 光速就那么快。唯一的办法是把内容搬到用户身边,于是有了 CDN PoP。
- ★★ 流量大到一定程度,给运营商付钱就不划算了:在 IXP 和对方直接对等,很多流量一分钱不用付,而且少一跳、更稳。这是从「买带宽」变成「换带宽」。
- ★ 还有一件不是技术的事:数据要落在本国境内。合规直接决定了机房建在哪。
⑧ 100 万台服务器 · 分工不同的机房 + PoP + 云 + 托管
1000000 台服务器 · 60 个机房
这一版架构:机房按用途分化:超大核心机房(计算/存储/AI 训练,内部跑无损 RDMA)、区域机房、边缘 PoP、DDoS 清洗中心、中立托管机房做互联;骨干上 SR/SRv6 + SDN 控制器统一调度;底下还有一层 OTN/ROADM 光网络;对外开始卖云,多租户隔离和专线接入成了产品
上一阶段什么撑不住了
- ★★★ 上一阶段所有机房都是同一种机房。到这个规模这件事在三个方向上同时不成立了: · AI 训练要无损、超低时延的 RDMA 网络,和跑网页的机房完全不是一回事; · 边缘要的是离用户近,不需要大算力; · 和别人互联要在中立机房,不能在自己家。 一种机房干所有事,成本和时延两头都不对。
- ★★★ 开始对外卖云之后,网络本身变成了商品:客户要自己的隔离网络(VPC)、要从自己机房拉专线进来、要能跨云。以前多租户隔离是内部整洁问题,现在它是产品的 SLA。
- ★★ 攻击流量也到了另一个量级:几百 Gbps 的 DDoS 直接打满入口。必须有专门的清洗中心,把流量牵引过去洗完再回注 —— 不能在业务机房洗。
- ★ 骨干上人工调流量已经不可能了(几千条路径)。于是 SR/SRv6 + 一个集中控制器:由它算全网最优、把路径压进包头。这也是 Google B4 / Espresso 那一类系统解决的问题。