ALB 应用型负载均衡实践:千里达票务系统多业务七层路由
最早千里达用 SLB(四层),所有流量打到同一个入口,按端口区分订单服务、会员服务、小程序 H5。后来业务多了:开放 API 给渠道商、内部管理后台、C 端 H5、客服工具,一个 SLB 上挂了 8 个监听,配置散乱,证书管理也乱。迁移到阿里云 ALB(应用型负载均衡)后,七层路由按域名+路径分流,一张证书管所有域名。
一、四层 vs 七层的差异
- SLB(四层):按 IP+端口转发,看不到 HTTP 头;
- ALB(七层):按 Host、URL Path、Header 路由,支持 HTTP/2、gRPC、证书统一托管。
二、路由规则设计
*.1000da.com
├─ api.1000da.com → 订单/会员后端组 (8080)
├─ open.1000da.com → 开放API后端组 (走API网关)
├─ admin.1000da.com → 内部管理后台 (只允许公司IP)
└─ h5.1000da.com → 小程序H5静态+动态
同一张 ALB,按域名分流到不同服务器组。
三、关键配置
3.1 监听与证书
- 443 监听,统一挂一张通配符证书(ACME/阿里云证书服务托管,自动续期);
- 80 全部 301 到 443。
3.2 转发规则示例
规则1: host=api.1000da.com, path=/order/* → 后端组 order-group:8080
规则2: host=api.1000da.com, path=/member/* → 后端组 member-group:8081
规则3: host=admin.1000da.com → 后端组 admin-group, 附加IP白名单
3.3 健康检查
后端组开启健康检查(HTTP /healthz),异常实例自动摘流,不用人工摘挂。
四、踩坑复盘
- Session 一致性:早期登录态粘会话,某台后端挂了用户被踢。解决:JWT 无状态化,不依赖会话保持;
- WebSocket 长连:客服系统要 WebSocket,ALB 默认超时太短断连。解决:调整 idle_timeout 到 300s;
- 证书续期:手动更新证书漏过一次,小程序弹窗不安全。解决:证书服务托管+自动部署到 ALB;
- 后端健康检查路径:早期用
/,200 就认为健康,但应用其实 hang 了。解决:单独/healthz,内部真检查 DB/Redis 连通性。
五、效果与总结
ALB 上线后,新增一个业务域名不用再开 SLB 监听,控制台加一条转发规则就行。证书、日志、监控都在一个入口。对千里达票务系统这种多业务线共用基础设施的场景,七层负载均衡比四层更灵活,也更贴合云原生部署。