• 业界方案
  • Nginx if指令
  • 功能
  • ngx_http_rewrite_module
  • 简单业务分流
  • 优点
  • 不需要额外开发,性能方面也接近原生的Nginx框架
  • 缺点
  • 使用场景比较受限,if指令仅支持比较简单的condition类型
  • 规则调整不支持动态化:调整策略,需要对Nginx进行reload,而reload操作会使Nginx的并发能力下降,业务高峰时甚至会导致请求504或502。
  • 指令坑太多:if指令和set、rewrite指令等一起使用时,很多时候会出现不符合预期的行为,严重时甚至会导致段错误,最好的方法就是避免使用。
  • ABTestingGateway
  • 功能
  • 数据存在redis中
  • 使用lua-shared-dict、lua-resty-lock作为缓存
  • 根据策略 iprange、uidrange、uidsuffix、uidappoint 进行匹配分流


ABTestingGateway灰度发布系统压测报告github.com

  • 优点
  • 策略调整动态生效:已有策略类型中的策略变更均可以通过HTTP API进行动态管理。
  • 分流策略丰富:支持IP段、UID段等策略,也可以通过新增策略类型对策略库进行扩展。
  • 缺点
  • AB框架只支持4种策略类型,对于业务要根据请求Cookie、自定义header控制转发的情况,均需要开发新的策略类型和发布上线。
  • 策略类型和业务场景紧密相关,导致AB系统的扩展性极差,很难快速支持新业务的路由需求。
  • 美团方案
  • Oceanus
  • 功能
  • 策略抽象:合理定义策略结构,适用尽可能多的业务场景。
  • 策略的- 高效查询:接口粒度关联,应用维度管理。
  • 运行时策略渲染:渲染策略模板,判断是否匹配策略,实现动态路由。
  • 分组动态更新:分组数据增删改,均不需要reload
  • 策略属性(字段)
  • name:策略名,没有实际意义,可以根据业务场景进行定义。
  • key:分流时依赖的关键字,比如要根据城市地域进行分发路由时,key就是regionid。
  • passway:关键字在HTTP协议中的传输方式,可以是Parameter、Cookie、header、body中的一种。
  • condition:表达式模板,支持四则运算/取模、关系运算符、逻辑运算符等。
  • group:后端服务集群,即匹配策略后,转发请求的目标节点,一般是策略所属应用集群中的部分节点。
  • category:策略类型,如果为1,表示某个服务的私有策略;如果为2,表示公共策略,主要用于策略数据管理。
  • switch:策略开关,用于控制当前策略是在线还是离线。
  • graylist:灰度列表,用于策略变更的线上灰度校验


Oceanus业务场景awps-assets.meituan.net



nginx reload keepalive中断 nginx reload会影响http断吗_动态更新


  • Oceanus业务拓扑结构


nginx reload keepalive中断 nginx reload会影响http断吗_动态更新_02


优点

  • 运行时获取Location path
  • 异步更新机制


nginx reload keepalive中断 nginx reload会影响http断吗_动态更新_03


  • 运行时策略渲染
  • 分组动态更新
  • 缺点
  • 目前暂未开源
  • 提供一种思路和方法