AWS EC2 微服务 金丝雀发布(Canary Release)方案
为什么需要实现金丝雀发布?
在当前项目的工程实践中, 已经有了充分的单元测试, 预发布环境测试, 但是还是会在线上环境出现非预期的情况, 导致线上事故, 因此, 为了提升服务质量, 需要线上能够有一个预验证的机制.
如何实现金丝雀发布?
使用AWS code deploy方案
AWS code deploy 原生支持蓝绿部署, 用户只需要在配置中,配置好服务相关的检查策略,切换策略就可以轻松地使用, 公司内部也有团队已经使用了code deploy的方案.
但是由于当前公司内部有自己封装的EC2 服务的发布组件, 如果使用code deploy的方案, 当前微服务相关的组件都需要手动重新定义, 修改的工作量比较大.
于是舍弃了code deploy的方案, 尝试寻找其他方案.
使用Envoy proxy方案
Envoy 是一个类似Nginx的反向代理的中间件, 包含了对镜像请求等高级网络功能的原生支持.
Step 0: 部署之前的架构
外部的请求通过ELB, 转发到EC2内的nginx上, nginx反向代理到真正的服务, 这里的service使用的是旧版本代码打包的docker镜像.
Step 1: 使用新代码创建新的临时的stack
旧的stack依旧使用旧的image, 新创建的临时stack使用新版本的代码打包的docker image, 两套服务都会使用相同的RDS资源, 保证验证的一致性, 这里需要注意的是, 我们的这个服务只是提供数据暴露的接口, 也就是只读, 需要保证服务的幂等性才能使用该方案.
Step 2: 更新当前的stack使用Envoy proxy
将nginx替换为envoy proxy, envoy proxy有几个关键的配置:
- 配置镜像请求的host地址
- 配置镜像请求的比例
- request timeout的时间需要与之前nginx配置的一致
如果请求量比较高,可以适当减少镜像请求比例,因为过高的比例会导致流量到达RDS,增加RDS的负载. 如果服务本来请求量较低,配置了较低的比例,会导致没有足够的请求来对新的服务进行验证.
Step 2-1: 等待验证窗口结束
设置一个合理的验证窗口, 太长导致新代码上线太慢, 太短无法进行有效验证.
Step 3: 对新的服务执行结果进行验证
这里对临时stack的ELB的alart状态进行验证, alart触发对应的条件是: 如果有任何的请求出现5XX错误,会触发alart.
如果触发alart, 则停止部署.
如果检查正常,继续执行将部署,将现有的stack中的envoy proxy再切换回nginx, 将服务替换为已经在线上环境验证过的新的docker image.
至此, 新的代码已经成功上线,并且在线上做了金丝雀验证.
Step 4: 删除临时的stack
清理之前创建的临时stack
Additional step: 部署失败回滚策略
在step 3的验证过程中, 可能会出现验证失败的情况, 由于当前线上的服务已经被更新成了envoy作为proxy, 并且会将流量持续转发到临时temp的服务上, 在实际的性能测试中, envoy proxy的性能是低于nginx的, 所以, 需要手动部署之前版本的代码, 将当前使用的stack中的代理切换回nginx.
同时, 部署失败之后, 临时的stack已经没有再使用了, 也需要手动进行删除.
总结
AWS 提供了code deploy 支持蓝绿部署, 但受限于已经集成了现有组件, 我们使用了Envoy proxy的流量镜像功能, 实现了金丝雀部署. 本文主要介绍了详细的部署,验证,回滚步骤.
相关文章:
AWS EC2 微服务 金丝雀发布(Canary Release)方案
为什么需要实现金丝雀发布? 在当前项目的工程实践中, 已经有了充分的单元测试, 预发布环境测试, 但是还是会在线上环境出现非预期的情况, 导致线上事故, 因此, 为了提升服务质量, 需要线上能够有一个预验证的机制. 如何实现金丝雀发布? 使用AWS code deploy方案 AWS code…...
2025年5月华为H12-821新增题库带解析
IS-IS核心知识 四台路由器运行IS-IS且已经建立邻接关系,区域号和路由器的等级如图中标记,下列说法中正确的有? R2和R3都会产生ATT置位的Level-1的LSPR1没有R4产生的LSP,因此R1只通过缺省路由和R4通信R2和R3都会产生ATT置位的Leve1-2的LSPR2和…...
从单体架构到微服务:架构演进之路
引言:当“大货车”遇上“集装箱运输” 在软件开发领域,单体架构曾像一辆载满货物的大货车,将所有功能打包在一个应用中。但随着业务复杂度飙升,这辆“大货车”逐渐陷入泥潭:启动慢如蜗牛、故障波及全局、升级如履薄冰……...
从 Excel 到 Data.olllo:数据分析师的提效之路
背景:Excel 的能力边界 对许多数据分析师而言,Excel 是入门数据处理的第一工具。然而,随着业务数据量的增长,Excel 的一些固有限制逐渐显现: 操作容易出错,难以审计; 打开或操作百万行数据时&…...
Uniapp开发鸿蒙购物项目教程之样式选择器
大家好,今天依然为大家带来鸿蒙跨平台开发教程的分享,我们本系列的教程最终要做一个购物应用,通过这个项目为大家分享uniapp开发鸿蒙应用从配置开发环境到应用打包上架的完成过程。 昨天的文章实现了应用首页的轮播图,其中涉及到…...
AI全域智能监控系统重构商业清洁管理范式——从被动响应到主动预防的监控效能革命
一、四维立体监控网络技术架构 1. 人员行为监控 - 融合人脸识别、骨骼追踪与RFID工牌技术,身份识别准确率99.97% - 支持15米超距夜间红外监控(精度0.01lux) 2. 作业过程监控 - UWB厘米级定位技术(误差<0.3米&…...
协作赋能-1-制造业生产流程重构
制造业生产流程重构——从“信息孤岛”到“全链协同” 在制造业的数字化转型浪潮中,一个看似矛盾的现象正在蔓延:企业部署了ERP、MES、PLM等管理系统,却仍未摆脱“纸质工单满天飞、跨部门扯皮不断”的困境。以汽车制造业为例,其…...
游戏行业DDoS攻击类型及防御分析
游戏行业作为DDoS攻击的高发领域,攻击类型复杂多样,结合多个来源的信息,以下是其主要攻击类型及特征分析: 1. 传统流量型DDoS攻击 UDP洪水攻击:通过大量UDP报文淹没服务器端口,消耗带宽资源,导…...
嵌入式学习的第二十一天-数据结构-双向链表
一、双向链表 1.定义 双向链表是在单链表的每个结点中,再设置一个指向其钱去节点的指针域。 typedef struct DulNode {ElemType date;struct DulNode *pri;//直接前驱指针sturct DulNode *next;//直接后继指针 }DulNode,*DuLinkList;2.双向链表的创建 …...
Python爬虫第21节- 基础图形验证码识别实战
目录 前言 一、学习目标 二、环境准备 2.1 安装依赖 2.2 验证安装 三、获取验证码图片 3.1 常见获取方式 3.2 图片格式要求 四、基础识别流程 4.1 基础流程 4.2 常见问题及解决方案 五、 图像预处理提升识别率 5.1 灰度化 5.2 二值化 5.3 自定义阈值二值化 5.4…...
【React全栈进阶】从组件设计到性能优化实战指南
目录 🌟 前言🏗️ 技术背景与价值🩹 当前技术痛点🛠️ 解决方案概述👥 目标读者说明 🧠 一、技术原理剖析📊 核心概念图解💡 核心作用讲解🔧 关键技术模块说明⚖️ 技术选…...
基于EFISH-SCB-RK3576/SAIL-RK3576的消防机器人控制器技术方案
(国产化替代J1900的应急救援智能化解决方案) 一、硬件架构设计 极端环境防护系统 防爆耐高温设计: 采用陶瓷纤维复合装甲(耐温1200℃持续1小时),通过GB 26784-2023消防设备防爆认证IP68防护等级…...
插件双更新:LeetCode 刷题支持正式上线,JetBrains IDE 插件持续升级!
为了让更多开发者在真实开发与算法练习中体验 MoonBit 的高效表达与编译性能,MoonBit 语言现已实现对 JetBrains 开发环境与 LeetCode 答题平台的全面支持! 无论你是习惯用 IDE 编写项目的开发者,还是希望通过 LeetCode 刷题提升算法能力的程…...
编译OpenSSL时报错,Can‘t locate IPC/Cmd.pm in @INC perl环境
Unix / Linux / macOS $ ./Configure $ make $ make test1、make Can‘t locate IPC/Cmd.pm in INC [ Downloads ] - /source/index.html https://www.openssl.org/source/ yum -y install perl-IPC-Cmd 2.make test Can’t locate Test/More.pm in INC perl环境 yum -…...
新型智慧园区技术架构深度解析:数字孪生与零碳科技的融合实践
🏭在杭州亚运村零碳园区,光伏板与氢燃料大巴构成的能源网络,正通过数字孪生技术实现智能调度。这不仅是格力电器与龙源电力在新能源领域的创新实践,更是智慧园区4.0时代的标杆案例。当AI算法开始接管能源调度,当BIM建模…...
2025全网首发:ComfyUI整合GPT-Image-1完全指南 - 8步实现AI图像创作革命
ComfyUI整合GPT-Image-1完全指南:8步实现AI图像创作革命【2025最新】 OpenAI最新发布的GPT-Image-1模型(也就是ChatGPT-4o背后的图像生成技术)已经通过API开放使用,而令人惊喜的是,ComfyUI已经第一时间提供了完整支持&…...
AWS Elastic Beanstalk控制台部署Spring极简工程
问题 上次通过EB CLI工具没有成功在AWS中国云部署成功,这次通过EB web控制台来部署。 步骤 接着上次部署失败的Spring工程:AWS Elastic Beanstalk部署极简Spring工程(EB CLI失败版),准备好jar文件。 创建ec2私钥文…...
力扣-236.二叉树的最近公共祖先
题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以…...
LeetCode 3337.字符串转换后的长度 II:矩阵快速幂(也没有想象中的那么高级啦)
【LetMeFly】3337.字符串转换后的长度 II:矩阵快速幂(也没有想象中的那么高级啦) 力扣题目链接:https://leetcode.cn/problems/total-characters-in-string-after-transformations-ii/ 给你一个由小写英文字母组成的字符串 s,一个整数 t 表…...
【iOS】源码阅读(四)——isa与类关联的原理
文章目录 前言OC对象本质探索clang探索对象本质objc_setProperty源码探索 cls与类的关联原理为什么说bits与cls为互斥关系isa的类型isa_t原理探索isa与类的关联 总结 前言 本篇文章主要是笔者在学习和理解类与isa的关联关系时所写的笔记。 OC对象本质探索 在学习和理解类与isa…...
elementUI 循环出来的表单,怎么做表单校验?
数据结构如下: diversionParamList: [ { length: null, positionNumber: null, value: null, } ] 思路:可根据 index 动态绑定 :props 属性值,校验规则写在:rules <div class"config-item" v-for"(item, index) in form.…...
蓝桥杯11届国B 约数
题目描述 定义阶乘 n!123⋅⋅⋅n。 请问 100! (100 的阶乘)有多少个正约数 100! 是所有从 1 到 100 的数的乘积,因此: 质数 j 在 100! 中的总指数 质数 j 在 1 中的指数 质数 j 在 2 中的指数 ... 质数 j 在 100 中的指数 …...
【iOS】alloc的实际流程
目录 前言 为什么不按源码流程调用? alloc的调用流程 前言 在之前的博客中我们有学习到过alloc的底层原理,沿着源码一步步找到了alloc的调用链——alloc—>_objc_rootAlloc—>callAlloc—>_objc_rootAllocWithZone—>_class_createInstan…...
Maven clean 提示文件 java.io.IOException
Maven clean 提示文件 java.io.IOException 问题背景问题分析&处理问题总结 问题背景 今天在一个功能开发结束之后,准备通过Maven实现打包操作,然后打包完成后部署到测试环境进行测试。在IDEA开发工具,点击 clean 时提示 Failed to dele…...
QT 使用QPdfWriter和QPainter绘制PDF文件
QT如何生产pdf文件,网上有许多文章介绍,我也是看了网上的文章,看他们的代码,自己琢磨琢磨,才有了本编博客; 其他什么就不详细说了,本篇博客介绍的QPdfWriter和QPainter绘制PDF文件;…...
解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- Manus技术解密
解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- Manus技术解密 如果你从应用程序的角度讲,但是如果我们从模型的角度讲,我们必须让模型既具有这种思考的能力,也具有产出这种最佳的action的这种能力。而且…...
网络安全-等级保护(等保) 2-4 GB/T 22239-2019 《信息安全技术 网络安全等级保护基础要求》-2019-05-10发布【现行】
################################################################################ 等级确定之后,需要根据不同的安全等级满足相关建设要求,《等级保护基础要求》明确了安全物理环境、安全通信网络、安全区域边界、安全计算环境、安全管理中心、安全管…...
Ansys Zemax | 在 MATLAB 或 Python 中使用 ZOS-API 进行光线追迹的批次处理
附件下载 联系工作人员获取附件 这篇文章会说明如何在 MATLAB 或 Python 中以 Zemax OpticStudio 应用程式界面 (ZOS-API)处理光线数据库(Ray Database, ZRD)档案,过程中我们将使用ZRDLoader.dll。本文提供了在 Matlab 中批次处理序列光线追迹(一般、归一化、偏振…...
多链互操作性标准解析:构建下一代区块链互联生态
引言 在区块链技术快速演进的今天,“多链宇宙”已成为不可逆的趋势。然而,链与链之间的孤立性导致流动性割裂、开发成本高昂和用户体验碎片化。互操作性标准的制定,正是打破这一僵局的核心钥匙。本文将深入探讨主流互操作性协议的技术架构、…...
openEuler24.03 LTS下安装MySQL8.0.42
目录 前提步骤 删除原有mysql及maridb数据库 安装MySQL 启动MySQL 启动查看MySQL状态 设置MySQL开机自启动 查看登录密码 登录MySQL 修改密码及支持远程连接 远程连接MySQL 前提步骤 拥有openEuler24.03 LTS环境,可参考:Vmware下安装openEule…...
React 轻量级富文本编辑器推荐(中文版)
以下是几款适合集成到 React 项目中的轻量级富文本编辑器,特别针对中文用户优化推荐: 超轻量级选择(小于100KB) 1. react-simplemde-editor(Markdown编辑器) 特点:专为 Markdown 设计…...
React 第四十一节Router 中 useActionData 使用方法案例以及注意事项
一、useActionData前言 useActionData 是 React Router 提供的一个钩子函数,用于获取在路由的 action 函数中返回的数据。它通常与表单提交(通过 <Form> 组件)配合使用,用于处理表单提交后的服务器响应数据(如错…...
西门子 Teamcenter13 Eclipse RCP 开发 1 工具栏
西门子 Teamcenter13 Eclipse RCP 开发 1 工具栏 1 配置文件2 插件控制3 命令框架 1 配置文件 在 Teamcenter 13 Eclipse RCP 开发中,plugin.xml 是插件的核心配置文件,定义了插件的: 1、唯一身份(ID、版本)。 2、所…...
【python实用小脚本-63】每天花费2小时修复黑白照片,Python一键转换,节省90%时间(建议收藏)
一、应用场景故事 上周,我的朋友小李从家里翻出了一堆老照片,这些照片大多是彩色的,但他想把它们转换成黑白风格,让照片更有复古感。他尝试用Photoshop一张张处理,但花了整整一个周末,才处理了不到一半的照…...
R语言的专业网站top5推荐
李升伟 以下是学习R语言的五个顶级专业网站推荐,涵盖教程、社区、资源库和最新动态: 1.R项目官网 (r-project.org) R语言的官方网站,提供软件下载、文档、手册和常见问题解答。特别适合初学者和高级用户,是获取R语言核心资源的…...
Apache JMeter API 接口压测技术指南
文章目录 前言技术积累JMeter 简介适用场景JMeter 核心组件 安装与配置线程组压测逐步加压压测安装相应jmeter 插件创建测试计划生成压测HTML 总结 前言 Apache JMeter 是一款开源的性能测试工具,主要用于对 Web 应用、API 接口、数据库等进行负载和压力测试。本指…...
【Java实战】IO流(转换流,打印流,数据流,序列化流)
引出问题 不同编码读取出现的乱码问题 如果是代码编码被读取的文本文件的编码是一致的,使用字符流读取文本文件时不会出现乱码; 如果不一致,使用字符流读取文本文件就会出现乱码。 public class BufferedReader{ public static void main(S…...
Python课程及开源项目推荐
Python课程及开源项目推荐 摘要:学习 Python 是一个非常好的选择,因为它是一种功能强大且易于上手的编程语言,广泛应用于数据分析、数据可视化、机器学习、网络爬虫等领域。以下是针对 Coursera 上 Python 课程和专业证书的推荐,以…...
内网互通原则详解!
目录 前言1. 路由 (Routing): 谁去哪儿找谁?🗺️2. 防火墙与安全组 (Firewalls & Security Groups): 门卫大爷和保安系统!👮♂️🚪3. 内网 DNS (Internal DNS): 小区的通讯录/电话本!📒&a…...
[Harmony]大文件持久化
1.添加权限 在module.json5文件中添加权限 "requestPermissions": [{"name": "ohos.permission.READ_WRITE_USER_FILE", // 读写用户数据"reason": "$string:read_write_user_file_reason","usedScene": {"…...
C 语言实战:使用二维数组进行学生成绩统计与分析
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 在处理表格型数据时,二维数组是 C 语言中一种非常直观且强大的工具。学生成绩单就是一个典型的二维数据:每一行代表一个学生,每一列代表一门科目。本文将通过一个具体的案例,演示如何利用二维数组来存…...
[学习]RTKLib详解:tle.c(系列终章)
本文是 RTKLlib详解 系列文章的一篇,目前该系列文章还在持续总结写作中,以发表的如下,有兴趣的可以翻阅。 [学习] RTKlib详解:功能、工具与源码结构解析 [学习]RTKLib详解:pntpos.c与postpos.c [学习]RTKLib详解&…...
体重秤出口日本的计量认证介绍,体脂秤出口日本“正”认证介绍
什么是家庭专用测量仪器? 家庭专用测量仪器是一种非自动秤,主要用于普通消费者的日常生活,并且刻度为10 mg或更大,并且秤号的刻度为100或更大,满足以下条件的: 通用秤 是一种非自动秤,重量超过…...
【hadoop】Flume的相关介绍
1 概述 Flume是Cloudera开发的一个分布式的、可靠的、高可用的系统,它能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化的数据存储系统中。随着互联网的发展,特别是移动互联网的兴起,产生了海量的用…...
图片、音频、视频都能转?简鹿格式工厂了解一下
我们每天都会接触到各种各样的音视频和图片文件。无论是拍摄的照片、录制的视频,还是下载的音频资源,它们往往以不同的格式存在——有些适合分享,有些适合编辑,而有些则仅限特定设备或平台使用。格式不统一的问题,正在…...
doris节点数量规划
1.FE 节点数量 FE 节点主要负责用户请求的接入、查询解析规划、元数据管理及节点管理等工作。 对于生产集群,一般建议部署至少 3 个节点的 FE 以实现高可用环境。FE 节点分为以下两种角色: Follower 节点:参与选举操作,…...
Android Studio中Gradle 7.0上下项目配置及镜像修改
最近在打包一个测试项目的时候,使用的android studio版本比较老,后来升级到2024发现了一些小问题。可能对于安卓程序员来说,司空见惯,但对我这样的安卓小白,可把我折腾了半天。现在记录下来,供比我还小白的…...
Android Studio中Gradle中Task列表显示不全解决方案
问题现象 解决方案 File -> Settings -> Experimental ->勾选Configure all Gradle tasks during Gradle Sync(this can make Gradle Sync slower) 参考文章 Android执行build-gradle中的任务Task...
OneNote内容太多插入标记卡死的解决办法
OneNote内容太多插入标记卡死的解决办法 针对平板电脑的OneNote用户适合此类情况: 当向电脑导入几百页pdf可以正常使用,唯独插入标记的时候OneNote直接罢工,只能关闭。关闭时还可能会出现0x000000fxxxxx的错误。 注:仅对于平板…...
vue3:十三、分类管理-表格--行内按钮---行删除、批量删除实现功能实现
一、实现效果 增加行内按钮的样式效果,并且可以根绝父组件决定是否显示 增加行内删除功能、批量删除功能 二、增加行内按钮样式 1、增加视图层按钮 由于多个表格都含有按钮功能,所以这里直接在子组件中加入插槽按钮 首先增加表格行<el-table-column></el-table-…...