当前位置: 首页 > article >正文

ABTestingGateway扩展开发教程:如何添加新的自定义分流方式

ABTestingGateway扩展开发教程如何添加新的自定义分流方式【免费下载链接】ABTestingGateway项目地址: https://gitcode.com/gh_mirrors/ab/ABTestingGatewayABTestingGateway是一款基于Nginx-Lua的动态分流系统通过灵活的策略配置实现请求的智能路由。本教程将详细介绍如何为ABTestingGateway添加全新的自定义分流方式帮助开发者快速扩展系统功能以满足特定业务需求。为什么需要自定义分流方式在实际业务场景中标准的分流策略如IP段、用户ID范围往往无法满足所有需求。例如根据用户地理位置城市定向分流基于请求参数或Cookie内容的规则匹配结合用户行为特征的动态路由ABTestingGateway的模块化设计允许开发者轻松扩展新的分流方式而无需修改核心框架。系统架构与分流原理ABTestingGateway的分流机制基于以下核心组件ABTestingGateway架构图展示了Nginx-Lua与Redis的交互流程以及请求分流的基本原理分流决策流程如下外部请求进入Nginx系统从Redis获取分流策略根据策略匹配规则将请求路由到对应上游服务结果通过cache层返回以提高性能自定义分流开发的核心步骤添加新的分流方式需要完成三个关键任务定义分流策略格式开发分流模块divModule实现用户特征提取模块userInfoModule步骤一制定分流策略格式分流策略是JSON格式的配置文件包含两个核心字段divtype分流类型标识需全局唯一divdata具体的分流规则集合以按请求参数city分流为例策略格式定义如下{ divtype: arg_city, divdata: [ {city: BJ, upstream: beta1}, {city: SH, upstream: beta2}, {city: TJ, upstream: beta1}, {city: CQ, upstream: beta3} ] }策略中的divtype值arg_city将作为后续模块开发的关键标识步骤二开发分流模块divModule分流模块负责策略的验证、存储和分流决策所有分流模块都位于lib/abtesting/diversion/目录下。创建分流模块文件根据divtype创建对应的Lua模块文件lib/abtesting/diversion/arg_city.lua模块基本结构如下local modulename abtestingDiversionArgCity local _M {} local mt { __index _M } _M._VERSION 0.0.1 -- 初始化方法 _M.new function(self, database, policyLib) -- 初始化逻辑 end -- 策略检查方法 _M.check function(self, policy) -- 验证策略合法性 end -- 策略设置方法 _M.set function(self, policy) -- 将策略存储到数据库 end -- 策略获取方法 _M.get function(self) -- 从数据库读取策略 end -- 核心分流方法 _M.getUpstream function(self, city) -- 根据城市参数返回对应的上游服务 end return _M实现核心方法详解1. 初始化方法new_M.new function(self, database, policyLib) if not database then error{ERRORINFO.PARAMETER_NONE, need avaliable redis db} end if not policyLib then error{ERRORINFO.PARAMETER_NONE, need avaliable policy lib} end self.database database -- Redis数据库连接 self.policyLib policyLib -- 策略存储的Redis键名 return setmetatable(self, mt) end错误码定义在lib/abtesting/error/errcode.lua可根据需要扩展自定义错误类型2. 策略检查方法check_M.check function(self, policy) local k_city city local k_upstream upstream for _, v in pairs(policy) do local city v[k_city] local upstream v[k_upstream] if not city or not upstream then local info ERRORINFO.POLICY_INVALID_ERROR local desc need ..k_city.. and ..k_upstream return {false, info, desc} end end return {true} end该方法确保策略包含必要的字段防止无效配置导致系统异常3. 策略存储方法set_M.set function(self, policy) local database self.database local policyLib self.policyLib local k_city city local k_upstream upstream database:init_pipeline() for _, v in pairs(policy) do database:hset(policyLib, v[k_city], v[k_upstream]) end local ok, err database:commit_pipeline() if not ok then error{ERRORINFO.REDIS_ERROR, err} end end使用Redis的Hash结构存储城市与上游服务的映射关系4. 分流决策方法getUpstream_M.getUpstream function(self, city) local database self.database local policyLib self.policyLib local upstream, err database:hget(policyLib, city) if not upstream then error{ERRORINFO.REDIS_ERROR, err} end if upstream ngx.null then return nil -- 无匹配策略时返回nil else return upstream end end步骤三开发用户特征提取模块用户特征提取模块负责从请求中提取分流所需的特征值所有提取模块位于lib/abtesting/userinfo/目录。创建提取模块文件创建lib/abtesting/userinfo/cityParser.lua文件实现从请求参数中提取城市信息local _M { _VERSION 0.01 } _M.get function() -- 从URL参数中获取city值 local city ngx.var.arg_city ngx.log(ngx.ERR, Extracted city: .. (city or nil)) return city end return _M关联分流类型与提取模块修改lib/abtesting/utils/init.lua文件在divtypes表中添加新的分流类型映射_M.divtypes { [iprange] ipParser, [uidrange] uidParser, [uidsuffix] uidParser, [uidappoint] uidParser, [arg_city] cityParser -- 添加新的分流类型映射 }divtypes表建立了分流类型divtype与特征提取模块的关联关系策略配置与运行时流程分流策略与运行时数据交互运行时策略交互图展示了runtimeInfo与policy数据的关联方式系统运行时会执行以下步骤根据divtype找到对应的提取模块如arg_city-cityParser调用提取模块获取用户特征如从请求中提取city参数调用分流模块根据特征值匹配上游服务返回匹配结果并路由请求添加策略到系统将定义好的JSON策略通过POST请求添加到系统# 使用curl命令添加策略 curl -X POST http://your-gateway/admin/policy/set \ -H Content-Type: application/json \ -d {divtype:arg_city,divdata:[{city:BJ,upstream:beta1},{city:SH,upstream:beta2}]}策略添加接口实现在admin/policy.lua可通过doc/ab分流策略.md了解更多策略格式完整开发示例总结以按城市参数分流为例完整的实现文件包括分流模块lib/abtesting/diversion/arg_city.lua提取模块lib/abtesting/userinfo/cityParser.lua类型映射lib/abtesting/utils/init.lua修改通过这种模块化方式你可以轻松实现各种自定义分流逻辑如基于用户设备类型的分流按请求头信息的规则匹配结合第三方API的动态决策扩展建议与最佳实践策略设计保持策略格式简洁明了考虑添加版本控制字段设计合理的默认分流规则性能优化利用Nginx共享内存缓存频繁访问的策略优化Redis操作使用pipeline减少网络往返参考doc/带cache性能.png的性能对比数据错误处理使用系统统一的错误码机制为关键操作添加详细日志实现降级策略应对极端情况测试验证编写单元测试验证分流逻辑使用utils/pytool/中的工具进行压力测试参考doc/灰度发布系统压测报告.pdf的测试方法通过本教程你已经掌握了ABTestingGateway扩展自定义分流方式的完整流程。这种模块化的扩展机制确保了系统的灵活性和可维护性使你能够快速响应各种业务需求变化。更多高级用法请参考项目文档doc/目录下的详细说明。【免费下载链接】ABTestingGateway项目地址: https://gitcode.com/gh_mirrors/ab/ABTestingGateway创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

ABTestingGateway扩展开发教程:如何添加新的自定义分流方式

ABTestingGateway扩展开发教程:如何添加新的自定义分流方式 【免费下载链接】ABTestingGateway 项目地址: https://gitcode.com/gh_mirrors/ab/ABTestingGateway ABTestingGateway是一款基于Nginx-Lua的动态分流系统,通过灵活的策略配置实现请求…...

为什么选择Etar-Calendar:5大理由让你爱上这款隐私友好的日历工具

为什么选择Etar-Calendar:5大理由让你爱上这款隐私友好的日历工具 【免费下载链接】Etar-Calendar Android open source calendar 项目地址: https://gitcode.com/gh_mirrors/et/Etar-Calendar Etar-Calendar是一款专为Android用户打造的开源日历应用&#x…...

Sloth 插件系统详解:如何自定义 SLI 和扩展功能

Sloth 插件系统详解:如何自定义 SLI 和扩展功能 【免费下载链接】sloth 🦥 Easy and simple Prometheus SLO (service level objectives) generator 项目地址: https://gitcode.com/gh_mirrors/slo/sloth Sloth 是一款简单易用的 Prometheus SLO&…...

Time-LLM社区生态:从NeuralForecast到PyPOTS的集成之路

Time-LLM社区生态:从NeuralForecast到PyPOTS的集成之路 【免费下载链接】Time-LLM [ICLR 2024] Official implementation of " 🦙 Time-LLM: Time Series Forecasting by Reprogramming Large Language Models" 项目地址: https://gitcode.c…...

PyQuery vs BeautifulSoup:哪个才是Python网页爬虫的最佳选择?

PyQuery vs BeautifulSoup:哪个才是Python网页爬虫的最佳选择? 【免费下载链接】pyquery A jquery-like library for python 项目地址: https://gitcode.com/gh_mirrors/py/pyquery 在Python网页爬虫领域,选择合适的解析库往往决定了开…...

ALNS算法调参实战:如何让Python版VRPTW求解器效率提升50%?

ALNS算法调参实战:如何让Python版VRPTW求解器效率提升50%? 在物流优化领域,带时间窗的车辆路径问题(VRPTW)一直是算法工程师面临的经典挑战。当基础版本的ALNS算法已经能够跑通业务流程,但面对真实业务场景…...

Windows上安装Android应用的终极指南:APK Installer完整教程

Windows上安装Android应用的终极指南:APK Installer完整教程 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 在Windows电脑上直接安装Android应用曾经是件复…...

Node-Cache 测试策略与覆盖率:确保缓存可靠性的完整方法

Node-Cache 测试策略与覆盖率:确保缓存可靠性的完整方法 【免费下载链接】node-cache a node internal (in-memory) caching module 项目地址: https://gitcode.com/gh_mirrors/no/node-cache Node-Cache 作为一款轻量级的内存缓存模块,其可靠性直…...

Advanced Tables 开发者指南:理解插件架构与扩展开发

Advanced Tables 开发者指南:理解插件架构与扩展开发 【免费下载链接】advanced-tables-obsidian Improved table navigation, formatting, and manipulation in Obsidian.md 项目地址: https://gitcode.com/gh_mirrors/ad/advanced-tables-obsidian Advance…...

弧齿锥齿轮齿面接触分析(TCA)技术详解:从理论到工程实践

158.基于matlab的用于分析弧齿锥齿轮啮合轨迹的输出齿轮啮合轨迹及传递误差程序已调通,可直接运行1. 引言:TCA技术的重要性与挑战 弧齿锥齿轮作为机械传动系统的核心部件,其啮合质量直接影响整个传动装置的可靠性、效率和使用寿命。齿面接触分…...

G-Helper完整指南:华硕笔记本显示色彩异常问题的终极解决方案

G-Helper完整指南:华硕笔记本显示色彩异常问题的终极解决方案 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, St…...

【数字乡村+智慧农业合集】1800余份智慧农业、数字乡村、乡村振兴、田园综合体方案报告合集

乡村振兴是总纲领,数字乡村与田园综合体是实现路径:前者以数字技术赋能乡村全域,后者以三产融合激活乡村经济。数字农业作为数字乡村的核心,聚焦农业生产智能化,共同支撑产业兴旺与乡村全面发展。乡村振兴是总目标&…...

VexRiscv多核SMP架构:构建高性能RISC-V集群的完整解决方案

VexRiscv多核SMP架构:构建高性能RISC-V集群的完整解决方案 【免费下载链接】VexRiscv A FPGA friendly 32 bit RISC-V CPU implementation 项目地址: https://gitcode.com/gh_mirrors/ve/VexRiscv VexRiscv多核SMP架构为嵌入式系统和边缘计算提供了一个完全开…...

免费开源歌词编辑器终极指南:5分钟掌握专业级LRC歌词制作

免费开源歌词编辑器终极指南:5分钟掌握专业级LRC歌词制作 【免费下载链接】lrc-maker 歌词滚动姬|可能是你所能见到的最好用的歌词制作工具 项目地址: https://gitcode.com/gh_mirrors/lr/lrc-maker 你是否曾经为音乐创作或翻唱作品制作歌词时&am…...

SmartEnum扩展包深度探索:AutoFixture、GuardClauses等工具的最佳实践

SmartEnum扩展包深度探索:AutoFixture、GuardClauses等工具的最佳实践 【免费下载链接】SmartEnum A base class for quickly and easily creating strongly typed enum replacements in C#. 项目地址: https://gitcode.com/gh_mirrors/smar/SmartEnum Smart…...

Rockchip RK3588新板级DTS创建实战:从参考设计到硬件适配

1. RK3588开发板DTS适配的核心逻辑 刚拿到一块基于RK3588的新硬件时,很多开发者会直接复制官方DTS文件开始修改。这种操作看似高效,实则埋下了维护隐患。我经历过三次硬件迭代后,总结出更合理的做法:像搭积木一样构建DTS。Rockchi…...

Rockchip RK3588 硬件看门狗从内核到应用的完整配置与调试

1. 硬件看门狗基础与RK3588特性 硬件看门狗(Watchdog)是嵌入式系统的"救命稻草",它就像个严格的计时员,如果系统在规定时间内没有定期"签到"(喂狗),就会强制重启整个系统。…...

为什么ModelMapper是Java开发者的必备工具:解决复杂对象映射的完整方案

为什么ModelMapper是Java开发者的必备工具:解决复杂对象映射的完整方案 【免费下载链接】modelmapper Intelligent object mapping 项目地址: https://gitcode.com/gh_mirrors/mo/modelmapper ModelMapper是一款智能对象映射工具,专为Java开发者设…...

Payment核心架构解析:深入理解统一网关设计与代理模式

Payment核心架构解析:深入理解统一网关设计与代理模式 【免费下载链接】payment Payment是php版本的支付聚合第三方sdk,集成了微信支付、支付宝支付、招商一网通支付。提供统一的调用接口,方便快速接入各种支付、查询、退款、转账能力。服务端…...

避坑指南:Python模拟抖音扫码登录时,那些你可能会遇到的‘Referer’和‘Token’校验问题

Python模拟抖音扫码登录实战:破解Referer校验与Token失效的五大陷阱 当你在深夜调试抖音扫码登录接口时,控制台突然抛出403错误——这可能是每个爬虫开发者都经历过的噩梦时刻。不同于常规教程展示的理想流程,真实开发中你会遇到各种隐蔽的校…...

db-migrate错误处理与调试:常见问题排查完全指南

db-migrate错误处理与调试:常见问题排查完全指南 【免费下载链接】node-db-migrate Database migration framework for node 项目地址: https://gitcode.com/gh_mirrors/no/node-db-migrate 在开发过程中,数据库迁移是项目迭代的重要环节&#xf…...

Sketch 终极指南:Android 上最强大的图片加载库完全解析

Sketch 终极指南:Android 上最强大的图片加载库完全解析 【免费下载链接】sketch Sketch is an image loading library designed for Compose Multiplatform and Android View. It is powerful and rich in functions. In addition to basic functions, it also sup…...

保姆级教程:用OpenCV搞定鱼眼双目相机的标定与测距(附完整C++代码)

鱼眼双目视觉实战:从标定到三维测距的全流程解析 鱼眼镜头因其超广视角特性,在机器人导航、VR全景拍摄等领域应用广泛。但大畸变特性也给双目视觉系统带来额外挑战——传统标定方法直接套用往往导致测距误差剧增。本文将用OpenCV的fisheye模块&#xff0…...

终极指南:如何参与End-To-End开源加密项目开发

终极指南:如何参与End-To-End开源加密项目开发 【免费下载链接】end-to-end End-To-End is a crypto library to encrypt, decrypt, digital sign, and verify signed messages (implementing OpenPGP) 项目地址: https://gitcode.com/gh_mirrors/en/end-to-end …...

终极指南:React Flip Move 如何设计优雅的进入/离开动画预设

终极指南:React Flip Move 如何设计优雅的进入/离开动画预设 【免费下载链接】react-flip-move Effortless animation between DOM changes (eg. list reordering) using the FLIP technique. 项目地址: https://gitcode.com/gh_mirrors/re/react-flip-move …...

终极Codebox桌面应用构建教程:Linux和Mac完整配置指南

终极Codebox桌面应用构建教程:Linux和Mac完整配置指南 【免费下载链接】codebox Open source cloud & desktop IDE 项目地址: https://gitcode.com/gh_mirrors/co/codebox Codebox作为一款开源的云桌面IDE,为开发者提供了强大的代码编辑和项目…...

WinJS性能优化终极指南:10个技巧提升应用响应速度

WinJS性能优化终极指南:10个技巧提升应用响应速度 【免费下载链接】winjs A UI toolkit for modern browsers 项目地址: https://gitcode.com/gh_mirrors/wi/winjs WinJS作为现代浏览器的UI工具包,其性能表现直接影响用户体验。本文将分享10个实用…...

mCaptcha性能优化技巧:应对高并发场景的10个最佳实践

mCaptcha性能优化技巧:应对高并发场景的10个最佳实践 【免费下载链接】mCaptcha A no-nonsense CAPTCHA system with seamless UX | Backend component 项目地址: https://gitcode.com/gh_mirrors/mc/mCaptcha mCaptcha是一个注重用户体验的CAPTCHA系统后端组…...

失业ing零零碎碎记一下unity相关的东西备忘

零零碎碎记一下unity相关的东西备忘 渲染: https://github.com/festivities/PrimoToon 仿原神的卡通渲染, 参照这种文档: Unity Built-in Shader转URP Shader 接口查询对照表之类的 自己强行改api到urp可用,改了三四天&…...

LLM 提示工程:技巧与最佳实践

LLM 提示工程:技巧与最佳实践 引言 大语言模型(LLM)如GPT-4、Claude、LLaMA等的出现,彻底改变了我们与人工智能交互的方式。然而,要充分发挥这些模型的潜力,掌握提示工程(Prompt Engineering&am…...