写点什么

灰度发布在 UCloud 大规模虚拟网络中的应用

  • 2018-11-08
  • 本文字数:1386 字

    阅读完需:约 5 分钟

灰度发布在UCloud大规模虚拟网络中的应用

ServiceMesh 实现控制面灰度

在控制面,早期灰度发布采用 APIGW 的方式实现。APIGW 通常仅部署在用户流量的入口,完全灰度发布就需要完整地部署两套系统。但在微服务化的时代,任何一个微服务发生变更都需要完整地部署两套系统,这不仅成本高且严重影响产品变更速度。ServiceMesh 以类似于将 APIGateway 部署到本地,同时提供集中化控制的方式,完美地解决了这些问题。


UCloud 的轻量级 ServiceMesh 平台基于 Istio,继续使用 Envoy 代理,修改 Pilot 在保留完整的 DSL 支持的基础上实现了脱离 K8S 运行。


因此网络团队对 Pilot 做了高度订制,从而更能满足自身的需求。



  • 订制方案一:按账号灰度。在 GRPC 或者 HTTP 请求中添加⾃自定义 Header x-ucloud-routeby,x-ucloud-routeby 采用 Cookie 的编码格式,在其中包含账户信息,配置 Envoy 根据该 Header 进行策略路由。

  • 订制方案二:采用显式代理而不是 IPTables 透明引流的方式和 Envoy 集成,支持 HTTP 1.0、HTTP 2.0 和 gRPC。在配置了 Envoy 的 Proxy Port 情况下,通过 Envoy 接入 ServiceMesh;如果配置域名且没有配置 Envoy 的 Proxy,则自动采用 ETCD gRPC naming and discovery 的方式; 如果配置 IP 地址和端口,则直连指定地址;



  • 订制方案三:采用 docker-compose 管理 container 实现 sidecar。新方案中仍然采用 container 的方式打包和部署微服务,但采用 Host 的网络方式简化了现存服务的网络通信方式。通过采用 docker-compose 管理 container 实现 sidecar,实现了一个简单的服务管理、版本管理、集群管理、路由策略管理层,为集群中的每台 Node(VM 或物理服务器)生成 docker-compose 配置文件,从而部署和管理每台 Node 的服务。

可编程交换机实现转发面灰度

在转发面灰度的方案选择上,团队采用了可编程交换机(基于 Barefoot Tofino 芯片)来实现灰度网关,替换普通交换机实现强灰度能力。


灰度网关最大提供 64 个 100G 的接口提供 6.4T 带宽,PPS 性能可达 4400 兆,延迟为 us 级别,能够很好支持网络宽带的高性能要求。灰度网关可以提供:一致性哈希 ECMP 的能力;可以基于任意定制字段(包括内层虚拟网络地址以及租户 ID)计算哈希;在计算哈希前优先应用灰度规则,可以根据任意字段定制灰度规则,最小粒度可以做到按 TCP 流来灰度。


转发面灰度示例

有了上述这些新工具,可以通过部署新的策略实现更加细粒的灰度发布,具体方案为:可编程交换机 BGP 宣告集群 VIP 引流,根据选择字段计算一致性哈希后将流量量分发给后端服务器,并按照选择字段(VNI、源地址、目的地址)配置灰度规则。


灰度步骤如下:


  • 按 VM 的粒度将流量量切换到灰度后端服务器;

  • 切换完成后立刻自动回归测试,根据路由表自动生成监测地址列表,并 Ping 检测网络互通性;

  • 测试通过则逐步增加灰度的 VM 地址;

  • 直到整个 VPC 的流量量全部切换到灰度后端服务器;

  • 再切换一个新的 VPC,直到所有分片内的 VPC 都切换到新的灰度后端服务器;

  • 完成灰度发布。


以上内容首次发表于 UCloud Tech Talk 活动,第二期将于 11 月 16 日在上海举办,报名以及更多信息请访问:https://www.bagevent.com/event/2007613


作者简介


徐亮,现任 UCloud 虚拟网络平台部负责人,公司首位 5 级技术专家。曾任职于上海贝尔、腾讯,有十几年电信与互联网行业研发管理经验。加入 UCloud 后主要负责包括可用区、VPC 在内的云平台虚拟网络架构工作,设计、开发过多个虚拟网络 DPDK 网关。



2018-11-08 14:111725

评论

发布
暂无评论
发现更多内容

2022-10-17:特殊的二进制序列是具有以下两个性质的二进制序列: 0 的数量与 1 的数量相等。 二进制序列的每一个前缀码中 1 的数量要大于等于 0 的数量。 给定一个特殊的二进制序列 S,以

福大大架构师每日一题

算法 rust 福大大

Kubernetes Pod 底层实现方式

CTO技术共享

Kubernetes 个人成长 pod 10月月更

一起聊服务架构的演进过程

南极仙翁

架构 技术 后端 服务架构

2022年中国小微普惠数字化进程专题分析

易观分析

小微金融

网络安全之等保2.0测评

网络安全学海

黑客 网络安全 信息安全 渗透测试 等保测评

搞一搞明白Vitepress的文档渲染基础

小鑫同学

前端 markdown vite markdown-it 10月月更

JS Array数组几个循环实用方法总结

MegaQi

JavaScrip 10月月更

作为码农,如何让35岁璀璨耀眼

南极仙翁

码农 生活随想 35岁危机 35岁焦虑 10月月更

Kubernetes的pod

急需上岸的小谢

10月月更

Kubernetes的pod调度

急需上岸的小谢

10月月更

kubernetes的Controller

急需上岸的小谢

10月月更

【愚公系列】2022年10月 Go教学课程 031-结构体方法

愚公搬代码

10月月更

Serverless应用架构转型

阿泽🧸

Serverless 10月月更

Jenkins流水线(pipeline)实战之:从部署到体验

程序员欣宸

Java jenkins 10月月更

从《三体》到Silkpunk,这些中式科幻用什么打动了西方人?

脑极体

2022年证券行业818理财节,量变开始转向质变

易观分析

证券 理财节

【ArchSummit】小红书缓存服务多云建设之路

小明Java问道之路

redis 架构 微服务 云原生 10月月更

Java多线程 CompletionService和ExecutorCompletionService

Yeats_Liao

后端 多线程 Java core 10月月更

Java多线程 ThreadPoolExecutor自定义线程池

Yeats_Liao

后端 Java core 10月月更

K8s Helm 微服务部署利器

CTO技术共享

Kubernetes 个人成长 Helm 10月月更

Java多线程 ThreadPoolExecutor-RejectedExecutionHandler拒绝执行策略

Yeats_Liao

后端 Java core 10月月更

你有真正的享受过闲暇吗?

暮春零贰

成长 时间管理 10月月更

【愚公系列】2022年10月 Go教学课程 032-结构体方法继承

愚公搬代码

10月月更

大数据入门学习框架

Lansonli

大数据 大数据学习框架 学习大数据

分布式协调服务的存在意义

穿过生命散发芬芳

分布式协调 10月月更

【一Go到底】第十八天---函数的注意事项

指剑

Go golang 10月月更

朋友圈架构设计

Jack

架构实战训练营9期

Kubernetes能否帮助解决自动化

CTO技术共享

Kubernetes 个人成长 10月月更

每个系统管理员都应该知道的 6 个 Linux 网络命令

wljslmz

Linux 网络命令 10月月更 系统管理员

cstdio的源码学习分析10-格式化输入输出函数fprintf---宏定义/辅助函数分析05

桑榆

源码刨析 10月月更 C++

用声网 Android UIKit 为实时视频通话应用添加自定义背景丨声网 SDK 教程

声网

视频 人工智能’ SDK 教程

灰度发布在UCloud大规模虚拟网络中的应用_软件工程_徐亮_InfoQ精选文章