深入剖析全链路灰度技术内幕
k8s技术圈
共 14494字,需浏览 29分钟
· 2021-12-29
微服务架构带来的挑战
Cloud Native
什么是全链路灰度
Cloud Native
基于 Provider 的治理策略。配置 Cart 的流量流入规则,User 路由到 Cart 时使用 Cart 的流量流入规则。
基于 Consumer 的治理策略。配置 User 的流量流出规则, User 路由到 Cart 时使用 User 的流量流出规则。
全链路灰度的解决方案
Cloud Native
链路上各个组件和服务能够根据请求流量特征进行动态路由 需要对服务下的所有节点进行分组,能够区分版本
需要对流量进行灰度标识、版本标识 需要识别出不同版本的灰度流量
标签路由
节点打标
流量染色
分布式链路追踪
逻辑环境隔离——基于 SDK
逻辑环境隔离——基于 Java Agent
逻辑环境隔离——基于 Service Mesh
三种方式对比
如果您倾向于使用无侵入式的 Java Agent 的方式,但又担心自建带来的稳定性问题,您可以选择 MSE 微服务治理产品,该产品是阿里巴巴内部多年在微服务治理领域的沉淀的产出,经历了各种大促考验。
如果您倾向于使用语言无关、无侵入式的 Service Mesh 的方式,但又担心自建带来的稳定性问题,您可以选择阿里云 ASM 产品,相比开源 Istio,在功能性、稳定性和安全性都有很大的提升。
从 0 到 1 实践全链路灰度
Cloud Native
必备的资源列表
已拥有一个 MSE 云原生网关 已拥有一个 MSE Nacos 注册中心
已拥有一个 ACK 运维集群 已开通 MSE 微服务治理专业版
部署 Demo 应用程序
全链路灰度能力是与注册中心无关的,本文用例暂以 MSE Nacos 作为注册中心,所以需要将 spring.cloud.nacos.discovery.server-addr 换成业务自己的 Nacos 注册中心地址 接入云原生网关的服务,如果需要使用灰度发布,需要在发布服务时在元数据信息增加版本标。在我们的例子,服务 A 是需要暴露给网关,所以发布时为基线版本添加spring.cloud.nacos.discovery.metadata.version=base,为灰度版本添加 spring.cloud.nacos.discovery.metadata.version=gray。
# A 应用 base 版本
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-a
name: spring-cloud-a
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-a
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-a
labels:
app: spring-cloud-a
spec:
containers:
env:
name: LANG
value: C.UTF-8
name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
name: spring.cloud.nacos.discovery.server-addr
value: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848
name: spring.cloud.nacos.discovery.metadata.version
value: base
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-a
ports:
containerPort: 20001
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
# A 应用 gray 版本
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-a-new
name: spring-cloud-a-new
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-a-new
strategy:
template:
metadata:
annotations:
gray :
msePilotCreateAppName: spring-cloud-a
labels:
app: spring-cloud-a-new
spec:
containers:
env:
name: LANG
value: C.UTF-8
name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
name: profiler.micro.service.tag.trace.enable
value: "true"
name: spring.cloud.nacos.discovery.server-addr
value: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848
name: spring.cloud.nacos.discovery.metadata.version
value: gray
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-a:0.1-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-a-new
ports:
containerPort: 20001
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
# B 应用 base 版本
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-b
name: spring-cloud-b
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-b
strategy:
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-b
labels:
app: spring-cloud-b
spec:
containers:
env:
name: LANG
value: C.UTF-8
name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
name: spring.cloud.nacos.discovery.server-addr
value: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-b:0.2-demo-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-b
ports:
containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
# C 应用 base 版本
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-c
name: spring-cloud-c
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-c
template:
metadata:
annotations:
msePilotCreateAppName: spring-cloud-c
labels:
app: spring-cloud-c
spec:
containers:
env:
name: LANG
value: C.UTF-8
name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
name: spring.cloud.nacos.discovery.server-addr
value: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-c:0.2-demo-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-c
ports:
containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
# C 应用 gray 版本
---
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: spring-cloud-c-new
name: spring-cloud-c-new
spec:
replicas: 2
selector:
matchLabels:
app: spring-cloud-c-new
template:
metadata:
annotations:
gray :
msePilotCreateAppName: spring-cloud-c
labels:
app: spring-cloud-c-new
spec:
containers:
env:
name: LANG
value: C.UTF-8
name: JAVA_HOME
value: /usr/lib/jvm/java-1.8-openjdk/jre
name: spring.cloud.nacos.discovery.server-addr
value: mse-455e0c20-nacos-ans.mse.aliyuncs.com:8848
image: registry.cn-shanghai.aliyuncs.com/yizhan/spring-cloud-c:0.2-demo-SNAPSHOT
imagePullPolicy: Always
name: spring-cloud-c-new
ports:
containerPort: 8080
protocol: TCP
resources:
requests:
cpu: 250m
memory: 512Mi
完成云原生网关初步配置
curl -H "Host: base.example.com" http://118.31.118.69/a
A[172.21.240.105] -> B[172.21.240.106] -> C[172.21.240.46]
curl -H "Host: base.example.com" -H "x-mse-tag: gray" http://118.31.118.69/a
Agray[172.21.240.44] -> B[172.21.240.146] -> Cgray[172.21.240.147]
总结
Cloud Native
评论
摄像机标定技术及其应用——单目摄像机
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达一、为什么要进行摄像机标定 随着机器视觉的迅猛发展,我们已经不满足于使用摄像机进行监控、抓拍这种较为简单的功能。更多的用户青睐于它在非接触三维尺寸测量上的应用。我们所谓的三维测量是广义的三维测量,它不仅包括三维物体的重构与测量,
小白学视觉
0
搭建完美的技术写作环境,第1-10章
大家好,我是章北海,《机器学习算法与 Python 实战》和《玩机器学习的章北海》号主,985 统计学硕士,5 年时间撰写了 460 余篇优质原创文章,内容涵盖统计学、数据分析、机器学习、深度学习、Python 实战。毕业之后先后从事数据分析、机器学习工程师、项目管理,这些年积累了很多经验,工作之外
机器学习算法与Python实战
0
从原理到实践:掌握DPDK内存池技术
前言:本文整理下之前的学习笔记,基于DPDK17.11版本源码分析。主要分析一下内存管理部分代码。一、概述内存管理是数据面开发套件(DPDK)的一个核心部分,以此为基础,DPDK的其他部分和用户应用得以发挥其最佳性能。本系列文章将详细介绍DPDK提供的各种内存管理的功能。但在此之前,有必要先谈一谈为
开源Linux
0
如此“爬虫”?代码全省了
大家好,我是章北海Jina AI 开源了 RAG 数据处理中的关键组件:“网页数据爬取” ——Reader,目前 3300+ Star⭐️项目地址:https://github.com/jina-ai/readerJina AI Reader 特征:免费使用开源延迟大概 2S 内,复杂的内容可能需要
机器学习算法与Python实战
0
超大规模数据中心网络架构及其技术演变
本文所讲的数据中心网络架构和技术范围是针对典型的大型互联网和云计算公司的超大规模数据中心(Hyperscale Data Center),不一定适合其他类型的数据中心网络。业界对于什么规模才算是“超大规模(Hyperscale”并没有一个精确的定义。一般来说,一个数据中心网络集群至少有 5000台服
数据中心运维管理
0
字节员工:35岁以后被裁员的,后来都走了哪条路?现在2-2,要不要利用最后一年拼命上个岸。
架构师大咖
架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。
公众号该公众号已被封禁在当今竞争激烈的职场环境中,年龄并不总是一个决定性
源码共读
0
特斯拉中国Model Y、S、X全系降价;盒马否认侯毅张勇出价20亿美元联手买下盒马;瑞幸回应“不招聘上海人”
特斯拉中国Model Y、S、X全系降价特斯拉中国Model Y售价降至24.99万元人民币,MODEL Y长续航版售价降至29.09万元人民币。特斯拉中国 MODEL Y高性能版售价降至35.49万元人民币。特斯拉中国MODEL S售价降至68.49万元人民币。特斯拉中国 MODEL S PLAI
亿欧网
0
互联网晚报 | 央视发文谈调休:原则是最小干预;特斯拉中国全系降价;二手交易平台现大量转卖SU7创始车型订单
央视发文谈调休:原则是最小干预“五一其实只放一天”近日冲上热搜,再度引发“假期该不该调休”的热议。如何调休,也有讲究。一个基本原则是,“最小干预,尽量不打乱人们的正常生活节奏”。我国现行法定节假日总天数为11天,周末休息104天,带薪休假5~15天,总假期天数在国际上处于中等偏上水平。专家指出,“之
产品刘
0