DevOps - 从渐进式交付说起(含实践 Demo) (4)

A/B 测试 Traefik Router 核心配置代码为:

apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: k8s-flask-abtest namespace: pro spec: entryPoints: - web routes: #A/B test - kind: Rule match: Host(`pro.coding`) && Headers(`location`, `shenzhen`) services: - name: k8s-flask-canary port: 8080 namespace: pro 5.2.3 灰度发布架构图

访问 pro.coding 时,Router 匹配到此 Host 规则,并根据配置的 Weight 权重,将流量按比例转发到 k8s-flask-canary 或者 k8s-flask Service

DevOps - 从渐进式交付说起(含实践 Demo)

例如以 1:1 的比例分配灰度比例,Traefik Router 核心配置代码为:

apiVersion: traefik.containo.us/v1alpha1 kind: IngressRoute metadata: name: k8s-flask-pro namespace: pro spec: entryPoints: - web routes: #canary deploy - kind: Rule match: Host(`pro.coding`) services: - name: k8s-flask port: 8080 namespace: pro weight: 50 # 权重比例 - name: k8s-flask-canary port: 8080 namespace: pro weight: 50 # 权重比例

当全量发布生产环境的时候,只需要将 Canary 环境的 Weight 权重设置为 0,即所有流量都转发到生产环境。

5.2.4 熔断和限流架构图

在生产环境,我们一般使用限流和熔断技术来应对流量激增,牺牲部分用户的体验来保证生产环境的稳定。

Traefik 内熔断和限流是通过配置 middlewares 来实现,对流量进行匹配后,再进行中间件二次流量确认。

DevOps - 从渐进式交付说起(含实践 Demo)

Traefik Middlewares 限流核心配置:

apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: flask-k8s-traffic namespace: pro spec: rateLimit: # 1s 内接收的请求数的平均值不大于500个,高峰最大1000个请求 burst: 1000 average: 500

Traefik Middlewares 熔断核心配置:

# Latency Check apiVersion: traefik.containo.us/v1alpha1 kind: Middleware metadata: name: k8s-flask-breaker namespace: pro spec: circuitBreaker: expression: LatencyAtQuantileMS(50.0) > 100 # 50% 的请求比例响应时间大于 100MS 时熔断 6. 小结

Kubernetes 和 Service Mesh 的出现,给 DevOps 带来了更多可能,渐进式交付只是一种借助其便利性的比较典型的发布方式。

我们借助了 Traefik 作为集群网关,通过分流技术实现了 A/B 测试和灰度发布,当然,你也可以引入 Service Mesh 使用 Istio 管理集群流量,借助 Virtual Service 和 Destination Rule 实现同样效果。

借助 CODING DevOps 的能力,我们将“推送代码”、“构建镜像”、“触发部署流程”进行打通,实现了自动化的 DevOps 能力。

当然,还可以做到更多有价值的发布流程,比如:

运营、产品人员可以实现很方便地随时修改 A/B Testcase 进行分流测试,只需要配置一个修改 A/B Testcase 的 Pipeline,输入相关的分流指标,并运行即可生效;

除了 A/B Testcase,灰度发布也变成了实时可控的数值,甚至可以实现一个“渐进式灰度发布”的 Pipeline,增加 Wait 阶段实现灰度比例随着时间推移自动增加;

可以很方便地实现一个自动回滚的 Pipeline,通过输入版本号就可以实现自动回滚到对应的版本,如使用数据库 ORM 产品,甚至可以实现数据库的自动回滚;

Traefik 提供的熔断和限流能力,结合 Pipeline 的 Webhook 触发以及监控系统如 Prometheus 联动,可以实现业务系统压力较大的时候自动触发熔断和限流 Pipeline 改变限流策略,保证生产环境的稳定性。

7. 资源链接和参考资料

Demo Git 仓库地址

CODING 持续集成(CI)

CODING 持续部署(CD)

Tencent TKE

Facebook 的增长神器 —— 灰度发布 + A/B testing

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjwgw.html