<commit_before>基于动态策略的灰度发布系统
========================

这是一个基于动态策略的灰度发布系统，基于ngx-lua开发，可以动态替换分流策略，实现动态调度功能。


灰度发布系统的主要功能是实现用户请求的分流转发，工作在7层，根据用户请求特征，如UID、IP等，将请求转发至upstream server，实现分流。nginx是目前使用较多的7层服务器，可以实现高性能的转发和响应；灰度发布系统的主要工作是在nginx转发的框架内，在转向upstream前，根据用户请求特征和分流策略，计算出目标upstream进而分流。灰度系统需要灵活而高效的实现这部分逻辑，使得对原生nginx转发的影响降到最低。

Features:
----------

- 基于nginx和ngx-lua开发
- 支持多种分流方式，目前包括iprange、uidrange、uid尾数和指定uid分流等
- 动态设置分流策略，即时生效，无需重启
- 可扩展性，灵活添加新的分流方式
- 高性能，压测数据接近原生nginx转发
- 灰度系统配置写在nginx配置文件中，方便管理员配置
- 适用于多种场景：灰度发布、AB测试和负载均衡等

功能介绍
------------
###分流功能：
转发和分流功能是灰度系统的主要功能，目前系统支持按照ip段分流、uid段分流、uid尾数分流和指定特殊uid分流四种方式；同时系统提供接口，基于此，开发人员可以灵活添加新的分流方式 ，进行二次开发。
    
1. iprange

        IP段分流方式的分流策略为：
            {<commit_msg>add image<commit_after>基于动态策略的灰度发布系统
========================

这是一个基于动态策略的灰度发布系统，基于ngx-lua开发，可以动态替换分流策略，实现动态调度功能。


灰度发布系统的主要功能是实现用户请求的分流转发，工作在7层，根据用户请求特征，如UID、IP等，将请求转发至upstream server，实现分流。nginx是目前使用较多的7层服务器，可以实现高性能的转发和响应；灰度发布系统的主要工作是在nginx转发的框架内，在转向upstream前，根据用户请求特征和分流策略，计算出目标upstream进而分流。灰度系统需要灵活而高效的实现这部分逻辑，使得对原生nginx转发的影响降到最低。

<div align="center"><img src="https://raw.githubusercontent.com/SinaMSRE/ABTestingGateway/master/doc/img/abtesting_architect.png" width="50%" height="50%"></div>

Features:
----------

- 基于nginx和ngx-lua开发
- 支持多种分流方式，目前包括iprange、uidrange、uid尾数和指定uid分流等
- 动态设置分流策略，即时生效，无需重启
- 可扩展性，灵活添加新的分流方式
- 高性能，压测数据接近原生nginx转发
- 灰度系统配置写在nginx配置文件中，方便管理员配置
- 适用于多种场景：灰度发布、AB测试和负载均衡等

功能介绍
------------
###分流功能：
转发和分流功能是灰度系统的主要功能，目前系统支持按照ip段分流、uid段分流、uid尾数分流和指定特殊uid分流四种方式；同时系统提供接口，基于此，开发人员可以灵活添加新的分流方式 ，进行二次开发。
    
1. iprange

        IP段分流方式的分流策略为：
            {
{'fraction_non_alphanumeric': 0.14835505896958412, 'fraction_numerical': 0.006207324643078833, 'mean_word_length': 6.825242718446602, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 6, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3413887', 'n_tokens_mistral': 1164, 'n_tokens_neox': 1377, 'n_words': 44}