什么是子环境
我们传统的环境指的是dev,qa,online这些,子环境是在这些环境中的一个环境
为什么要用子环境
当我们在dev,qa环境中进行日常测试时,如果有两个应用都发了新版本,但是不属于一个迭代,可能会影响环境的问题性和功能的正确性
子环境实践
基本概念
一个迭代会创建一个子环境,会加入一组应用
一个子环境会对应一个流量标识,和一组策略(如header中存在name是A,value是B)
存在一个基准环境,部署已经验证过的稳定版本
网关根据策略或者流量标识则进入子环境
内部服务的客户端根据流量标识进入子环境
验证阶段
子环境处于验证阶段,此时基准环境的流量标识为standard
接管阶段
把访问此应用的基准流量也路由到相应的子环境,此时基准环境的流量标识会追加上所有接管阶段的子环境流量标识(如子环境1和2流量标识为L1和L2,且都处于接管阶段那么基准环境的流量标识为L1,L2)
转正阶段
修改相应的子环境和基准的流量标识(子环境1在做转正操作,流量标识为L1,则修改他的流量标识为L1|1,基准的同理,将L1部分替换为L1|1, 这个行为的含义是,如果访问不到子环境1的该应用,则访问基准环境的该应用)
下掉基准环境的该应用
如果是用consul之类的做服务发现的话,则更新路由规则(比如test1的A实例tag是子环境1,改为基准环境)
更新子环境
基准环境去掉转正了的子环境标识(如子环境1和2流量标识为L1和L2,且都处于接管阶段那么基准环境的流量标识为L1,L2,此时子环境1转正,那么基准环境的流量标识应为L2)
一些场景
流量会带上子环境流量标识和基准环境流量标识
如果判断需要进入子环境1,应用是test1,且应用部署在子环境中,那么路由到子环境1的test1,此时子环境流量标识为子环境1的流量标识
如果判断需要进入子环境1,应用是test1,且应用未部署在子环境中,此时分为几个情况
1 test1处于子环境2中,且子环境2处于接管阶段,那么流量路由到子环境2,此时子环境流量标识为子环境1的流量标识
2 否则路由到基准环境的该应用
如果判断未满足任何子环境策略,则路由到基准环境的该应用,此时分为几个情况
1 如果该应用处于某个子环境,且该子环境处于接管状态,则路由到子环境的该应用
1 如果该应用处于某个子环境,且该子环境的标识为L1|1,则路由到子环境的该应用
2 否则路由到基准环境的该应用
网友评论