【原创】k8s 微服务滚动发布(服务持续可用)实践笔记
背景
方案
- 灰度发布,自动小批量流量切换。
- 产品层面要切分小版本,研发设计细节上要向上兼容(诸如接口层面)。
- 服务发布要实现滚动发布,发布异常要自动回滚,中间不断服。
k8s 滚动发布方案:
1. 历史实践方案- rancher
2. 现有实践方案 - 阿里云k8s
yml定义文件如图所示:

一. 优雅上线的http状态请求实现
java-stop.sh文件如图所示:

二. 优雅下线的shell脚本实现
- 基于bsf框架底层(业务统一使用的底层基础架构),内部实现对于eureka服务的状态修改及自动下线,从而实现应用进程关闭时通知eureka注销自身应用服务下线。同样也会通知当前生命周期处于stopping状态,从而引发“就绪探针”的就绪状态失效。
- 代码外层逻辑如下:bsf-eurekaStatusFilter
- podstopsleeptime 时间为eureka注销后,默认eureka下线真正生效时间(因为eureka客户端可能有缓存),需要看eureka情况调整。比如eureka需要调优几个参数,其中涉及到eureka消费者端的订阅实例刷新的周期,eureka实例的eureka服务端缓存时间。理论上手工下线后5秒生效,如果手工下线失效,保守时间应该是消费者端实例刷新时间+eureka服务端实例缓存时间=生效时间;在eureka客户端配置如图调优后,考虑设置为10秒。
eureka 调优参考如下:

三. 发布异常检测逻辑实现
发布异常检测处理逻辑如图:

四. 验证滚动发布是否有效
压测工具报告如图所示:
总结:
【原创】k8s 微服务滚动发布(服务持续可用)实践笔记的更多相关文章
- 使用thrift实现订阅服务和发布服务
使用thrift实现订阅服务和发布服务 服务:订阅服务 market_subscriber 和 发布服务 market_publisher功能:market_subscriber 能够向 market ...
- 详解k8s零停机滚动发布微服务 - kubernetes
1.前言 在当下微服务架构盛行的时代,用户希望应用程序时时刻刻都是可用,为了满足不断变化的新业务,需要不断升级更新应用程序,有时可能需要频繁的发布版本.实现"零停机"." ...
- 联想企业网盘:SaaS服务集群化持续交付实践
1 前言 当代信息技术飞速发展,软件和系统的代码规模都变得越来越大,而且组件众多,依赖繁复,每次新版本的发布都仿佛是乘坐一次无座的绿皮车长途夜行,疲惫不堪.软件交付是一个复杂的工程,涉及到软 ...
- 使用dubbo分布式服务框架发布服务及消费服务
什么是DUBBO DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案. 准备工作 安装zookeeper ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服 ...
- 云端基于Docker的微服务与持续交付实践
云端基于Docker的微服务与持续交付实践笔记,是基于易立老师在阿里巴巴首届在线技术峰会上<云端基于Docker的微服务与持续交付实践>总结而出的. 本次主要讲了什么? Docker Sw ...
- 通过Nginx、Consul、Upsync实现动态负载均衡和服务平滑发布
前提 前段时间顺利地把整个服务集群和中间件全部从UCloud迁移到阿里云,笔者担任了架构和半个运维的角色.这里详细记录一下通过Nginx.Consul.Upsync实现动态负载均衡和服务平滑发布的核心 ...
- ServiceStack.Redis订阅发布服务的调用(Z)
1.Redis订阅发布介绍Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式.发布者和订阅者之间使用频 ...
- ServiceStack.Redis订阅发布服务的调用
1.Redis订阅发布介绍 Redis订阅发布是一种消息通信模式:发布者(publisher)发送消息,订阅者(Subscriber)接受消息.类似于设计模式中的观察者模式. 发布者和订阅者之间使用频 ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用
责任链模式的具体应用 1.业务场景 生产车间中使用的条码扫描,往往一把扫描枪需要扫描不同的条码来处理不同的业务逻辑,比如,扫描投入料工位条码.扫描投入料条码.扫描产出工装条码等,每种类型的条码位数 ...
随机推荐
- Filter与Interceptor的区别
前言 在看springboot项目时,其中的会话持续时,了解到token,session,jwt等方法,但是接着我就了解到过滤器(Filter)以及拦截器(Interceptor),感觉这两个东西真的 ...
- FastAPI与Tortoise-ORM开发的神奇之旅
title: FastAPI与Tortoise-ORM开发的神奇之旅 date: 2025/05/05 00:15:48 updated: 2025/05/05 00:15:48 author: cm ...
- 【HUST】网络攻防实践|6_物联网设备固件安全实验|flag2~5速通指南
写在最前:最近没空写报告,实验原理虽然已经摸清了但是没空写.flag2到4是一些大胆的想法的通关方式,flag5是正经通关的.之后写报告的时候会补发正经的实验原理,和flag2到4正常的通关方式. 记 ...
- rust引入含有openssl相关包报错(openssl未找到和编译运行报错等相关问题)解决方案
1. 问题描述 某天在我的rust程序里引入了actix-proxy = "0.2"这个包,我的程序编译通不过了,rust-analyser也罢工了,错误也提示不出来了,查看错误提 ...
- 原生JS表格数据常用总结
主要是在数据报表这块, 做了好几年发现, 其实用户最终想要看的并不是酷炫的BI大屏, 而是最基础也是最复杂的 中国式报表. 更多就是倾向于从表格中去获取数据信息, 最简单的就是最好的, 于是还是来总结 ...
- python任务调度之schedule
本文通过开源项目schedule来学习定时任务如何工作 schedule简介 先来看下做做提供的一个例子 import schedule import time def job(): print(&q ...
- ## 使用C# 6.0中的async/await
异步函数是TPL之上更高级别的抽象,真正简化了异步编程,它与普通函数不一样在于必须有async标识,并且返回类型一般是Task<T>,Task类型,当然也可以使用async void,但更 ...
- 为何PostgreSQL没有聚集索引?解读两大数据库的设计差异
为何PostgreSQL没有聚集索引?解读两大数据库的设计差异 前言 高效的数据检索是数据库管理的基石, PostgreSQL和SQL Server都能提供强大的数据访问方法以支持各种工作负载方面表现 ...
- 如何在FastAPI中实现权限隔离并让用户乖乖听话?
title: 如何在FastAPI中实现权限隔离并让用户乖乖听话? date: 2025/06/18 17:24:12 updated: 2025/06/18 17:24:12 author: cmd ...
- UFT connect sql (1)
两种方法: 第一种: 第二种: