• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ngx_http_dyabt_module: Nginx动态灰度发布模块

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

ngx_http_dyabt_module

开源软件地址:

https://gitee.com/xausky/ngx_http_dyabt_module

开源软件介绍:

ngx_http_dyabt_module

可以动态修改分配规则的Nginx灰度发布模块,完全使用C语言实现,提供Restful风格的API,几乎不影响Nginx性能。

推荐结合ngx_http_dyups_module使用

Tengine 2.2.0和Nginx 1.10.2上编译测试通过。

指令参考

1 dyabt_interface

配置于location块内,作为一个Handler提供Restful API同时也是该模块的开关指令,不配置该指令模块运行于disable模式,所有dyabt_set指令返回0。

2 dyabt_set <var> <domain>

配置于location块内,使用domain对应的规则解析当前请求并将结果存到var变量内。

Nginx 配置参考

events {}http {    server {        listen 4000;        location / {			dyabt_set $ab $host;            return 200 $ab.$host;        }    }    server {        listen 4032;        location / {			dyabt_interface;        }    }}
  1. 以HTTP请求Header Host即访问域名为域,将解析结果存放到$ab变量。
  2. 返回$ab.$host响应,实际使用中这里一般为proxy_pass。

Restful API参考

POST /testingsxausky.example.org,header_x_uid0,1011,100101,99999999200 OKsuccess
  1. 提交一个规则到规则列表。
  2. 以xausky.example.org为域,如果有相同域的规则将会覆盖规则。
  3. 以header_x_uid为解析器,header_x_uid将解析出HTTP Headers内的X-UID对应的值。
  4. 下面三个Case,Case描述一个闭区间,使用dyabt_set指令时模块将顺序进行匹配,返回从1开始的成功索引,如果全部失败或者没有对应域将返回0。
GET /testings[/<domain>]200 OKinit.example.org,header_x_uid0,1011,100101,99999999---xausky.example.org,header_x_uid0,1011,100101,99999999---<...>
  1. 查询规则列表。
  2. 返回domain为域的规则列表。
  3. 若没有domain段将返回所有规则这时以---行分割规则。
DELETE /testings/<domain>200 OKsuccess
  1. 删除domain对应的规则。
  2. dyabt_set指令对于不存在的域将返回0。

解析器

已有解析器

  1. header_x_uid 该解析器将取出X-UID Header对应的值。
  2. remote_ip 该解析器将客户端IP转换为整型值,比如 0.0.1.0 -> 256

实现新解析器

  1. C代码里面实现typedef long long (*ngx_http_dyabt_parser_ptr_t)(ngx_http_request_t *r);接口
  2. ngx_http_dyabt_init_process函数内注册,例如:
parser = ngx_array_push(&parsers);ngx_str_set(&parser->key,"header_x_uid");parser->key_hash = ngx_hash_key(parser->key.data,parser->key.len);parser->value = ngx_http_dyabt_uid_parser;

性能测试

系统:Linux Kernel 4.8.10

线程数: 200

服务器: Tengine 2.2.0

处理器: Intel(R) Core(TM) i7-7500U CPU @ 2.70GHz

Tengine 原生转发:Tengine 原生转发

Tengine 使用本模块转发:Tengine 原生转发

Tengine 使用本模块同时每秒更新一次规则:Tengine 原生转发


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
scoop-cn: 发布时间:2022-03-25
下一篇:
hbase-elasticsearch: hbase-elasticsearch数据同步工具 支持hbase到elasticsearch、h ...发布时间:2022-03-25
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap