微服务治理实践之金丝雀发布|学习笔记(三)

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
MSE任务调度普通实例型免费试用套餐,400 元额度,开发版规格
简介: 快速学习微服务治理实践之金丝雀发布

开发者学堂课程【微服务治理实践之金丝雀发布微服务治理实践之金丝雀发布】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/972/detail/14893


下面看 Dubbo ,同样也需要创建一个provider 和 Consumer 。provider 创建如下

image.png

再创一个 dubbo 的 consumer 。

image.png

Dubbo 整按比例灰,按比例看起来更清晰一点,如灰度比例的90%,检测新老版本的比例是否为90%。因为两边一直在跑,所以监控会变化。进入 Dubbo 的 Consumer ,看有没有成功,对外报录为 Sayhello 的方法,如叫 test 。端口为17080是145和86,因为有两个 pod 。

image.png

写一个脚本

image.png

可以看到86和145之间有对应的负载的策略。

image.png

此时对 dubbo 的 provider 做一个按比例的金丝雀发布。

image.png

同样进行部署

image.png

选择金丝雀发布

image.png

对应2.0

image.png

然后按照比例,如90%的比例,90%的流量会路由到灰度的节点。

image.png

灰度规则还未生效,还在部署,所以还是145和86,基本上是55开的比例。

image.png

触发了对应的下线逻辑,所以只会路由到正常的 IP 上。

image.png

等金丝雀部署过程中新创建的三年之后会恢复正常。从比例上看9:1比较明显。

88基本是灰度节点,比例较高,145是正常的节点。可以看一下88是否是对应的灰度的一个破的 IP 。第一个灰度的 IP 就是88。

image.png

因为是按90%的比例去灰度的,可以看一下对应的监控,后面会出来1:9的比例。同样会显示 dubbo 对应的接口,因为报录的是 helloservice ,调的是 sayhello 方法。

image.png

同样可以看代码,其实调用的是helloservice的 sayhello 的方法。

Public interface IHelloService {

调用的是 sayhello 对应的 name 。

@RequestMapping9“/sayHello/name)”

其实调用的是helloservice的 sayhello 的方法。

可能现在请求还不是很多,所以监控还不是特别准确,可以看到这个点,新版本与老版本灰度的比例是 90% 。

 image.png

因为数据量不算特别大,所以监控稍有不准,数据量大了之后,监控会比较准。

如果灰度发布没问题了,可以点击下一批。

image.png

同样还是90%的灰度

点了下一步之后,又触发了无损象限。后面负载会正常。

image.png

点了下一步,在做部署。执行成功变成了88和146。回到了原来的负载策略,变为正常两个 pod ,基本为五五开的比例。

 image.png

简单看代码,是基于是dubbo 2.7.3、2.7.2的。没有加任何对应的依赖,完全是通过 Agent 技术去帮助 double 达到灰度路由的结果。

现在根据监控,基本回到了五五开的比例。

image.png

 

五.金丝雀部署原理image.png

首先用户在控制台上配对应的一些规则,规则会下发到配置中心里,如配了一个 a=1 ,Consumer 去调 provider ,如果满足 a=1 ,会路由到灰度的节点里。如果等于2,不满足条件,会路由到非灰度即正常的实例上。

对于怎么判断这些实例哪些是灰度哪些不是灰度,是通过启动参数去添加的,当 Deployment 里面有一个 Java 的启动参数,会把这些 pod 注册到注册中心上,注册时会设置一些特殊的属性到注册中心里,表示这些 pod 是灰度 pod ,若没有设置说明是一个正常的 pod 。每次路由会拿到配置中心里的配置,解析这些配置去判断是否要路由到灰度的节点上,这大致就是金丝雀部署的原理。因为这种这种方式无论是在 K8S 或是在 ecs 下面都没有问题,因为没有对应的 IP 绑定,最重要的一个点是每次注射以后,会表示这个节点是不是灰度节点。

 

六.金丝雀下一步规划

1.支持更多打标方式

如配置里如果满足某些配置等于什么,则表示这是一个灰度的节点。目前支持启动参数、环境变量。

2.支持更多的灰度规则,更友好的使用方式。

Dubbo 里现在只支持参数的对比,后续如会做 Attachment 对比,path对比。通过Agent 技术去上报 controller 对外暴露了哪些 path ,对这些 path 进行展示,可以选,不填,因为填易出错。

3.支持更多的组件

Spring cloud 把客户端这一层做的像网关Spring cloud gateway 、Netflix Zuul ,目前还没有做这个支持,后续会把金丝雀这个功能完善的更好。

 

七. EDAS 演示金丝雀资料

1.帮助文档 https://help.aliyun.com/document detail/150109.html

EDAS 上有金丝雀部署的一个文档

2.金丝雀发布 https://martinfowler.com/bliki/CanarvRelease.html

金丝雀部署的原理,什么是金丝雀部署

3.EDAS 产品https://cn.aliyun.com/product/edas

EDAS 整个产品的首页

4.Dubbo 路由规则 http://dubbo.apache.org/zh-cn/docs/user/demos/routing-rule.html

Dubbo 开源的路由规则,是如何实现的

5.Spring Cloud LoadBalancer https://spring.io/guides/gs/spring-cloud-loadbalancer/

Spring cloud 两个负载均衡组件

6. Netflix Ribbon https://github.com/Netflix/ribbon

 

八.无损下线

最后一个 EDAS 提供了一个无损下线的功能。即一个 provider 有四个实例,但下线一半,在下线的过程中,要确保不会调用到另外两个下线的实例,如果调了会掉失败,因为已经下线了,这就是无损下线。

开源的无损下线 Spring cloud 有一个办法是需要调一个 Endpoint ,要打开 Actuator ,但是调endpoint 也有一个问题,因为注册中心怎么下线这个实例是对应的注册中心决定,但注册中心有没有真的下线是不知道的,如里面有一些缓存导致虽然下线,但是没有下线成功。Dubbo 同样,QOS也是根据注册中心去做对应的相应操作。还有一点是这两个操作都是需要手动做一些改动的。EDAS对无损下线做了如下增强:

1.所有的流程是完全自动化

2.增强了下线逻辑,不会依赖注册中心。因为刚才提到注册中心的下线并不一定是真的下线,里面可能有一些缓存,导致后续请求有可能会得到已经下线了的 IP ,下线并不完美,因为依赖注册中心。

3.同样是基于 Agent 技术去做,覆盖了Dubbo 2.5 及 Spring cloud D 以上的版本,只要是这个版本之内一行代码都不用改,就可以体验无损下线的功能。

4.在 K8S 或 ECS 场景下都是覆盖到的。

5.不需要 Actuator ,因为开源实现 spring cloud 是需要 Actuator 的,需要加对应的依赖,还要做一些安全性的配置,因为Actuator 不是每个人都可以访问的,可以做一些安全措施。

6.Netflix Ribbon 里面有一个客户端刷新时间,默认是30秒。如果服务上线、下线是。

实时的,但是客户端的刷新时间还是30秒,则只能等30秒。当然也可以配置,EDAS 会增强刷新时间,会增强这个特性,如果有实例上限或实例下限,客户端一定会感知,跟刷新时间没有太大的关系。

简单演示一下,无损下限就本地演示。同样是一个 Consumer 调 provide 的一个例子,是刚才在 EDAS 上跑的例子。脚本写好了,因为目前只有一个实力,再起一个。

如果此时一台实例下线,出现报错,这就是有损下线,下线的过程中客户端拿到了已经下线的实例,导致连接被拒绝,所以并不是一个无损的下线过程,下线过程中造成了一定的资损,就是有损下限。

EDAS 上把这个功能强化了,可以简单看一下。EDAS 现在有一个 provider 和 Consumer 。

image.png

先看一下 Consumer ,此时访问的是80和8 1。

image.png

provider 也是80和81,此时若做一个缩容,两个pod变成一个,则只会变成80,自动把81屏蔽掉。这就是 EDAS 无损下线的功能。

image.png

相关实践学习
通过EDAS实现K8s微服务应用的金丝雀发布
本实验旨在通过使用分布式应用服务EDAS纳管容器服务ACK Serverless,体验微服务应用的部署、访问和高级发布能力。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas 
相关文章
|
2月前
|
运维 持续交付 云计算
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
90 1
|
2月前
|
消息中间件 API 持续交付
后端开发中的微服务架构实践####
【10月更文挑战第21天】 本文深入探讨了微服务架构在后端开发中的应用,从基本概念出发,详细阐述了微服务的核心优势、设计原则及关键技术。通过实际案例分析,揭示了微服务如何助力企业应对复杂业务需求,提升系统的可扩展性、灵活性与可靠性。同时,也指出了实施微服务过程中可能面临的挑战,并提供了相应的解决方案和最佳实践。 ####
40 3
|
6天前
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
51 16
|
2月前
|
弹性计算 持续交付 API
构建高效后端服务:微服务架构的深度解析与实践
在当今快速发展的软件行业中,构建高效、可扩展且易于维护的后端服务是每个技术团队的追求。本文将深入探讨微服务架构的核心概念、设计原则及其在实际项目中的应用,通过具体案例分析,展示如何利用微服务架构解决传统单体应用面临的挑战,提升系统的灵活性和响应速度。我们将从微服务的拆分策略、通信机制、服务发现、配置管理、以及持续集成/持续部署(CI/CD)等方面进行全面剖析,旨在为读者提供一套实用的微服务实施指南。
|
2月前
|
存储 监控 API
深入解析微服务架构及其在现代应用中的实践
深入解析微服务架构及其在现代应用中的实践
78 12
|
1月前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
1月前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
69 3
|
1月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
159 5
|
1月前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
47 1
|
1月前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
49 2