灰度发布,现在是很多大项目的一个标配运维特性,我们可以将一个“新的版本代码”发布到集群中的少数几台(组)机器上,以便引入线上少量真实用户进行测试,用于验证产品改进的收益、小规模试错等。nginx提供了“nginx_http_split_clients_module”、“nginx_stream_split_clients_module”,分别适用于http和tcp,可以帮助我们简单实现这些功能,不过如果你需要高度自动化、自主化的特性,或许需要进行一定的扩展和改造。
split模块在0.8版本就已经有了,使用起来也非常简单:
split_clients string $variable {....}
此指令的上下文为http。
1、假如,我们的web项目中提供了2个html页面,其中index_new.html为最新发布页面,index.html为旧页面,为了“避免新页面有BUG,而影响全站用户”、“测试新页面上体验改进是否符合预期”,我们将index页面的访问流量中的10%转发到新页面上,剩余90%继续使用旧页面。
split_clients "${remote_addr}_1qazxsw2" $variant {
10% _new;
* "";
}
server {
...
location / {