Documentation
¶
Index ¶
- func BuildRateLimiterMiddleware(cfg RateLimitConfig, metrics *Metrics) (func(http.Handler) http.Handler, error)
- func New(cfg *Config, logger *log.Logger) (*LoadBalancer, *HealthChecker, error)
- type Backend
- type BackendConfig
- type Config
- type ErrUnknownStrategy
- type HealthCheckConfig
- type HealthChecker
- type LeastConnectionsStrategy
- type LoadBalancer
- type Metrics
- type RateLimitConfig
- type RoundRobinStrategy
- type Strategy
- type WeightedRoundRobinStrategy
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func New ¶
func New(cfg *Config, logger *log.Logger) (*LoadBalancer, *HealthChecker, error)
Types ¶
type Backend ¶
type Backend struct {
Name string
URL *url.URL
Weight int
HealthPath string
// contains filtered or unexported fields
}
Backend represents one upstream service target.
func NewBackend ¶
func (*Backend) ActiveConnections ¶
type BackendConfig ¶
type Config ¶
type Config struct {
ListenAddr string `json:"listen_addr" yaml:"listen_addr"`
Strategy string `json:"strategy" yaml:"strategy"`
Backends []BackendConfig `json:"backends" yaml:"backends"`
HealthCheck HealthCheckConfig `json:"health_check" yaml:"health_check"`
RateLimit RateLimitConfig `json:"rate_limit" yaml:"rate_limit"`
}
Config describes all runtime settings for the load balancer.
func LoadConfig ¶
type ErrUnknownStrategy ¶
type ErrUnknownStrategy struct {
// contains filtered or unexported fields
}
func (ErrUnknownStrategy) Error ¶
func (e ErrUnknownStrategy) Error() string
type HealthCheckConfig ¶
type HealthChecker ¶
type HealthChecker struct {
// contains filtered or unexported fields
}
func NewHealthChecker ¶
func NewHealthChecker(cfg HealthCheckConfig, backends []*Backend, logger *log.Logger) (*HealthChecker, error)
func (*HealthChecker) Start ¶
func (h *HealthChecker) Start(ctx context.Context)
type LeastConnectionsStrategy ¶
type LeastConnectionsStrategy struct{}
func (*LeastConnectionsStrategy) Name ¶
func (s *LeastConnectionsStrategy) Name() string
func (*LeastConnectionsStrategy) Next ¶
func (s *LeastConnectionsStrategy) Next(backends []*Backend) *Backend
type LoadBalancer ¶
type LoadBalancer struct {
// contains filtered or unexported fields
}
func (*LoadBalancer) Backends ¶
func (lb *LoadBalancer) Backends() []*Backend
func (*LoadBalancer) Metrics ¶
func (lb *LoadBalancer) Metrics() *Metrics
func (*LoadBalancer) ServeHTTP ¶
func (lb *LoadBalancer) ServeHTTP(w http.ResponseWriter, r *http.Request)
func (*LoadBalancer) StartHealthChecks ¶
func (lb *LoadBalancer) StartHealthChecks(ctx context.Context, checker *HealthChecker)
type Metrics ¶
type Metrics struct {
TotalRequests atomic.Uint64
TotalErrors atomic.Uint64
RateLimited atomic.Uint64
ActiveRequests atomic.Int64
// contains filtered or unexported fields
}
Metrics captures basic operational counters.
func NewMetrics ¶
func NewMetrics() *Metrics
func (*Metrics) IncBackendError ¶
func (*Metrics) IncBackendRequest ¶
type RateLimitConfig ¶
type RateLimitConfig struct {
Enabled bool `json:"enabled" yaml:"enabled"`
Rate float64 `json:"rate" yaml:"rate"`
Burst int `json:"burst" yaml:"burst"`
HeatHalfLife string `json:"heat_half_life" yaml:"heat_half_life"`
HeatCost float64 `json:"heat_cost" yaml:"heat_cost"`
MaxKeys int `json:"max_keys" yaml:"max_keys"`
KeyHeader string `json:"key_header" yaml:"key_header"`
}
type RoundRobinStrategy ¶
type RoundRobinStrategy struct {
// contains filtered or unexported fields
}
func (*RoundRobinStrategy) Name ¶
func (s *RoundRobinStrategy) Name() string
func (*RoundRobinStrategy) Next ¶
func (s *RoundRobinStrategy) Next(backends []*Backend) *Backend
type Strategy ¶
func NewStrategy ¶
type WeightedRoundRobinStrategy ¶
type WeightedRoundRobinStrategy struct {
// contains filtered or unexported fields
}
WeightedRoundRobinStrategy uses smooth weighted round robin.
func NewWeightedRoundRobinStrategy ¶
func NewWeightedRoundRobinStrategy() *WeightedRoundRobinStrategy
func (*WeightedRoundRobinStrategy) Name ¶
func (s *WeightedRoundRobinStrategy) Name() string
func (*WeightedRoundRobinStrategy) Next ¶
func (s *WeightedRoundRobinStrategy) Next(backends []*Backend) *Backend
Click to show internal directories.
Click to hide internal directories.