mirror of
https://github.com/yusing/godoxy.git
synced 2026-04-20 23:41:23 +02:00
refactor(loadbalancer): implement sticky sessions and improve algorithm separation
- Refactor load balancer interface to separate server selection (ChooseServer) from request handling - Add cookie-based sticky session support with configurable max-age and secure cookie handling - Integrate idlewatcher requests with automatic sticky session assignment - Improve algorithm implementations: * Replace fnv with xxhash3 for better performance in IP hash and server keys * Add proper bounds checking and error handling in all algorithms * Separate concerns between server selection and request processing - Add Sticky and StickyMaxAge fields to LoadBalancerConfig - Create dedicated sticky.go for session management utilities
This commit is contained in:
@@ -2,6 +2,7 @@ package types
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
nettypes "github.com/yusing/godoxy/internal/net/types"
|
||||
strutils "github.com/yusing/goutils/strings"
|
||||
@@ -9,10 +10,12 @@ import (
|
||||
|
||||
type (
|
||||
LoadBalancerConfig struct {
|
||||
Link string `json:"link"`
|
||||
Mode LoadBalancerMode `json:"mode"`
|
||||
Weight int `json:"weight"`
|
||||
Options map[string]any `json:"options,omitempty"`
|
||||
Link string `json:"link"`
|
||||
Mode LoadBalancerMode `json:"mode"`
|
||||
Weight int `json:"weight"`
|
||||
Sticky bool `json:"sticky"`
|
||||
StickyMaxAge time.Duration `json:"sticky_max_age"`
|
||||
Options map[string]any `json:"options,omitempty"`
|
||||
} // @name LoadBalancerConfig
|
||||
LoadBalancerMode string // @name LoadBalancerMode
|
||||
LoadBalancerServer interface {
|
||||
@@ -35,6 +38,8 @@ const (
|
||||
LoadbalanceModeIPHash LoadBalancerMode = "iphash"
|
||||
)
|
||||
|
||||
const StickyMaxAgeDefault = 1 * time.Hour
|
||||
|
||||
func (mode *LoadBalancerMode) ValidateUpdate() bool {
|
||||
switch strutils.ToLowerNoSnake(string(*mode)) {
|
||||
case "":
|
||||
|
||||
Reference in New Issue
Block a user