Mac下使用ABTestingGateway快速搭建灰度网关
ABTestingGateway简介
ABTestingGateway 是新浪开源的一个可以动态设置分流策略的灰度发布系统,工作在7层,基于nginx和ngx-lua开发,使用 redis 作为分流策略数据库,可以实现动态调度功能。
nginx是目前使用较多的7层服务器,可以实现高性能的转发和响应;ABTestingGateway 是在 nginx 转发的框架内,在转向 upstream 前,根据 用户请求特征 和 系统的分流策略 ,查找出目标upstream,进而实现分流。
环境搭建
1.安装openresty
其是由Nginx核心加很多第三方模块组成,其最大的亮点是默认集成了Lua开发环境,使得Nginx可以作为一个Web Server使用。借助于Nginx的事件驱动模型和非阻塞IO,可以实现高性能的Web应用程序。而且OpenResty提供了大量组件如Mysql、Redis、Memcached等等,使在Nginx上开发Web应用更方便更简单。目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用Nginx+Lua架构,其他公司如淘宝、去哪儿网等。
安装命令:brew install openresty
brew默认将openresty安装在/usr/local/Cellar/openresty/目录下
2.安装luajit
JIT = Just In Time即时编译,是动态编译的一种形式,是一种优化虚拟机运行的技术。
程序运行通常有两种方式,一种是静态编译,一种是动态解释,即时编译混合了这二者。Java和.Net/mono中都使用了这种技术。
安装命令:brew install LuaJIT
brew默认将openresty安装在/usr/local/Cellar/luajit/目录下
3.安装redis
安装命令:brew install redis
启动命令:brew services start redis
ABTestingGateway搭建
项目下载:
命令:git clone https://github.com/CNSRE/ABTestingGateway.git
下载后目录结果如下
repo中的utils/conf文件夹中有灰度系统部署所需的最小示例
运行灰度网关
1. 进入ABTestingGateway目录
2. 创建logs目录,mkdir logs
3. 启动redis
4.
# 启动upstream server,其中stable为默认upstream
4. /usr/local/Cellar/openresty/1.13.6.2/nginx/sbin/nginx -p `pwd` -c conf/stable.conf
5. /usr/local/Cellar/openresty/1.13.6.2/nginx/sbin/nginx -p `pwd` -c conf/beta1.conf
6. /usr/local/Cellar/openresty/1.13.6.2/nginx/sbin/nginx -p `pwd` -c conf/beta2.conf
7. /usr/local/Cellar/openresty/1.13.6.2/nginx/sbin/nginx -p `pwd` -c conf/beta3.conf
8. /usr/local/Cellar/openresty/1.13.6.2/nginx/sbin/nginx -p `pwd` -c conf/beta4.conf
# 启动灰度系统,proxy server,灰度系统的配置也写在conf/nginx.conf中
9. /usr/local/Cellar/openresty/1.13.6.2/nginx/sbin/nginx -p `pwd` -c conf/nginx.conf
简单验证:添加分流策略组
$ curl 127.0.0.1:8080/ab_admin?action=policygroup_set -d '{"1":{"divtype":"uidsuffix","divdata":[{"suffix":"1","upstream":"beta1"},{"suffix":"3","upstream":"beta2"},{"suffix":"5","upstream":"beta1"},{"suffix":"0","upstream":"beta3"}]},"2":{"divtype":"arg_city","divdata":[{"city":"BJ","upstream":"beta1"},{"city":"SH","upstream":"beta2"},{"city":"XA","upstream":"beta1"},{"city":"HZ","upstream":"beta3"}]},"3":{"divtype":"iprange","divdata":[{"range":{"start":1111,"end":2222},"upstream":"beta1"},{"range":{"start":3333,"end":4444},"upstream":"beta2"},{"range":{"start":7777,"end":2130706433},"upstream":"beta2"}]}}'
{"desc":"success ","code":200,"data":{"groupid":0,"group":[0,1,2]}}
分流规则简介
- ABTestingGateway灰度系统目前支持的策略有ip段分流、用户uid段分流、uid尾数分流、uid白名单分流
 - 优先级由数字表示,从1开始,级别为1的策略优先级最高
 
以下共添加了3个分流规则,分别是用户uid尾数分流、城市分流、ip段分流,具体请看json中的注释
stable服务为默认的,未匹配到规则则分流到stable服务器上
{
    "1": {
        "divtype": "uidsuffix",
        "divdata": [
            {
                "suffix": "1",    //http请求中header X-Uid尾数为1分流到beta1服务器
                "upstream": "beta1"
            },
            {
                "suffix": "3",    //http请求中header X-Uid尾数为3分流到beta2服务器
                "upstream": "beta2"
            },
            {
                "suffix": "5",
                "upstream": "beta1"
            },
            {
                "suffix": "0",
                "upstream": "beta3"
            }
        ]
    },
    "2": {
        "divtype": "arg_city",
        "divdata": [
            {
                "city": "BJ",      // url上参数city=BJ,分流到beta1
                "upstream": "beta1"
            },
            {
                "city": "SH",
                "upstream": "beta2"
            },
            {
                "city": "XA",
                "upstream": "beta1"
            },
            {
                "city": "HZ",
                "upstream": "beta3"
            }
        ]
    },
    "3": {
        "divtype": "iprange",
        "divdata": [
            {
                "range": {
                    "start": 1111,
                    "end": 2222
                },
                "upstream": "beta1"
            },
            {
                "range": {
                    "start": 3333,
                    "end": 4444
                },
                "upstream": "beta2"
            },
            {
                "range": {
                    "start": 7777,
                    "end": 2130706433
                },
                "upstream": "beta2"
            }
        ]
    }
}
简单验证:设置运行时策略
$ curl "127.0.0.1:8080/ab_admin?action=runtime_set&hostname=api.weibo.cn&policygroupid=0"
# 分流
$ curl 127.0.0.1:8030 -H 'X-Uid:39' -H 'X-Real-IP:192.168.1.1'
this is stable server
$ curl 127.0.0.1:8030 -H 'X-Uid:30' -H 'X-Real-IP:192.168.1.1'
this is beta3 server
$ curl 127.0.0.1:8030/?city=BJ -H 'X-Uid:39' -H 'X-Real-IP:192.168.1.1'
this is beta1 server
注意
报错:
2018/07/11 22:00:39 [error] 65912#7287282: *34 lua entry thread aborted: runtime error: ../lib/lua-resty-core/lib/ngx/semaphore.lua:64: dlsym(RTLD_DEFAULT, ngx_http_lua_ffi_semaphore_new): symbol not found
stack traceback:
coroutine 0:
    [C]: in function 'require'
    .../Nginx/ABTestingGateway/utils/../diversion/diversion.lua:11: in function <.../Nginx/ABTestingGateway/utils/../diversion/diversion.lua:1>, client: 127.0.0.1, server: api.weibo.cn, request: "GET / HTTP/1.1", host: "127.0.0.1:8030"
原因:
brew安装的openresty版本与ABTestingGateway不一致导致的,将/usr/local/Cellar/openresty/1.13.6.2/lualib (1.13.6.2替换为您安装的版本)下的相关的lua文件拷贝覆盖ABTestingGateway/lualib下的文件,重启nginx即可
Mac下使用ABTestingGateway快速搭建灰度网关的更多相关文章
- Mac下PHP环境的搭建
		
Mac下PHP环境的搭建 目录 Mac下PHP环境的搭建(基于XAMPP) phpmyadmin Mac下PHP环境的搭建(基于XAMPP) 下载XAMPP的Mac版 启动Apache Web Ser ...
 - Mac下R语言环境搭建
		
Mac下R语言环境搭建 博主在数据分析的时候一直用的python(MATLAB太重了),最近跟其他搞学术的人合作,需要用一下R语言,所以也打算顺便学习一下R. R语言简介 R语言是用于统计分析,图形表 ...
 - OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建
		
# OpenCV学习系列(零) Mac下OpenCV + xcode环境搭建 [-= 博客目录 =-] 1-学习目标 1.1-本章介绍 1.2-实践内容 1.3-相关说明 2-学习过程 2.1-hom ...
 - MAC下的XMPP环境搭建
		
实现即时通信有多种方式,下面讲的是Mac下使用XMPP来实现. XML Messages Presence Protocol 可扩展消息处理协议 简单讲就是基于XML语言的点对点即时通信协议 原理: ...
 - 【iOS】Mac下SVN的服务器搭建
		
在协同开发中,版本控制是必备的.完全不敢想象团队都在用U盘.QQ管理代码的景象.但是svn不像git,拥有众多免费的代码库,如果在同 一局域网下,搭建svn服务端来同步代码是很有必要的.本文将详细讲解 ...
 - mac下selenium+python环境搭建
		
selenium2+python的环境搭建主要需要python和selenium 1.python mac下自带了python,可以查看版本.当然可以选择安装其它版本的python. 2.seleni ...
 - 在win10下使用docker快速搭建ruby开发环境
		
docker在windows下发力的时候必将取代各种虚拟机,并改变程序员的开发习惯,或许还会改变infra的工作. 概要: 在Windows下搭建开发环境一直是infra(我)头疼的事情.为了解决这个 ...
 - Mac下git的环境搭建和基本使用
		
前言本文将介绍git的基本概念.环境搭建.日常使用,主要针对刚接触git,或接触不久,或好久没用忘记的同学们,当然是基于mac环境的,window系统也是大同小异!本文将从以下几个模块介绍,希望能帮助 ...
 - mac下java 开发环境搭建
		
mac配置java开发环境: jdk1.7 +sdk1.7+maven +tomcat 1.先安装jdk ,才能安装sdk . 2 mac中jdk1.7的默认位置:/Library/Java/Ja ...
 
随机推荐
- 使用postman做接口测试(二)
			
参考大神总结:https://www.cnblogs.com/Skyyj/p/6856728.html 二,下边的东西工作中实际要用到了 1, postman安装 chrome浏览器打开chrome: ...
 - python网络编程-多进程multiprocessing
			
一:mutilprocess简介 多线程类似于同时执行多个不同程序,多线程运行有如下优点: 使用线程可以把占据长时间的程序中的任务放到后台去处理. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去 ...
 - RelativeLayout
			
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...
 - Visual Studio 2017 发布 附带下载地址
			
链接: https://pan.baidu.com/s/1kFjGwyj5HwabvmJKiyLF_g 提取码: 关注公众号[GitHubCN]回复获取 winform框架源码-Devexpre ...
 - mysql 忽略库同步的坑
			
使用replicate_do_db和replicate_ignore_db时有一个隐患,跨库更新时会出错. 如在Master(主)服务器上设置 replicate_do_db=test(my.conf ...
 - Java第三阶段学习(三、字符流、转换流)
			
一.字节流读取中文时出现的问题: 文件中有中文时,用字节流读取会出现乱码的问题,因为一个中文为两个字节. 二.字符编码表 编码表:其实就是生活中字符和计算机二进制的对应关系表. 1.ascii: 一个 ...
 - Spark(十)Spark之数据倾斜调优
			
一 调优概述 有的时候,我们可能会遇到大数据计算中一个最棘手的问题——数据倾斜,此时Spark作业的性能会比期望差很多.数据倾斜调优,就是使用各种技术方案解决不同类型的数据倾斜问题,以保证Spark作 ...
 - day4作业模拟实现一个ATM + 购物商城程序
			
作业需求: 模拟实现一个ATM + 购物商城程序 1.额度 15000或自定义: 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账: 3.可以提现,手续费5%: 4.每月22号出账单,每月10 ...
 - C语言:10个整数排序(别忘了负数)
			
题目内容: 10个整数排序(别忘了负数) 例如 input 1 0 2 0 3 4 1 9 8 7 output 0 0 1 1 2 3 4 7 8 9 编码: void sort(int *a); ...
 - bzoj 1263 [SCOI2006]整数划分
			
n >= 6 的时候减3, 最后分类讨论, 上个Java import java.math.BigInteger; import java.util.*; public class Main { ...