abtestingwalk 的配置整理
原理:
nginx是目前使用较多的7层服务器,可以实现高性能的转发和响应;ABTestingGateway 是在 nginx 转发的框架内,在转向 upstream 前,根据 用户请求特征 和 系统的分流策略 ,查找出目标upstream,进而实现分流。
在以往的基于 nginx 实现的灰度系统中,分流逻辑往往通过 rewrite 阶段的 if 和 rewrite 指令等实现,优点是性能较高,缺点是功能受限、容易出错,以及转发规则固定,只能静态分流。针对这些缺点,我们设计实现了ABTestingGateway,
采用 ngx-lua 实现系统功能,通过启用lua-shared-dict和lua-resty-lock作为系统缓存和缓存锁,系统获得了较为接近原生nginx转发的性能。
一个应用的配置文件可以放在任意位置,不一定在原始的安装目录,启动的时候找到这个配置文件启动即可
例如
集成了abtesting之后1,启动redis(在ab,业务nginx,ab配置中有集成redis自动用他的锁,redis的配置在ab目录中),2,启动upstream(业务系统),
3,启动业务系统(ab系统的脚本在vip业务系统的nginx配置关联上,就有了切面(ab的脚本拦截监听)(一个大的nginx关联好了一切,用这个脚本启动nginx)),
这些中间件启动配置都在ab的目录中,加上配置即可联合abtest
版本不一致的解决原因:
brew安装的openresty版本与ABTestingGateway不一致导致的,将/usr/local/Cellar/openresty/1.13.6.2/lualib (1.13.6.2替换为您安装的版本)下的相关的lua文件拷贝覆盖ABTestingGateway/lualib下的文件,重启nginx即可
repo中的utils/conf文件夹中有灰度系统部署所需的最小示例
1. git clone https://github.com/SinaMSRE/ABTestingGateway
2. cd /path/to/ABTestingGateway/utils
#启动redis数据库
3. redis-server conf/redis.conf
#启动upstream server(业务系统),其中stable为默认upstream
4. /usr/local/nginx/sbin/nginx -p `pwd` -c conf/stable.conf
5. /usr/local/nginx/sbin/nginx -p `pwd` -c conf/beta1.conf
6. /usr/local/nginx/sbin/nginx -p `pwd` -c conf/beta2.conf
7. /usr/local/nginx/sbin/nginx -p `pwd` -c conf/beta3.conf
8. /usr/local/nginx/sbin/nginx -p `pwd` -c conf/beta4.conf
#启动灰度系统,proxy server,灰度系统的配置也写在conf/nginx.conf中
9. /usr/local/nginx/sbin/nginx -p `pwd` -c conf/nginx.conf
9. /usr/local/nginx/sbin/nginx -p `pwd` -c conf/nginx.conf
=======总配置文件的http配置===========
#user www www;
worker_processes auto;
# worker_cpu_affinity auto;# openresty-1.9.15
worker_rlimit_nofile 102400;
error_log logs/error.log;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 10240;
}
http {
server_tokens off;
sendfile on;
tcp_nodelay on;
tcp_nopush on;
keepalive_timeout 0;
charset utf-8;
include mime.types;
default_type application/json;
log_format main '[$time_local]`$http_x_up_calling_line_id`"$request"`"$http_user_agent"`$staTus`[$remote_addr]`$http_x_log_uid`"$http_referer"`$request_time`$body_bytes_sent`$http_x_forwarded_proto`$http_x_forwarded_for`$http_host`$http_cookie`$upstream_response_time`xd';
client_header_buffer_size 4k;
large_client_header_buffers 8 4k;
server_names_hash_bucket_size 128;
client_max_body_size 8m;
client_header_timeout 30s;
client_body_timeout 30s;
send_timeout 30s;
lingering_close off;
gzip on;
gzip_vary on;
gzip_min_length 1000;
gzip_comp_level 6;
gzip_types text/plain text/xml text/css application/javascript application/json;
gzip_http_version 1.0;
#index index.html index.shtml index.php;
# include upstream.conf;
include upstream.conf; ## 不同的upstream配置 里面有具服务的rip--具体业务服务
include default.conf; ##abTestingwalking本身的配置
include vhost.conf; ## 项目nginx配置文件vip(在ab项目中加载进来项目nginx配置文件,方便修改操作,相当于abtestingwalk是项目nginx的切面(前置通知))
# lua_code_cache on;
lua_code_cache off;
lua_package_path "../?.lua;../lib/?.lua;../lib/lua-resty-core/lib/?.lua;;";
lua_need_request_body on;
}
==========不同upstream的配置===========
upstream beta2 {
server 127.0.0.1:8021 weight=10 fail_timeout=1 max_fails=3;
keepalive 256;
}
upstream beta3 {
server 127.0.0.1:8022 weight=10 fail_timeout=1 max_fails=3;
keepalive 256;
}
upstream beta1 {
server 127.0.0.1:8020 weight=1 fail_timeout=10 max_fails=1;
keepalive 1000;
}
upstream beta4 {
server 127.0.0.1:8023 weight=1 fail_timeout=10 max_fails=1;
keepalive 1000;
}
upstream stable {
server 127.0.0.1:8040 weight=1 fail_timeout=10 max_fails=1;
}
=============ABtestinggateway本身的设置======================
server {
listen 8080;
server_name localhost 127.0.0.1;
access_log logs/ip-access.log main;
error_log logs/admin.log error;
location / {
root html;
index index.html index.htm;
}
#location /nginx_status {
#stub_status on;
#access_log off;
#allow 127.0.0.1;
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
set $redis_host '127.0.0.1';
set $redis_port '6379';
set $redis_uds '/var/run/redis.sock';
set $redis_connect_timeout 10000;
set $redis_dbid 0;
set $redis_pool_size 1000;
set $redis_keepalive_timeout 90000;
location /ab_admin {
content_by_lua_file '../admin/ab_action.lua';
}
}
===================nginx应用项目配置(对外提供服务的vip)========================
lua_shared_dict api_root_sysConfig 1m;
lua_shared_dict kv_api_root_upstream 100m;
lua_shared_dict api_abc_sysConfig 1m;
lua_shared_dict kv_api_abc_upstream 100m;
server {
listen 8030;
server_name api.weibo.cn mapi.weibo.com;
access_log logs/vhost_access.log main;
error_log logs/vhost_error.log;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
set $redis_host '127.0.0.1';
set $redis_port '6379';
set $redis_uds '/var/run/redis.sock';
set $redis_connect_timeout 10000;
set $redis_dbid 0;
set $redis_pool_size 1000;
set $redis_keepalive_timeout 90000;
location ~* /abc/(i|f)/ {
set $hostkey $server_name.abc;
set $sysConfig api_abc_sysConfig;
set $kv_upstream kv_api_abc_upstream;
set $backend 'stable';
rewrite_by_lua_file '../diversion/diversion.lua';
proxy_pass http://$backend;
}
location / {
error_log logs/vhost_error.log debug;
set $hostkey $server_name;
set $sysConfig api_root_sysConfig;
set $kv_upstream kv_api_root_upstream;
set $backend 'stable';
rewrite_by_lua_file '../diversion/diversion.lua';
proxy_pass http://$backend;
}
}
=======具体服务地址=====
beta1.conf
==============其他文件================
参考:
http://www.cnblogs.com/beautiful-code/p/6278779.html
https://github.com/CNSRE/ABTestingGateway
https://blog.csdn.net/hueason/article/details/81054093
相关推荐
idDeptSign和ip值都相等,则会有灰度服务 案例2: Nacos元数据配置 {"idDeptSign":"040101","ip":"192.168.1.2","springCloud":"register"} 前端请求头设置参数publicParam {"idDeptSign":"040101","ip":"192.168...
DevOps灰度发布也存在一些挑战,包括: * 技术挑战:灰度发布需要高级的技术和经验,需要拥有强大的技术团队和先进的技术设施。 * 流程挑战:灰度发布需要建立和实施标准化的流程,确保软件发布的正确性和可靠性。 ...
**灰度发布简介** 在软件开发中,灰度发布(也称为蓝绿部署或金丝雀发布)是一种部署策略,允许在正式全面发布新版本之前,先将新版本推送给一小部分用户进行测试,以此来验证新版本的功能、性能和稳定性。这种方式...
### 互联网产品灰度发布流程详解 #### 一、引言 随着互联网技术的快速发展,产品的更新迭代变得越来越频繁。为了降低新版本上线可能带来的风险,确保用户体验不受影响,许多互联网公司采用了灰度发布的方式。灰度...
nginx+lua+redis通过匹配客户端ip进行灰度发布 本文将讲述如何使用nginx、lua和redis来实现灰度发布,通过匹配客户端IP来实现灰度发布。灰度发布是一种常见的软件发布方式,它允许开发者在生产环境中发布新的版本,...
灰度发布技术实现报告 一、引言 1. 编写目的:此报告旨在详细介绍灰度发布的技术实现,分析其在鑫合汇技术中心的实际应用,并为其他类似项目提供参考,确保产品更新的安全性和稳定性。 2. 背景:在快速迭代的...
5. **发布总结**:通过对用户行为的深入分析,结合问卷调查和社会化媒体的意见收集,整理出产品功能改进清单。 6. **产品完善**:根据用户反馈进行产品优化,解决已知问题。 7. **新一轮灰度发布或完整发布**:在...
灰度发布方案 灰度发布是一种平滑过渡的发布方式,即在黑与白之间,能够逐步过渡的一种发布方式。AB test 就是一种灰度发布方式,让一部分用户继续用 A,一部分用户开始用 B,如果用户对 B 没有什么反对意见,那么...
springcloud灰度发布方案。包含网关、服务间调用灰度发布代码。详情请参考博客:https://blog.csdn.net/han949417140/article/details/121420529
互联网应用灰度发布是一种在不中断应用服务的情况下,对应用进行版本迭代更新的发布策略。灰度发布起源于传统的矿工安全措施,即先放一只金丝雀进矿井探测是否有有毒气体,如无异常才让矿工进入。在互联网应用中,...
在IT行业中,灰度发布(也称为A/B测试或蓝绿部署)是一种常见的软件发布策略,它允许开发者在正式发布新版本之前,在一部分用户中进行小规模的测试,以评估新功能的效果、性能和稳定性。在这个场景中,我们讨论的是...
讲解istio灰度发布,A/B Test, istio应用架构的视频,从nginx ingress带入到istio的微服务治理架构。
本文档基于新浪的基于动态发布的灰度系统的学习研究笔记 此外,git上有源码和相关文档
蓝绿发布和灰度发布是两种常见的应用程序升级策略,它们都是为了确保系统稳定性和不间断的服务。这两种策略在Java等技术栈中广泛应用于大型分布式系统的部署过程中。 蓝绿发布的核心思想是拥有两个平行的生产环境,...
前端灰度发布落地方案 灰度发布是一种将新功能逐渐投放到生产环境的策略,避免了新功能全量上线带来的风险。灰度发布可以根据不同的灰度规则将用户分流到不同的版本,例如根据用户的等级、性别、地区、客户端等信息...
【灰度发布系统压测报告1】 灰度发布是一种软件发布策略,它允许部分用户先体验新版本,以便在大规模推广前发现并修复问题。本报告详细探讨了灰度系统在不同阶段的性能表现,包括引入缓存和缓存超时失效机制后的...
本项目是基于SpringCloud Alibaba的灰度发布技术方案,主要涉及到以下几个核心组件:Gateway、Nacos、Ribbon以及Feign。下面将详细阐述这些组件的功能以及如何结合使用以实现灰度发布。 1. Spring Cloud Gateway: ...
灰度发布 根据请求的流量,将流量分流,分一小部分转至新版本的使用,这个新版本即为灰度发布方案,灰度的使用通过后,会通过调整新版本的使用流量进行融合 简单说:新功能上线,就新老系统共存,共存的空间就是灰度...