ABTesingGateway 是一个可以动态设置分流策略的灰度发布系统,工作在7层,基于tengine,采用ngx-lua开发,使用 redis 作为分流策略数据库,可以实现动态调度功能。
nginx是目前使用较多的7层服务器,可以实现高性能的转发和响应;ABTestingGateway 是在 nginx 转发的框架内,在转向 upstream 前,根据 用户请求特征 和 系统的分流策略 ,查找出目标upstream,进而实现分流。
由于AB框架只支持4种策略类型,对于业务要根据请求Cookie、自定义header控制转发的情况,均需要开发新的策略类型和发布上线。另外,策略类型和业务场景紧密相关,导致AB系统的扩展性极差,很难快速支持新业务的路由需求。
无论是Nginx if指令,还是AB框架,要么需要reload重新加载才能生效,要么无法支持某些业务场景下的分流需求,所以都很难作为解决公司级分流框架的有效手段。针对它们所存在的不足,Oceanus开发了一套应用级、高可扩展的动态分流框架,不仅动态支持各种业务场景的分流需求,而且保证了请求转发的性能,下文将阐述我们如何解决分流机制的几个核心问题。
meituan Oceanus定制化路由的核心设计&实现
关于分流机制,我们主要从以下四个方面来讲述:
- 策略抽象:合理定义策略结构,适用尽可能多的业务场景。
- 策略的高效查询:接口粒度关联,应用维度管理。
- 运行时策略渲染:渲染策略模板,判断是否匹配策略,实现动态路由。
- 分组动态更新:分组数据增删改,均不需要reload。