`
y806839048
  • 浏览: 1120835 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ABTestingGateway灰度发布一些整理

阅读更多

 

 

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    基于Nacos元数据实现灰度发布,可以按照最小粒度灰度发布

    idDeptSign和ip值都相等,则会有灰度服务 案例2: Nacos元数据配置 {"idDeptSign":"040101","ip":"192.168.1.2","springCloud":"register"} 前端请求头设置参数publicParam {"idDeptSign":"040101","ip":"192.168...

    Devops灰度发布介绍.pdf

    DevOps灰度发布也存在一些挑战,包括: * 技术挑战:灰度发布需要高级的技术和经验,需要拥有强大的技术团队和先进的技术设施。 * 流程挑战:灰度发布需要建立和实施标准化的流程,确保软件发布的正确性和可靠性。 ...

    使用Nginx实现灰度发布1

    **灰度发布简介** 在软件开发中,灰度发布(也称为蓝绿部署或金丝雀发布)是一种部署策略,允许在正式全面发布新版本之前,先将新版本推送给一小部分用户进行测试,以此来验证新版本的功能、性能和稳定性。这种方式...

    互联网产品灰度发布流程

    ### 互联网产品灰度发布流程详解 #### 一、引言 随着互联网技术的快速发展,产品的更新迭代变得越来越频繁。为了降低新版本上线可能带来的风险,确保用户体验不受影响,许多互联网公司采用了灰度发布的方式。灰度...

    nginx+lua+redis通过匹配客户端ip进行灰度发布

    nginx+lua+redis通过匹配客户端ip进行灰度发布 本文将讲述如何使用nginx、lua和redis来实现灰度发布,通过匹配客户端IP来实现灰度发布。灰度发布是一种常见的软件发布方式,它允许开发者在生产环境中发布新的版本,...

    灰度发布技术实现报告模板

    灰度发布技术实现报告 一、引言 1. 编写目的:此报告旨在详细介绍灰度发布的技术实现,分析其在鑫合汇技术中心的实际应用,并为其他类似项目提供参考,确保产品更新的安全性和稳定性。 2. 背景:在快速迭代的...

    互联网产品的灰度发布

    5. **发布总结**:通过对用户行为的深入分析,结合问卷调查和社会化媒体的意见收集,整理出产品功能改进清单。 6. **产品完善**:根据用户反馈进行产品优化,解决已知问题。 7. **新一轮灰度发布或完整发布**:在...

    服务灰度发布方案.docx

    灰度发布方案 灰度发布是一种平滑过渡的发布方式,即在黑与白之间,能够逐步过渡的一种发布方式。AB test 就是一种灰度发布方式,让一部分用户继续用 A,一部分用户开始用 B,如果用户对 B 没有什么反对意见,那么...

    springcloud灰度发布方案

    springcloud灰度发布方案。包含网关、服务间调用灰度发布代码。详情请参考博客:https://blog.csdn.net/han949417140/article/details/121420529

    互联网应用灰度发布建设实践.pdf

    互联网应用灰度发布是一种在不中断应用服务的情况下,对应用进行版本迭代更新的发布策略。灰度发布起源于传统的矿工安全措施,即先放一只金丝雀进矿井探测是否有有毒气体,如无异常才让矿工进入。在互联网应用中,...

    基于 Nginx 的 Java Web 项目灰度发布框架.zip

    在IT行业中,灰度发布(也称为A/B测试或蓝绿部署)是一种常见的软件发布策略,它允许开发者在正式发布新版本之前,在一部分用户中进行小规模的测试,以评估新功能的效果、性能和稳定性。在这个场景中,我们讨论的是...

    istio灰度发布探索.mp4

    讲解istio灰度发布,A/B Test, istio应用架构的视频,从nginx ingress带入到istio的微服务治理架构。

    灰度发布系统一次实践

    本文档基于新浪的基于动态发布的灰度系统的学习研究笔记 此外,git上有源码和相关文档

    蓝绿发布及灰度发布、及部署细节

    蓝绿发布和灰度发布是两种常见的应用程序升级策略,它们都是为了确保系统稳定性和不间断的服务。这两种策略在Java等技术栈中广泛应用于大型分布式系统的部署过程中。 蓝绿发布的核心思想是拥有两个平行的生产环境,...

    前端灰度发布落地方案.docx

    前端灰度发布落地方案 灰度发布是一种将新功能逐渐投放到生产环境的策略,避免了新功能全量上线带来的风险。灰度发布可以根据不同的灰度规则将用户分流到不同的版本,例如根据用户的等级、性别、地区、客户端等信息...

    灰度发布系统压测报告1

    【灰度发布系统压测报告1】 灰度发布是一种软件发布策略,它允许部分用户先体验新版本,以便在大规模推广前发现并修复问题。本报告详细探讨了灰度系统在不同阶段的性能表现,包括引入缓存和缓存超时失效机制后的...

    SpringCloudAlibaba基于gateway+nacos+feign灰度发布技术方案代码demo

    本项目是基于SpringCloud Alibaba的灰度发布技术方案,主要涉及到以下几个核心组件:Gateway、Nacos、Ribbon以及Feign。下面将详细阐述这些组件的功能以及如何结合使用以实现灰度发布。 1. Spring Cloud Gateway: ...

    基于springCloud的灰度发布源码文件

    灰度发布 根据请求的流量,将流量分流,分一小部分转至新版本的使用,这个新版本即为灰度发布方案,灰度的使用通过后,会通过调整新版本的使用流量进行融合 简单说:新功能上线,就新老系统共存,共存的空间就是灰度...

Global site tag (gtag.js) - Google Analytics