Higress 基于自定义插件访问 Redis
内容提要
Higress通过支持Redis调用,增强了插件的能力,满足用户个性化需求。插件已支持Redis调用,实现多网关全局限流、token限流、基于cookie的缓存、容灾和会话管理等功能。
延伸解读
Redis 调用如何让插件具备状态
文章指出,Higress 基于 wasm 机制支持 Go/C++/Rust 编写插件,而 Redis 调用的加入让插件从无状态变为有状态。这意味着插件可以跨请求共享数据,例如在限流场景中,通过 Redis 的原子操作统计请求次数或 token 用量,实现多网关间的全局配额管理。这种能力扩展了插件的适用边界,使其不再局限于单机或单请求逻辑。
多网关全局限流与 token 限流的实现差异
文章展示了两种限流插件:多网关全局限流在请求头阶段用 Redis 的 Incr 统计每分钟请求数,超出配额返回 429;token 限流则针对通义千问等 AI 服务,在请求体阶段检查剩余 token,在响应体阶段用 IncrBy 累加实际消耗的 token。两者都依赖 Redis 存储时间窗口内的计数,但 token 限流需要解析响应体中的 usage.total_tokens,实现更贴近业务用量。
基于 cookie 的缓存、容灾与会话管理的价值
文章提到,利用 Redis 和用户 cookie 可以实现缓存、容灾和会话管理。缓存请求应答能减轻后端压力,后端不可用时还能作为容灾手段;会话管理则将认证鉴权信息存入 Redis,请求先查 Redis 判断是否已授权,未授权再访问认证服务,从而降低认证鉴权服务的负载。这些场景说明 Redis 插件能支撑多种有状态网关逻辑。
使用 Redis 插件时需注意的失败处理
文章中的代码示例显示,当 Redis 调用出错时,插件通常会记录日志并放行请求(ResumeHttpRequest),而不是直接阻断。例如全局限流插件在 Incr 出错时返回 ActionContinue,token 限流插件在 Get 出错时也放行。这种设计避免因 Redis 不可用导致所有请求失败,但也意味着限流或鉴权可能暂时失效,读者在实现时需根据业务容忍度决定失败策略。
Q&A
Higress如何增强插件的能力?
Higress通过支持Redis调用,增强了插件的能力,使其能够满足用户的个性化需求。
Higress支持哪些功能通过Redis调用?
Higress支持多网关全局限流、token限流、基于cookie的缓存、容灾和会话管理等功能。
如何实现多网关全局限流?
通过Redis插件,用户可以实现多网关的全局限额管理,有效保护后端业务应用。
Higress的插件可以用哪些编程语言编写?
用户可以基于Go、C++或Rust编写Higress的wasm插件,自定义请求处理逻辑。
Higress如何管理用户的token配额?
Higress通过网关插件实现token限流,管理用户的token配额,确保服务的稳定性。
基于cookie的缓存有什么好处?
基于cookie的缓存可以减轻后端服务压力,并在后端服务不可用时实现容灾效果。