有没有在北京面试java的小伙伴,每家公司面试问的问题都不一样,昨天面试官问到了
灰度发布
,一脸懵,好像在哪儿听说过,毕竟我都没发布过,之前都是项目组长在干这些事儿,所以聊聊,了解一下
什么是灰度发布
-
全量发布:把旧服务kill掉,把新服务启动,这个过程就可以理解为全量发布
-
回滚周期长
如果我们更新完应用之后,我们做线上回归测试的时候发现有BUG,这个时候就要做回滚,过程就是把新服务kill掉,再把旧服务启动,这个过程的整个服务是挂掉的,不会提供服务的,那么在这段时间服务就是不可用的,就会导致
一部分的用户群体流失
,这个问题是非常严重的 -
一些BUG可能会导致服务集群雪崩
在实际生产中部署了不止一台机器,因为要做高可用,可能部署了两台以上的机器,假设代码中有一个内存泄漏的代码,内存泄漏可能刚刚部署看不到这个问题,在经过了几天或者一周之后,会导致我们整个新版本的服务集群全线宕机,这个问题也是非常严重的。
我们在新版本上面去做回滚的时候会比我们BUG回归的回滚时间更长, 总的导致一个问题就是我们的服务可用性差了。
我们在一些互联网公司,服务可用性要做到
99.999%
。 -
-
灰度发布
-
降低发布影响面
集群里拿出一台机器部署一个新版本,然后放一部分内测流量(用户)进来,如果在这个新的版本发现了问题之后,就可以直接把那一小部分流量直接转到我们的旧版上面,它的影响面也仅在那一部分小的群体
-
可以做到不停机迁移
从集群中拿一台机器更新到新版再放流量进来,这是不会影响集群中的其他服务的
-
回滚速度快
-
灰度发布, 也叫金丝雀发布。是指在黑与白之间,能够平滑过渡的一种发布方式。AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。
灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,而我们平常所说的金丝雀部署也就是灰度发布的一种方式。
具体到服务器上,实际操作中还可以做更多控制,譬如说,给最初更新的10台服务器设置较低的权重、控制发送给这10台服务器的请求数,然后逐渐提高权重、增加请求数。一种平滑过渡的思路, 这个控制叫做“流量切分”
。
核心组件说明
- 注册中心: Nacos
- 网关: SpringCloudGateway
- 负载均衡器: Ribbon (使用SpringCloudLoadBalancer实现也是类似的)
- 服务间RPC调用: OpenFeign
灰度发布代码实现
要实现Spring Cloud项目灰度发布技术方案有很多,重点在于服务发现,怎么将灰度流量只请求到灰度服务,这里我们会使用Nacos作为注册中心和配置中心,核心就是利用Nacos的Metadata设置一个version值,在调用下游服务是通过version值来区分要调用那个版本,这里会省略一些流程,文章末尾提供了源码地址需要自提。
在请求进入网关时开始对是否要请求灰度版本进行判断,通过Spring Cloud Gateway的过滤器实现,在调用下游服务时重写一个Ribbon的负载均衡器实现调用时对灰度状态进行判断。
kerwin:
tool:
gray:
gateway:
## 是否开启灰度发布功能
enabled: true
## 自定义灰度版本请求头
grayHeadKey: gray
## 自定义灰度版本请求头匹配值
grayHeadValue: gray-996
## 使用灰度版本IP数组
grayIPList:
- '127.0.0.1'
## 使用灰度版本城市数组
grayCityList:
- 本地
md看了半天,知识点有点多,有些复杂了,不是我这个水平能够掌握的
总结一下得了,别面试问的时候一句话说不出来就行
在请求进入网关时开始对是否要请求灰度版本进行判断,通过Spring Cloud Gateway的过滤器实现,在调用下游服务时重写一个Ribbon的负载均衡器实现调用时对灰度状态进行判断。
-
配置文件中的自定义属性
- 是否开启灰度发布功能
- 灰度发布的几种匹配情况
- 自定义灰度版本请求头以及请求值 固定值 gray=gray-996
- 灰度版本IP数组
- 灰度版本城市数组
- 灰度版本用户数组
部分内容引用自:
https://www.bilibili.com/video/BV1E84y1q7H7/?spm_id_from=333.337.search-card.all.click&vd_source=64c73c596c59837e620fed47fa27ada7
https://blog.51cto.com/u_6813689/11876044
华为的员工有这个经济基础,有条件比国人先走一步,做一个乐观、开放、自律、正派的人,给周边做个表率。当前一部分华为人反映出来的现象,恰恰相反,令人不安。一部分员工,不知道自己的祖坟为什么埋得这么好,还是碰到了什么神仙,突然富有后,就不知所措了。有些人表现得奢侈,张狂,在小区及社会上表现出那种咄咄逼人,不仅自己,自己的家人也趾高气扬……;一部分人对社会充满了怀疑的眼光,紧紧地捂着自己的钱袋子,认为谁都在打他的主意,对谁都不信任……。这些,都不是华为精神,这些人员不适合担任行政管理职位的,不管高低都不合适。他们所领导的团队一定萎靡不振。
任正非:要快乐地度过充满困难的一生