做高可用架构,负载均衡这一层绕不过去。但到底用自建Nginx还是直接上云厂商的SLB,这个问题在技术群里吵了好几年。其实没有标准答案,要看你的团队规模、流量特点和预算结构。
我们从实际托管项目里抽两组客户做对比。A客户是自建Nginx方案,B客户用的阿里云SLB,两组业务量接近,月均在百万级QPS。对比跑了半年,数据很能说明问题。
方案对比:灵活性vs省心
自建Nginx最大的优势是灵活。你可以自定义路由规则、做灰度发布、写Lua脚本实现业务逻辑、根据请求头做细粒度分流。对于一个有运维能力的团队,Nginx几乎能满足所有定制化需求。
但代价是运维成本不低。Nginx自身要做高可用,得配Keepalived或者用DNS轮询做故障切换。配置变更要同步多台机器,一不小心就配置不一致。SSL证书管理、日志收集、性能调优,每一项都要投入人力。
云厂商SLB正好相反。开箱即用,自带健康检查、会话保持、自动扩容。证书管理在控制台点点就行,不用手动同步。但灵活性差一截,自定义路由规则受限于厂商提供的功能,想跑Lua脚本没门。还有一点容易被忽略:云SLB按LCU计费,流量大了每月费用可能比ECS还贵。
成本拆解
以月均50万QPS为例。自建Nginx需要两台4核8G的ECS做主备,加上Keepalived和监控,硬件月成本约600元,人力维护成本每月约2人天。云SLB按LCU算,同样的流量月费在1200到1800元之间,但人力几乎为零。一年下来,自建方案省硬件费用约7200元,但多花24人天的运维工时。如果运维人员日薪在500元以上,人力成本就吃掉了硬件省下来的钱。
关键判断标准:如果你的路由规则有定制需求,团队里有专职运维,月流量超过100万QPS时自建Nginx的性价比明显更高。如果业务刚起步、流量在20万QPS以下、团队没有专职运维,云SLB是最务实的选择。流量介于两者之间的,建议先用云SLB快速上线,等运维能力跟上再迁移到自建Nginx。迁移成本没有想象中那么高,DNS切一下就过去了,但前提是应用不要把负载均衡逻辑耦合在业务代码里,否则迁移会很痛苦。