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

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 快速学习微服务治理实践之金丝雀发布

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

课程地址: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

相关实践学习
使用DAS实现数据库自动SQL优化
本场景介绍如何使用DAS实现数据库自动SQL优化。
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 
相关文章
|
7天前
|
API 持续交付 开发者
后端开发中的微服务架构实践与挑战
在数字化时代,后端服务的构建和管理变得日益复杂。本文将深入探讨微服务架构在后端开发中的应用,分析其在提高系统可扩展性、灵活性和可维护性方面的优势,同时讨论实施微服务时面临的挑战,如服务拆分、数据一致性和部署复杂性等。通过实际案例分析,本文旨在为开发者提供微服务架构的实用见解和解决策略。
|
8天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
15天前
|
Kubernetes 负载均衡 Docker
构建高效后端服务:微服务架构的探索与实践
【10月更文挑战第20天】 在数字化时代,后端服务的构建对于任何在线业务的成功至关重要。本文将深入探讨微服务架构的概念、优势以及如何在实际项目中有效实施。我们将从微服务的基本理念出发,逐步解析其在提高系统可维护性、扩展性和敏捷性方面的作用。通过实际案例分析,揭示微服务架构在不同场景下的应用策略和最佳实践。无论你是后端开发新手还是经验丰富的工程师,本文都将为你提供宝贵的见解和实用的指导。
|
3天前
|
消息中间件 设计模式 运维
后端开发中的微服务架构实践与挑战####
本文深入探讨了微服务架构在现代后端开发中的应用,通过实际案例分析,揭示了其在提升系统灵活性、可扩展性及促进技术创新方面的显著优势。同时,文章也未回避微服务实施过程中面临的挑战,如服务间通信复杂性、数据一致性保障及部署运维难度增加等问题,并基于实践经验提出了一系列应对策略,为开发者在构建高效、稳定的微服务平台时提供有价值的参考。 ####
|
3天前
|
消息中间件 监控 数据管理
后端开发中的微服务架构实践与挑战####
【10月更文挑战第29天】 在当今快速发展的软件开发领域,微服务架构已成为构建高效、可扩展和易于维护应用程序的首选方案。本文探讨了微服务架构的核心概念、实施策略以及面临的主要挑战,旨在为开发者提供一份实用的指南,帮助他们在项目中成功应用微服务架构。通过具体案例分析,我们将深入了解如何克服服务划分、数据管理、通信机制等关键问题,以实现系统的高可用性和高性能。 --- ###
22 2
|
5天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
14天前
|
监控 Cloud Native Java
云原生架构下微服务治理策略与实践####
【10月更文挑战第20天】 本文深入探讨了云原生环境下微服务架构的治理策略,通过分析当前技术趋势与挑战,提出了一系列高效、可扩展的微服务治理最佳实践方案。不同于传统摘要概述内容要点,本部分直接聚焦于治理核心——如何在动态多变的分布式系统中实现服务的自动发现、配置管理、流量控制及故障恢复,旨在为开发者提供一套系统性的方法论,助力企业在云端构建更加健壮、灵活的应用程序。 ####
61 10
|
9天前
|
Kubernetes Cloud Native API
云原生架构下微服务治理的深度探索与实践####
本文旨在深入剖析云原生环境下微服务治理的核心要素与最佳实践,通过实际案例分析,揭示高效、稳定的微服务架构设计原则及实施策略。在快速迭代的云计算领域,微服务架构以其高度解耦、灵活扩展的特性成为众多企业的首选。然而,伴随而来的服务间通信、故障隔离、配置管理等挑战亦不容忽视。本研究聚焦于云原生技术栈如何赋能微服务治理,涵盖容器编排(如Kubernetes)、服务网格(如Istio/Envoy)、API网关、分布式追踪系统等关键技术组件的应用与优化,为读者提供一套系统性的解决方案框架,助力企业在云端构建更加健壮、可维护的服务生态。 ####
|
9天前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
29 2
|
13天前
|
缓存 运维 监控
后端开发中的微服务架构实践与挑战#### 一、
【10月更文挑战第22天】 本文探讨了微服务架构在后端开发中的应用实践,深入剖析了其核心优势、常见挑战及应对策略。传统后端架构难以满足快速迭代与高可用性需求,而微服务通过服务拆分与独立部署,显著提升了系统的灵活性和可维护性。文章指出,实施微服务需关注服务划分的合理性、通信机制的选择及数据一致性等问题。以电商系统为例,详细阐述了微服务改造过程,包括用户、订单、商品等服务的拆分与交互。最终强调,微服务虽优势明显,但落地需谨慎规划,持续优化。 #### 二、
下一篇
无影云桌面