nginx(四十一)发布

一    兰绿发布、金丝雀发布、灰度发布、滚动发布

特性对比

(1)绿部署

重点: 兰绿部署是'两套'集群,在两套系统之间切换

①  定义

②  发布过程

③  特点

④  注意事项  了解

(2)灰度发布

①   矿井中的金丝雀

自己要掌握的:学会从'社会科学'的角度讲故事

②  定义

特点:同一时间有'多个版本'的服务'对外'提供服务,这些版本服务于'不同'的'受众群体'

重点:新特性经过浸润,流量从'老'版本'逐渐迁移'到'新'版本

场景:它能够'缓慢的'将修改推广到一小部分用户,验证没有问题后,再推广到全部用户,以降低生产环境引入新功能带来的风险。

A/B测试 

③  灰度发布/金丝雀发布组成

 (3)滚动发布

说明: k8s一般是'滚动'更新

二    如何实现灰度发布

①  实现思路

1、在'代码'中做 --> "了解"

一套线上环境,代码中做'开关(falgs)',对于'不同的用户(特征)'走不同的逻辑

优点:'粒度细',一套代码(环境)'运维成本低'

++++++++++++++'分割线'++++++++++++++

2、在'接入层(业界常用)'做  -->根因是接入层是'无状态'的

多套('相互隔离的')线上环境,接入层'针对不同用户'转发到不同的环境中

优点:最少'侵入'服务代码实现灰度发布,风险小,'运维可靠性高'

'灵活'的灰度方案一般需要在'接入层'实现,具体就是'自定义负载均衡策略'实现

下面介绍在'接入层'使用的方式

  1)第一是在'nginx层(无状态)'实现(使用ngx+lua)-->'openresty' -->'优选'

  2)第二是在'网关层'实现(spring-cloud-zuul) -->'了解'

  3)第三是'dubbo'的灰度,项目中如果使用dubbo,有可能会需要dubbo服务的灰度实现 -->'了解'

负载均衡又可分为'服务端'负载均衡和'客户端'负载均衡

   1) 服务器端负载均衡

      例如:在nginx服务端通过'负载均衡算法',在多个服务器之间'选择一个'进行访问;

   2)客户端负载均衡
     
      例如:ribbon或者dubbo,客户端会有一个'服务器地址列表',在发送请求前通过负载均衡算法'选择一个'服务器,然后进行访问

②  ABTestingGateway

③   节点引流

节点引流:

   1)在一个'集群内(upstream)',用户标记'一个或多个蓝节点',然后通过定义'规则'

      eg:只有特定'domain_id(可能是Token解析出来的)'或者'其它特征'才能访问这些'蓝节点'

   2)引流的时候将'灰度请求(特定特征流量)'转到到已配置的'蓝色'节点,'非灰度请求'转发到其它节点

④  集群引流 

集群引流:

   1)用户指定一个'蓝集群'(同一'组件'的另外一个upstream);是不同'版本'的两套集群

   2)灰度引流的时候将'灰度请求'轮询转发到到'蓝色'集群后端

灰度请求:是经过'灰度策略'匹配的请求

灰度暂停效果:灰度节点'暂时闲置',非灰度节点正常'承载所有'业务

④   灰度策略

灰度策略:

    1)即'满足'什么条件,流量'会走到'灰度节点或者灰度集群上

    2)其它'不满足条件'的则正常走到'非灰度'

触发条件:是'用户'定义的,比如说'什么特定的'请求会发送到'哪个'节点

附加: 灰度策略是'谁(重点)访问'哪个'server_name'下的'location'才触发的

重点:怎么识别'目标特征流量',进而进行'灰度'路由

条件:来源策略

  1) 基于'用户(友好用户、内部用户) -->uid、租户等级(v1、v5)' --> 进行'特征'识别

  3)基于'ip段'分流

  4)基于'地域'分流

'实现'方式:nginx+lua

  1)url传递的特殊请求参数'args' -->'集群引流'

  2)发送请求时内部携带'特殊'请求头'Request Header' -->'Token'、'X-GRAY'等内部'约定俗成'的 -->'二者都可能有'

  3)Cookie头中特定的'key' -->'集群引流'

  4) X-Real-IP、x_forwarded_for、$remote_addr -->'集群和节点二者都可能有'

⑤  节点引流的原理

1)管理员根据'租户id、租户等级、ip'等'预设'灰度策略,然后写入'DB数据库'持久化

   备注:这里已经对集群进行'兰绿节点'的划分

2)'openresty(nginx+lua)'通过'redis'定时读取策略信息,放到'nginx本地内存'中

3) 当有'用户请求到达'的时候,openresty发现是'gray灰度'的时候,进行策略匹配,得到'引流'的ip地址

      绿色:稳定'旧'环境

      蓝色:'新'版本环境

后续: upstrem { balance_by_lua_* } + redis 来实现 -->'比较复杂'

'不建议'的方式: 将一个集群的'蓝绿节点'拆分成两个集群'蓝'集群 + '绿'集群

⑥  集群引流几种实现方式

1)请求头

map  $http_gray $upstream {
    default  upstream_1;
    gray     upstream_2;
}

2)请求参数

说明: 通过'map'或者location中的'if'判断

通过: $args或者$query_string --> '$args或者$query_string'

map $args  $upstream {
  ~(^|&)version=1$ upstream_1;
  ~(^|&)version=2$ upstream_2;
}

备注:由于不知道version是开始还是中间,所以'使用(^|&)'

3)Cookie请求头的key

map $COOKIE_flag $upstream {
    default upstream_1;
    1       upstream_2;
}

然后 proxy_pass https://${upstream};

++++++++++  可以在不同的颗粒度-->'server'或者'location'中进行逻辑判断 ++++++++++

set $group "default";

if ($http_cookie ~* "version=V1"){
    set $group hilinux_01;
}
 
 if ($http_cookie ~* "version=V2"){
    set $group hilinux_02;
}

4)节点引流

1)变相的'节点'或'集群'引流

  细节点: 通过proxy_pass $arg_upstream  -->可以是'ip'或者'upstream_id'

场景: 引流方式完全由用户'主动'来控制、节点'几千台'

⑦    灰度流量百分比

'取模' -->'遗留'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值