又是新的一年了,距离上一次写文章已经过了2个多月了,作为新年的第一篇文章,对最近使用SLB的心得进行总结,作为以后备注,也可以让各位读者少走一点坑。

SLB使用的是阿里云的服务,服务A有多个实例部署在不同服务器上的docker容器中。对外通过SLB进行负载,调用方只需要通过访问SLB就可以将请求均匀的分布到不同服务器的A服务中。

阿里云同时还提供接口的方式操作SLB,可以动态的上下线服务,官方文档:https://help.aliyun.com/document_detail/27566.html?spm=5176.10609282.905295.38.6b0d3801v5OcOg 这里主要使用到了AddBackendServers和RemoveBackendServers对SLB进行操作,在应用发布前,调用RemoveBackendServers将此服务器从SLB中摘除,等待发布完成后,调用AddBackendServers将服务挂载到SLB,这样就可以实现滚动发布了。(接口调用都已经集成到Jenkins上了,只需要在Jenkins上点击发布就好)。

这种方式使用了几天后,在我们的ELK监控上就发现了问题,在每次下线服务后,调用方就会报出好几个超时错误SocketTimeoutException,而且通过监控可以看出在每次下线服务器后都会报出同样的错误。

经过一番调查后发现,直接摘除后端服务的话,会导致当前已经连上的请求直接被中断,所以客户端就会接连报出超时错误。

问题找到了,就非常好解决了。在AddBackendServers接口中发现可以设置权值,于是将发布流程优化成:

  1. 将需要发布的服务器的权值设置为0(防止新的流量进入)
  2. 等待一段时间(SLB设置的超时时间)+2s,(确保之前的请求都完成了)
  3. 将此服务器从SLB上摘除
  4. 进行服务发布
  5. 将服务器挂载到SLB上
  6. 设置权值

通过以上步骤优化后,就再也没有出现过之前的错误了,完美的实现了滚动发布。

在调查的过程中,还看到了官方的最佳实践:https://helpcdn.aliyun.com/document_detail/57399.html 官方使用的是通过心跳监测机制,将SLB自动剔除。但是这种通过文件的方式在目前容器化的服务中是行不通的,而且也复杂了,可以优化成:

  1. 提供自定义的health接口
  2. 下线前将通过接口调用的方式,通知health接口返回500的错误
  3. 等待SLB心跳多次检测后发现服务不可用,将此服务器标记为异常,且不在转发流量
  4. 发布服务
  5. 等待SLB自动完成心跳检测

总结

以上两种方式都能实现SLB的滚动发布,可以根据实际情况进行选择,各有优缺点,总结如下:

接口方式 health方式
优点 方便控制,可以动态设置权重 除了设置health接口不可用外,无需其他操作
缺点 需要实时注意SLB的超时时间,需要调用SLB的接口 依赖SLB的自动监测机制,跟SLB配置相关大,时间不可控

SLB优雅的滚动发布相关推荐

  1. 灰度(金丝雀)发布、蓝绿部署、滚动发布

    概念 一.灰度(金丝雀)发布 定义 灰度发布又叫金丝雀发布,只升级部分服务,即让一部分用户继续用老版本,一部分用户开始用新版本,如果用户对新版本没什么意见,那么逐步扩大范围,把所有用户都迁移到新版本上 ...

  2. k8s 不宕机滚动发布实战笔记

    背景 对于业务和产品来讲,随时都有紧急小版本功能上线,对于研发人员来讲,线上如果有一些紧急的bug,都需要随时发版修正:而对于产品使用用户来讲,任何的功能和版本发布,要尽可能对用户无感知. 方案 灰度 ...

  3. 蓝绿部署、滚动发布和灰度发布

    转自地址:什么是蓝绿部署.滚动发布和灰度发布? - 知乎 1.springcloud 微服务灰度发布策略 现有Spring Cloud微服务痛点 如果你是运维负责人,是否会经常发现,你掌管的测试环境中 ...

  4. SpringCloud 优雅下线+灰度发布

    点击上方"程序猿技术大咖",关注并选择"设为星标" 回复"加群"获取入群讨论资格! 前言 在生产环境中,如何保证在服务升级的时候,不影响用户 ...

  5. Spring Cloud 优雅下线+灰度发布

    前言 在生产环境中,如何保证在服务升级的时候,不影响用户的体验,这个是一个非常重要的问题.如果在我们升级服务的时候,会造成一段时间内的服务不可用,这就是不够优雅的.那什么是优雅的呢?主要就是指在服务升 ...

  6. 【305期】Spring Cloud 优雅下线+灰度发布

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 文章目录 ...

  7. 蓝绿发布、滚动发布、灰度发布,有什么区别?这下明白了

    欢迎关注方志朋的博客,回复"666"获面试宝典 在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险.目前有 ...

  8. 常用于生产部署方式详解 灰度发布 滚动发布 蓝绿发布

    传统型 这种方式基本上很多中小型企业都在用,尤其是政府或是对企业内部的系统.通常都是直接停服务,将正在运行的程序包备份到指定目录,将新的程序包上传到服务器,停服务,替换老的包,启动服务. 优点: 1. ...

  9. 蓝绿发布、滚动发布、灰度发布,有什么区别?

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 后台回复"k8s",可领取k8s资料 在项目迭代的过程 ...

最新文章

  1. BCH专属“谷歌地图”凸显BCH魅力
  2. mysql执行出错:Table 'k_user' is read only
  3. Linux之文件查找
  4. 使用script命令自动录屏用户操作
  5. dedecms首页怎么调用公司简介的内容
  6. kafkaspot在ack机制下如何保证内存不溢
  7. lol模型导入ue4_Houdini amp; UE4 程序化建模——石头(一)基础工作流
  8. java用while循环语句输出1-100内的奇数和
  9. 城市中计算机控制系统的应用,计算机联锁控制系统在北京城铁中的应用
  10. 这个东西可以温暖你想打BUG的心......
  11. C中的extern-static-const关键词
  12. openssl、gmssl的简单介绍
  13. 阿里云服务器如何使用
  14. 利用FFmpegFrameGrabber截取视频中的某一帧图片压缩并旋转
  15. wps如何设置分段页眉
  16. IE浏览器兼容性问题!(按alt+x+b不弹出兼容性窗口)
  17. 已知三角形三边求面积的c语言程序,已知三角形三边分别为4,5,6,求三角形的面积。用c语言编写程序...
  18. 《计算机网络(谢希仁6版)》学习笔记(word导入)[待补全]
  19. 微软Win10这些黑科技小功能你都用过吗
  20. Kindle进入日本

热门文章

  1. 深入QuickRep
  2. Howto: 黑莓手机上读取AP的MAC地址
  3. Linux的root用户路径
  4. 计算机基础 20A卷,计算机应用基础统考模拟题操作题(全)
  5. opencv 车牌字符分割 ANN网络识别字符
  6. js添加到购物车动画效果实现
  7. sqlserver战德臣_数据库系统基础讲义第06讲SQL语言之概览.pdf
  8. thinkphp5 redis使用
  9. python爬取天天基金_scrapy学习-爬取天天基金网基金列表
  10. 用计算机探索规律的思维导,用计算器探索规律教学设计