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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 快速学习微服务治理实践之金丝雀发布

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

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


3.EDAS 金丝雀部署

针对上述问题, 总结了该部署的优点如下:

(1)简单易用的应用部署流程。

有一个非常简单的应用部署的流程。

(2)控制台修改规则灰度动态生效。

在控制台上面直接配一些规则,如head中有什么,或可以配一个比例。

(3)完善的监控体系。

有非常完善的监控的体系,可以看发布前后,如 qbs 是多少,kbs 比例是多少,凑了比例是多少,是开元层面完全没有的。

(4)ECS & K8S 场景全部覆盖。

无论是在 ecs 还是 K8S 场景下都是覆盖的,因为如基于固定IP的,其实在 K8S 这个产品是不能服用的。

(5)基于 Agent 技术无需修改代码。覆盖dubbo  2.5.0 ,spring cloud D 以上。

第五点是基于 Agent 的技术做的,契约型的技术类如 dubbo 不同的版本,可能规则不一样,同样Spring cloud ,如果是通过 Agent 技术去做,则不用关心因为 Agent 把所有事情都解决,不需要修改一行的代码。

(6)使用有问题?功能不够?微服务团队帮你解决。

如果认为 EDAS 金丝雀部署功能不够强,微服务团队会帮解决这些问题。

下面演示一下 EDAS 金丝雀部署,应用列表里可以新建一个应用。如可以基于Kubernetes 集群创建一个 JAVA 应用。应用名叫 canary-provider ,需要上传对应的加包,已经准备好了,是一个 Spring cloud G版本的 provider ,版本先选1.0,pod 先选两个,金丝雀灰度一半。

可以简单的看一下应用部署的详情,如可以看有多少监控信息,总需求量,平均响应时间包括错误数,full GC 的次数,微服务中对应的服务,具体的监控信息,这一套监控信息提供的是非常详细的。

image.png

把 Canary-consumer 也创建

image.png

此时因为选了两个 pod ,会自动帮我们分配两个 pod ,有对应的 IP 。

image.png

provider 有一个服务查询的界面,可以看 provider 部署了哪个服务。如 Spring cloud ,刚才部署了一个canary-provider ,里面有个服务叫 canary-service-provider ,对应的是两个IP,可以通过服务查询去看在各个框架上分别部署了哪些服务。

image.png

Consumer 创建好了,可以进入pod ,可以简单的尝试部署有没有成功,端口是18091 user rest 。调成功后返回 IP 为144和83,因为内部会有默认的负载策略。

image.png

144和83的 provider 就是144和83。

image.png

此时如果要做金丝雀部署,应用界面里的部署

image.png

点进去之后有多种部署方式,如分批部署就是一开始介绍过的,即每次部署一批直到部署所有人,分批部署也是支持的。另外一个是金丝雀发布。

image.png

用金丝雀发布演示一下,用2.0版本,出于简便包不改变,因为里面返回的是 IP 。

image.png

看代码,如 consumer 刚才调的,调了user rest ,会传一个 name 参数,会调provider ,把 name 参数传进去。

@Autowired

private Provider1 providerl;

@Autowired

private DiscoveryClient discoveryClient;

@RequestMapping(value = "/user/rest", method = RequestMethod.GET)

public String rest(HttpServletRequest request) {

String name = request .getParameter(s:”name”);

if(stringutiis,isEmpty(name) ) {

name ="gg";

}

String str1 = restTemplate . getForObject ( url:"http://canary-service-prow

String.class);

return str1;

}

@RequestMapping(value = “/service", method = RequestMethod.GET)

"ovider1;

ient discoveryclient;

je = "/user/rest", method =RequestMethod.GET) ittpServletRequest request ) {  

equest.getParameter( s:“name");

isEmpty(name)) {

estTemplate.getForObject( url:"http://canary-service-provider/usename=" + name.

如传一个 name ,叫 test 。

每次返回 IP 是对应 provider 上的两个pod ,是正常现象,因为现在还没做部署。

image.png

此时做一次金丝雀部署,因是一个parameter ,名字是 name ,等于 test 之后就是一个灰度,即满足了这个条件之后会路由到灰度的节点。

image.png

此时做一个部署,继续调因为还在部署,完全下线,所以仍一直返回这两个 IP 。

image.png

直到只返回了83,说明金丝雀生效了。

image.png

如果再改一下对应的参数,因为设置的为 name 等于 test 时会路由到灰度的节点,那如果为 testi 。

image.png

85是第一次部署灰度

image.png

因为85还没上线,所以 Agent 会有无损参与的保护措施。所以第一次部署的是85,一个灰度节点。到灰度结点以后 test 是满足的,所以一直返回的是85。

image.png

可以看对应的监控,因为永远返回的是85,所以新老版本的对比是100:0。

image.png

运行一段时间后看对比会不会变化。现在永远都是新版本。

image.png

再开一个窗口去调老版本,叫 test1 ,会调不是85的那一台,会调到83。

 image.png

一个是永远返回非灰度的实例,一个是永远返回灰度的一个实力。一个是85,一个是83。微后看一监控会不会变化。因为监控有延迟,里面可以比较新老版本的错误数、RT等,会精确到对应的接口。因为代码中访问的是 user ,所以会自动解析出 pass 请求的数据。由图新老版本一个是62,一个37。

image.png

因为一开始是较早跑的,所以数据会稍大一点,若跑久了,大概是5:5的概率。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
16天前
|
Kubernetes 安全 Java
构建高效微服务架构:从理论到实践
【4月更文挑战第9天】 在当今快速迭代与竞争激烈的软件市场中,微服务架构以其灵活性、可扩展性及容错性,成为众多企业转型的首选。本文将深入探讨如何从零开始构建一个高效的微服务系统,覆盖从概念理解、设计原则、技术选型到部署维护的各个阶段。通过实际案例分析与最佳实践分享,旨在为后端工程师提供一套全面的微服务构建指南,帮助读者在面对复杂系统设计时能够做出明智的决策,并提升系统的可靠性与维护效率。
|
1月前
|
消息中间件 敏捷开发 运维
构建高效可靠的微服务架构:策略与实践
随着现代软件开发的复杂性增加,微服务架构逐渐成为企业解决大型应用系统分解、敏捷开发和持续部署问题的有效手段。本文深入探讨了构建一个高效且可靠的微服务架构的关键策略,包括服务的合理划分、通信机制的选择、数据一致性保障以及容错处理。通过分析这些策略在具体案例中的应用,我们旨在为开发者提供一套可行的微服务设计及实施指南。
132 6
|
8天前
|
消息中间件 运维 监控
现代化软件开发中的微服务架构设计与实践
本文将深入探讨现代化软件开发中微服务架构的设计原则和实践经验。通过分析微服务架构的优势、挑战以及常见的设计模式,结合实际案例,帮助开发者更好地理解如何构建可靠、可扩展、高效的微服务系统。
|
8天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
12天前
|
Kubernetes 监控 Cloud Native
构建高效云原生应用:基于Kubernetes的微服务治理实践
【4月更文挑战第13天】 在当今数字化转型的浪潮中,企业纷纷将目光投向了云原生技术以支持其业务敏捷性和可扩展性。本文深入探讨了利用Kubernetes作为容器编排平台,实现微服务架构的有效治理,旨在为开发者和运维团队提供一套优化策略,以确保云原生应用的高性能和稳定性。通过分析微服务设计原则、Kubernetes的核心组件以及实际案例,本文揭示了在多变的业务需求下,如何确保系统的高可用性、弹性和安全性。
16 4
|
21天前
|
消息中间件 监控 API
构建高性能微服务架构:从理论到实践
【4月更文挑战第4天】 在当今互联网应用的快速迭代和高并发需求下,传统的单体应用架构已不足以满足市场的灵活性与扩展性要求。微服务架构以其独立部署、弹性伸缩、技术多样性等优势,成为众多企业转型升级的首选方案。本文将深入探讨如何构建一个高性能的微服务系统,涵盖关键组件的选择、系统设计的考量以及性能优化的策略,旨在为开发者和架构师提供一套实用的指导思路和具体实践步骤。
|
24天前
|
消息中间件 安全 API
构建高效微服务架构:策略与实践
【4月更文挑战第1天】在数字化转型的浪潮中,微服务架构已成为企业追求敏捷、可扩展和灵活部署的重要技术手段。本文将深入探讨如何通过合理的设计原则和先进的技术栈,构建一个高效的微服务系统。我们将剖析微服务设计的核心要点,包括服务的划分、通信机制、数据一致性以及安全性问题,并结合案例分析,展示如何在现实世界中应用这些策略以提升系统的可靠性和性能。
|
24天前
|
设计模式 API 持续交付
构建高效微服务架构:从理论到实践
在当今快速迭代和部署的软件开发环境中,微服务架构已成为一种流行的设计模式,它允许开发团队以模块化的方式构建、维护和扩展应用程序。本文将深入探讨微服务的核心概念,包括其定义、优势、挑战以及如何在实际项目中实施。我们将通过一个实际案例来展示如何将传统的单体应用拆分成一系列独立、松耦合的服务,并通过容器化、服务发现、API网关和持续集成/持续部署(CI/CD)等技术手段来管理这些服务。
|
1月前
|
消息中间件 缓存 API
微服务架构下的API网关性能优化实践
在现代的软件开发中,微服务架构因其灵活性和可扩展性被广泛采用。随着服务的细分与增多,API网关作为微服务架构中的关键组件,承担着请求路由、负载均衡、权限校验等重要职责。然而,随着流量的增长和业务复杂度的提升,API网关很容易成为性能瓶颈。本文将深入探讨API网关在微服务环境中的性能优化策略,包括缓存机制、连接池管理、异步处理等方面的具体实现,旨在为开发者提供实用的性能提升指导。