架构大修记:从“单机硬扛”到“分布式正规军”

最近给我的项目 “兔特科技技术博客” 做了一次彻头彻尾的技术升级。折腾了好几天,踩了无数只有亲历过才会懂的坑,现在终于全线通车了,回头看,这不仅是服务器搬了个家,更是从“作坊思维”到“架构思维”的转变。

想把这段心路历程记下来,顺便给后面想折腾阿里云 CDN、OSS、NLB 和 WebSocket 的兄弟们留个“保命指南”。


1. 曾经的 1.0 时代:简单粗暴,大力出奇迹

刚开始的时候,我的架构极其纯粹:

  • 一台 ECS 服务器:逻辑全在里面,API 跑在里面,WebSocket(WS)也跑在里面。
  • Nginx 统管一切:不同的业务模块通过 Nginx 做路径转发,指向本地不同的 Docker 端口。
  • OSS 裸奔:静态资源放在 OSS 里,没加 CDN,直接通过 OSS 域名访问。

那会儿的逻辑是: 性能不够了?加 CPU!加内存!带宽卡了?买更大的固定带宽!

这种方案虽然省心,但到了“技术升级”的关口,它的天花板一眼就能看到:带宽太贵了(1000M 带宽那价格能看哭,一个月要八万人民币),而且安全性基本为零,服务器 IP 全程裸奔,一个 DDoS 过来全家就得进黑洞。


2. 现在的 2.0 时代:动静分离,各司其职

为了迎接未来可能到来的 10 万 CCU(同时在线用户),我把架构彻底重组了:

  • 静态内容(Blog + 资源包)CDN + OSS 组合。资源丢在 OSS 私有桶,外面套一层 CDN。快是真的快,省也是真的省(回源走内网免流)。
  • 动态接口(API + WSS)NLB (网络负载均衡) + ECS 集群。这是这次升级最硬核的部分。NLB 负责解开 HTTPS 的加密壳子,把明文传给 ECS 上的 Nginx,再转给后端。
  • 计费模型:全线接入 CDT(云数据传输)。每个月白嫖 20GB 流量,全家桶共享。

3. 那些让我“脑壳疼”的坑

升级过程中,我经历了从 404 到 403 再到 400 的“报错全家桶”:

坑一:CDN 真的玩不转 WebSocket

我本想全站走 CDN,结果发现阿里云标准 CDN 对 WebSocket 极其不友好。无论怎么配回源头,始终报 400 错误。

感悟:标准 CDN 是搞“复印转发”的,不适合“实时通话”。最后果断切换到 NLB(四层负载均衡),世界瞬间安静了。

坑二:回源 HOST 的“身份危机”

这是最坑的一个点。CDN 找 Nginx 拿数据,如果不手动在云端设置“回源 HOST”,Nginx 根本不认这个请求。

  • 表现:明明 Nginx 就在那,本地测也通,但公网访问就是 404。
  • 解药:在“指定源站回源 HOST”里,把域名手写进去。这就好比给快递员指明了具体的单元门牌号。

坑三:跨域(CORS)的梅开二度

因为我把 API 搬到了 gameapi.erdianzhang.cn,跨域挑战开始了。

  • 现象:浏览器报错 Multiple values in Access-Control-Allow-Origin
  • 真相:Nginx 处理了一次,后端 Go 代码又处理了一次。两个“通行证”叠在一起,浏览器直接拒收。
  • 搞定:Nginx 只负责把 OPTIONS 这种探路请求拦截并返回 204,真正的业务请求头留给后端自己发。

4. 1.0 vs 2.0:这几天的汗水换来了什么?

维度 1.0 模式 (单机模式) 2.0 模式 (架构模式) 解决的问题
性能瓶颈 受限于单台机器的垂直升级 随时加 ECS 实例,水平无限扩展 10 万并发连接不再是梦
SSL 压力 Nginx 负责解密,吃 CPU NLB 硬件级卸载 SSL,服务器只跑业务 单机承载力提升 30%+
网络成本 昂贵的固定带宽,利用率低 CDT 流量计费 + 共享带宽,用多少付多少 省下一大笔“保底费”
稳定性 单区运行,机房出事就挂 双可用区、双交换机容灾 真正的生产级高可用
WebSocket Nginx 直连,协议支持看运气 NLB 原生支持,稳定不掉线 解决掉线和握手报错

5. 总结

现在的 “兔特科技技术博客” 已经不再是一个简单的网页,而是一套标准的、能够随时扩容支撑大流量的分布式系统。

以前觉得“能跑通就行”,现在发现,好的架构是让每一个字节都走在最合适的路上

  • 图片和 JS 这种“死东西”:交给 CDN 缓存,让它在离用户最近的地方闪现。
  • 坐标同步这种“活数据”:交给 NLB,让它在最稳的隧道里飞奔。

虽然这几天为了调通这些规则没少掉头发,但当看到 Docker 日志里跳出那行 101 Switching Protocols(WebSocket 握手成功)的时候,一切都值了。

这就是架构的魅力吧。祝大家写代码不跨域,配 CDN 不 404!


架构大修记:从“单机硬扛”到“分布式正规军”
https://erdianzhang.cn/2026/03/01/架构大修记:从“单机硬扛”到“分布式正规军”/
作者
兔特科技
发布于
2026年3月1日
许可协议