持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
前言
网关是微服务架构中重要的中间件组件,对外发布内部微服务,提供服务路由,灰度,蓝绿发布,熔断和限流能力
架构
灰度发布
灰度发布,是在生产环境稳定集群之外,额外部署一个小规模的灰度集群,并通过流量控制,引入部分流量到灰度集群,进行生产全量发布前的灰度验证。如果验证失败,可立刻将所有流量切回至稳定集群,取消灰度发布过程;如果验证成功,则将新版本进行全量发布升级至生产环境稳定集群,完成灰度发布过程
基于医院使用的特殊情况,有自己特色的灰度发布流程。
有如下场景
科室灰度
医院的科室一般分配有固定的IP地址段,比如下表
| 科室名称 | IP段 | |
|---|---|---|
| 门诊科室1 | 192.168.1.1-192.168.1.3 | |
| 门诊科室2 | 192.168.1.4-192.168.1.20 | |
门诊需要灰度新功能,需要做到新功能只对门诊科室1开放, 这个时候的灰度发布流程如下
-
启动新的灰度实例,并对启动实例打上灰度 tag ,如 gray-feature-v1
-
服务启动后注册自己的metadata(tag=gray-feature-v1)信息到服务注册中心
-
在网关配置路由规则,把 192.168.1.1-192.168.1.3 (科室1)这个来源地址段的请求路由至带有此标签的微服务实列
-
灰度验证。查看新的灰度请求是否路由至指定的微服务实例
-
灰度取消。如果在灰度验证过程中发现了问题,灰度取消可秒级将全部流量切回稳定集群,具体包括两个步骤:删除路由规则和灰度集群下线。当然,用户也可先通过修改规则的方式(如店铺列表置空或请求百分比置0),先将流量切回稳定集群,然后保留现场,方便进行问题排查。
-
全量发布。如果灰度验证没有发现问题,那么就可以进行新版本的全量发布了。包括:稳定集群全量发布、删除灰度路由规则和灰度集群下线
-
灰度发布结束
具体如图所示
流程图:
分组灰度
cpoe-server 可以同时处理门诊和住院的医嘱服务调用,现场可以做如下部署,默认情况下,发往 /cpoe/*的请求会平均分配到这四个实例上面去
| 实例 | 用例 |
|---|---|
| 192.168.20.1 | cpoe-server-1 |
| 192.168.20.2 | cpoe-server-2 |
| 192.168.20.3 | cpoe-server-3 |
| 192.168.20.4 | cpoe-server-4 |
\
希望可以做到流量分组,由门诊工作站发出的医嘱请求路由至 192.168.20.1 - 192.168.20.2 节点,住院的医嘱请求发往 192.168.20.3-192.168.20.4 节点
具体流程如下
- cpoe-server-1 和 cpoe-server-2 实例启动前,打上 tag ,如 env.dept=门诊
- cpoe-server-3 和 cpoe-server-4 实例启动前,打上 tag ,如 env.dept=住院
- 配置路由规则,匹配请求头中的来源path 如 systemUri = 门诊 | 住院 ,这类请求路由至已经注册的微服务实例
蓝绿发布
蓝绿发布,是在生产环境稳定集群之外,额外部署一个与稳定集群规模相同的新集群,并通过流量控制,逐步引入流量至新集群直至100%,原先稳定集群将与新集群同时保持在线一段时间,期间发生任何异常,可立刻将所有流量切回至原稳定集群,实现快速回滚。直到全部验证成功后,下线老的稳定集群,新集群成为新的稳定集群
发布流程如下
- 准备两个环境 Blue, Green 环境
- Blue环境的实例启动是打tag 为 env.group=Blue, Green环境的实例启动打tag为 env.group=Green
- 配置路由规则,设至Blue 环境的流量权重为 100%, Green 环境的流量权重为 0
- 此时流量会全部流向Blue 环境,Green作为备用环境
- 升级或修复时,在Green环境进行升级,升级完成无误后切换Green 环境流量weight 为 100%,Blue 环境weight 为 0%。
- 继续升级Blue 环境,等待下一次切换
流程图:
网关与运维平台结合
网关需要提供标准的API 供外部访问,一般需要提供如下接口
- 查看服务分组
- 设置分组权重
- 切换服务分组
- 增加路由规则