45

0代码实现滚动升级不断服

 5 years ago
source link: http://dockone.io/article/8750?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

升级不断服存在的问题

要实现升级不断服,通常需要解决如下问题:

停止服务的时候,可能引起业务中断。在停止服务的过程中,可能服务正在处理请求,新的请求可能持续的发送到该服务。

在微服务架构下,一般都会通过注册中心进行服务发现,客户端会缓存实例地址。停止服务的时候,使用者可能无法及时感知实例下线,并继续使用错误的实例进行访问,导致失败。

新服务启动起来后,会存在灰度状态,出现多个版本并存,如果新服务新增加了接口,新升级的服务需要正确的将流量发送到包含新接口的服务。

成本:实现升级不断服,可以先准备大量的备份机器,将新服务启动起来。然后对用户的请求进行引流,待老服务没有流量后,停止老服务。这需要运维人员准备额外的集群资源并开发强大的运维监控系统来完成。

使用CSE框架,可以以极低的成本,不借助运维工具,就能够轻松的实现升级不断服

使用CSE进行滚动升级的实践和评估

在讨论不断服的时候,需要先设计一个测试评估模型。为了简单,采用下面测试场景来进行评估。调用者通过网关来访问应用实例1和应用实例2,现在要对应用实例进行升级。升级的过程中,调用者会启动N个线程,以Mtps的流量来请求。我们可以以整个升级过程出现的失败次数来评估系统对于不断服升级的支持好坏。为了节省资源,我们采用先停止1.0版本的实例1,然后部署2.0版本的实例1;再停止1.0版本的实例2,最后部署2.0版本的实例2。另外,我们还需要构造服务端处理时延T,模拟请求正在处理的情况。

QrUZJb6.jpg!web

在这个过程中,使用CSE测试的数据如下:

调用者线程数N 调用者流量M 处理时延T 失败次数

10 20tps 无 0

10 80tps 无 0

10 600tps 无 0

10 80tps 100ms 0

实现原理

实现不断服的核心机制包括如下几个:

优雅停机:服务停止的时候,需要等待请求完成,并拒绝新请求;

重试:客户端对于网络连接错误,以及拒绝请求错误,需要选择新服务器进行重试。

隔离:对于失败超过一定次数的服务实例,进行隔离。

在上面的测试数据中,重试策略配置为:

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的灰度发布、部署工具等,可以实现更加可靠的升级不断服和更好的体验。

更多精彩文章,尽在微服务蜂巢公众号,快来关注我们吧~

f6fIf2R.jpg!web


Recommend

  • 56

    这篇文章发布于 2018年07月14日,星期六,23:55,归类于css相关。 阅读 75 次, 今日 75 次 byzhangxinxu from https://www.zhangxinxu.com/wordpress/?p=7792

  • 18
    • 微信 mp.weixin.qq.com 4 years ago
    • Cache

    HBase升级|滴滴HBase大版本滚动升级之旅

    桔妹导读:滴滴HBase团队日前完成了0.98版本 -> 1.4.8版本滚动升级,用户无感知。新版本为我们带来了丰富的新特性,在性能、稳定性与易用性...

  • 15
    • renyugang.blog.csdn.net 3 years ago
    • Cache

    Android两种方式实现横向滚动图标+指示器

    Android两种方式实现横向滚动图标+指示器 ...

  • 18
    • www.cnblogs.com 3 years ago
    • Cache

    使用纯 CSS 实现滚动阴影效果

    开门见山,有这样一种非常常见的情况,对于一些可滚动的元素而言。通常在滚动的时候会给垂直于滚动的一侧添加一个阴影,用于表明当前有元素被滚动给该滚出了可视区域,类似这样:

  • 4

    background-attachment实现滚动阴影效果 2021年3月12日 416次浏览 之前文章视觉差效果制作,用到了background-attachment,今天用background-attachment实现滚...

  • 4

    小tip: 纯CSS实现视差滚动效果 浏览:2147次  出处信息 一、效果Demo先行~...

  • 1
    • www.qikqiak.com 2 years ago
    • Cache

    Kubernetes Deployment滚动升级

    我们k8s集群使用的是1.7.7版本的,该版本中官方已经推荐使用Deployment代替Replication Controller(rc)了,Deployment继承了rc的全部功能外,还可以查看升级详细进度和状态,当升级出现问题的时候,可以使...

  • 2

    华富吉丰60天滚动持有中短债(主代码:013522)调整业务金额限制 自2022年11月16日起,暂停接受单个基金账户对本基金日累计金额50万元以上(不含50万元,A类及C类金额合并计算)的申购、定投、转换转入业务申...

  • 5
    • www.51cto.com 1 year ago
    • Cache

    一文看懂K8S中的滚动升级

    一文看懂K8S中的滚动升级 作者:张汉珍 2022-11-24 14:32:00 随着云原生的普及,越来越多的公司已经使用K8S进行容器编排和管理,在分布式微服务场景下,滚动升级是一种自动化程度较高的主流发布方式,能做到服务更...

  • 4

    微信小程序获取页面滚动到底部代码 发布:3小时前 更新:3小时前...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK