使用CSE实现滚动升级零中断
【摘要】 本文描述了使用CSE开发应用系统如何实施升级零中断以及如何评估效果。
升级零中断存在的问题
要实现升级零中断,通常需要解决如下问题:
1. 停止服务的时候,可能引起业务中断。在停止服务的过程中,可能服务正在处理请求,新的请求可能持续的发送到该服务。
2. 在微服务架构下,一般都会通过注册中心进行服务发现,客户端会缓存实例地址。停止服务的时候,使用者可能无法及时感知实例下线,并继续使用错误的实例进行访问,导致失败。
3. 新服务启动起来后,会存在灰度状态,出现多个版本并存,如果新服务新增加了接口,新升级的服务需要正确的将流量发送到包含新接口的服务。
4. 成本:实现升级零中断,可以先准备大量的备份机器,将新服务启动起来。然后对用户的请求进行引流,待老服务没有流量后,停止老服务。这需要运维人员准备额外的集群资源并开发强大的运维监控系统来完成。
使用CSE框架,可以以极低的成本,不借助运维工具,就能够轻松的实现升级零中断。
使用CSE进行滚动升级的实践和评估
在讨论零中断的时候,需要先设计一个测试评估模型。为了简单,采用下面测试场景来进行评估。调用者通过网关来访问应用实例1和应用实例2,现在要对应用实例进行升级。升级的过程中,调用者会启动N个线程,以Mtps的流量来请求。我们可以以整个升级过程出现的失败次数来评估系统对于零中断升级的支持好坏。为了节省资源,我们采用先停止1.0版本的实例1,然后部署2.0版本的实例1;再停止1.0版本的实例2,最后部署2.0版本的实例2. 另外,我们还需要构造服务端处理时延T,模拟请求正在处理的情况。
在这个过程中,使用CSE测试的数据如下:
实现原理
实现零中断的核心机制包括如下几个:
1. 优雅停机。服务停止的时候,需要等待请求完成,并拒绝新请求;
2. 重试:客户端对于网络连接错误,以及拒绝请求错误,需要选择新服务器进行重试。
3. 隔离:对于失败超过一定次数的服务实例,进行隔离。
在上面的测试数据中,重试策略配置为:
servicecomb:
loadbalance:
retryEnabled: true
retryOnNext: 1
retryOnSame: 0
隔离策略配置为:
servicecomb:
loadbalance:
myservice:
isolation:
enabled: true
enableRequestThreshold: 5
singleTestTime: 10000
continuousFailureThreshold: 2
测试过程中,在停止1.0版本实例2的时候,需要确保2.0版本实例1已经正确处理请求,否则可能出现无实例可用,出现升级中断。
商业工具
上面描述了仅仅借助SDK就实现升级零中断。通过配合CSE的灰度发布、部署工具等,可以实现更加可靠的升级零中断和更好的体验。
相关文章
- 最短路径Dijkstra算法原理及Matlab实现「建议收藏」
- JS实现导航栏下滑悬浮透明置顶
- 数智化赋能装备制造业转型升级,智慧采购商城系统严控采购成本,实现降本增效
- 一个经典例子让你彻彻底底理解java回调机制是什么_java实现回调函数
- 文本聚类简单实现_文本聚类分析
- golang实现IP地址转归属地国家、省份、城市、获取网络运营商-在线客服系统获取访客地址功能【唯一客服】
- 利用Apache commons exec 实现指定应用打开对应文件详解编程语言
- 利用Redis实现分布式存储(redis分布式存储)
- EFI 安装 Linux:实现快速稳定可靠的操作系统(efi安装linux)
- LRU算法的Java实现详解编程语言
- MongoDB实现ERP系统的升级(erpmongodb)
- Linux双IP配置:实现网络功能升级(linux双ip配置)
- MySQL利用时间触发器实现自动定时任务(mysql时间触发器)
- Linux实现用户赋权:让使用者拥有更多的权限(用户赋权Linux)
- Linux下的进程管理:实现有效管理(linux进程管理器)
- 租用可靠的MSSQL服务器,实现业务全面升级(租用mssql服务器)
- MSSQL标识命名规范实现高效管理(mssql标识规范)
- MySQL数据库: 极大优势实现数据管理升级(mysql数据库 的优势)
- CRM系统与MySQL的搭配实现客户管理升级(crm和mysql)
- 将本地Redis升级为服务器,实现更高的性能(本地redis变成服务器)
- Redis值自增升级实现更高性能(更新redis的值自增)
- 开发新电脑上Redis开发实现专业技能升级(新电脑如何做redis)
- XML配置,实现Redis安全访问(xml配置redis密码)
- MySQL实现获取上月日期的方法(mysql 上月日期)
- Redis实现高效灵活的动态升级(redis 配置动态升级)
- Oracle10g升级实现梦想的机遇(oracle10g升级包)
- nginx平滑重启与升级的实现方法