高品质的音视频能力是怎样的? | Qcon 全球软件开发大会·上海站邀请函 了解详情
写点什么

灰度发布在 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:111424

评论

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

Linux之ln命令

入门小站

Linux

Go语言,什么情况下应该使用指针?

微客鸟窝

Go 语言

【架构训练营】模块二作业

zclau

Python OpenCV 图像的几何变换,先说不平凡的 resize 函数

梦想橡皮擦

Python 7月日更

[翻译]innodb_ruby 项目简介

keaper

MySQL 数据库 后端 服务端 innodb

使用dubbo-go搭建dubbo接口测试平台

捉虫大师

dubbo 接口测试 dubbo-go Go 语言

手把手教你在Modelarts平台上进行视频推理

华为云开发者联盟

视频 modelarts 推理 预处理 视频推理

图解 JavaScript 数组方法

devpoint

ES6 array 7月日更

在线XML转CSV工具

入门小站

使用Docker运行OnlyOffice的Node.js示例

一个需求

onlyoffice

网络安全、Web安全、渗透测试之笔经面经总结

网络安全学海

面试 网络安全 信息安全 渗透测试 漏洞分析

微信朋友圈复杂度分析

桂阳

基于迁移学习的语义分割算法分享与代码复现

华为云开发者联盟

语义分割 modelarts 迁移学习 语义分割算法 迁移分割

华为云UGO正式公测:4大核心优势破解异构数据库迁移难题

华为云开发者联盟

数据库 华为云数据库 异构数据库 对象迁移 应用迁移

用户管理系统 - 用户权限设计从入门到精通

蒋川

后台开发 权限系统 权限管理 权限架构 用户管理

Rust从0到1-面向对象编程-概念

rust oop 面向对象编程

🐬【MySQL技术导航】常用函数介绍(1)

洛神灬殇

MySQL 7月日更

微信朋友圈高性能复杂度分析

木云先森

架构实战营

【LeetCode】两个链表的第一个公共节点Java题解

Albert

算法 LeetCode 7月日更

Redis 的集群容错与故障转移

U+2647

redis redis哨兵模式 集群 redis cluster Leader

国内首家入驻统信系统的APaaS厂商

明道云

char+char=number

喵叔

7月日更

“吴痛针灸”代言人翻车,为什么女性会重新定义品牌优势

脑极体

现代企业架构师的5大特征及六种方法

禅道项目管理

架构 数据 开发 创新 行业趋势

大数据实战训练营作业二

Clarke

大数据实战训练营作业一

Clarke

【软件测试转型自动化测试001】Python环境搭建&语法规则

程序员阿沐

Python 软件测试 自动化测试 环境搭建 语法规则

【Flutter 专题】80 初识 Flutter Stream (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

MERN堆栈

DisonTangor

node.js mongodb React Express

Vue进阶(幺玖肆):localStorage应用总结

No Silver Bullet

Vue LocalStorage 7月日更

Vue进阶(三十五):watch监听函数详解

No Silver Bullet

Vue 7月日更 watch

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