面试题之项目中灰度发布是怎么做的
核心目标:新版本渐进式流量切换
实现方案
方式 实现途径 适用场景 用户标签灰度 K8s Ingress + Header/Cookie 路由 定向用户测试 流量比例灰度 Nginx 权重分流 / Istio VirtualService 小流量验证稳定性 地域灰度 DNS分区域解析 局部地域优先上线 技术细节
- K8s Ingress 灰度示例(基于Nginx):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata:annotations:nginx.ingress.kubernetes.io/canary: "true"nginx.ingress.kubernetes.io/canary-weight: "10%" # 10%流量导到新版本 spec:rules:- http:paths:- backend:service:name: new-version-service
- 流量回滚:监控系统(Prometheus)检测到错误率 > 1% 时,自动将权重调至0%
- K8s Ingress 灰度示例(基于Nginx):
数据验证
- 灰度期间比对关键指标:
SELECT 旧版本错误率, 新版本错误率,新版本QPS / 旧版本QPS AS 流量比 FROM 监控数据 WHERE 时间 > 灰度开始时间
- 灰度期间比对关键指标: