Skip to content

traefik plugin for sticky session based on request header

Notifications You must be signed in to change notification settings

nullxjx/StickyHeader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

StickyHeader

StickyHeader 是用于 traefik 的一个插件,它可以根据 header 实现 sticky session

Introduction

traefik 使用 cookie 实现 sticky session,且默认不支持基于 header 的会话保持能力(例如 IP Hash)。 但是有些业务场景需要根据 header 做会话保持。例如,vllm 等大模型推理服务的 prefix-caching 特性,希望将同一个用户的请求转发到同一个 vllm pod,这样可以提高 gpu 中的 kv cache命中率。

因此,此插件使用一个本地的 lru cache,存储请求中设置的 header 到 traefik 设置的 cookie 之间的映射关系,这样就可以将 traefik 基于 cookie 实现的会话保持能力,转换成基于请求 header 的会话保持能力。

Usage

  1. 由于 yaegi 暂时不支持 Go modules,因此需要先将仓库的依赖下载到本地 vendor 目录下
go mod tidy
go mod download
go mod vendor
  1. 启动服务
cd demo
docker-compose up -d

执行命令后,可以从 traefik 日志中看到加载插件成功

同时,也可以在 traefik dashboard 看到这条路由成功应用上了这个插件

  1. 测试基于 header 的会话保持能力
bash req.sh

修改 header 中的 X-USER-ID 的值,从响应结果中观察是否切换了一个 whoami pod。

Limitations

由于采用了本地的 lru cache,所以插件变成了有状态服务,因此,无法设置多个traefik pod副本(在k8s集群中部署的情况),如果需要使用多个 traefik pod副本,需要把这里的 lru cache 改成 Redis 这类共享缓存。

About

traefik plugin for sticky session based on request header

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages