在阿里,我们如何管理测试环境(11)

咋看起来 , 这不就是动态修改域名对应的路由地址、或者消息主题对应的投递地址么?实事并没那么简单 , 因为不能为了某个特性环境而修改公共基础环境的路由 , 所以单靠正统路由机制只能实现单向目标控制 , 即特性环境里的服务主动发起调用能够正确路由 , 若请求的发起方在公共基础环境上 , 就无法知道该将请求发给哪个特性环境了 。 对于HTTP类型的请求甚至很难处理回调的情况 , 当处于公共基础环境的服务进行回调时 , 域名解析会将目标指向公共基础环境上的同名服务 。

如何才能实现数据双向的正确路由和投递呢?不妨先回到这个问题的本质上来:请求应该进入哪个特性环境 , 是与请求的发起人相关的 。 因此实现双向绑定的关键在于 , 识别请求发起人所处的特性环境和进行端到端的路由控制 。 这个过程与“灰度发布”很有几分相似 , 可采用类似的思路解决 。

得益于阿里在中间件领域的技术积累 , 和鹰眼等路由追踪工具的广泛使用 , 识别请求发起人和追溯回调链路都不算难事 。 如此一来 , 路由控制也就水到渠成了 。 当使用特性环境时 , 用户需要“加入”到该环境 , 这个操作会将用户标识(如IP地址或用户ID)与指定的特性环境关联起来 , 每个用户只能同时属于一个特性环境 。 当数据请求经过路由中间件(消息队列、消息网关、HTTP网关等) , 一旦识别到请求的发起人当前处在特性环境中 , 就会尝试把请求路由给该环境中的服务 , 若该环境没有与目标一致的服务 , 才路由或投递到公共基础环境上 。

推荐阅读