bucket

package
v0.0.0-...-e93632a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 23, 2020 License: GPL-3.0 Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	AttemptsKey = "attempts"
	RetriesKey  = "retries"
)
View Source
const (
	RoundRobin = "round-robin"
)

Available loadbalancing algorithms

Variables

View Source
var (
	ErrInvalidServer         = errors.New("expected Server, got nil")
	ErrNoServersAvailable    = errors.New("no servers available")
	ErrAllServersUnreachable = errors.New("all servers unreachable")
	ErrServiceUnavailable    = errors.New("service not available")
)
View Source
var (
	ErrInvalidAlgorithm = errors.New("invalid balancing algorithm chosen.")
)

Functions

func GetAttemptsFromContext

func GetAttemptsFromContext(r *http.Request) int

GetAttemptsFromContext - extract attempts for request

func GetRetriesFromContext

func GetRetriesFromContext(r *http.Request) int

GetAttemptsFromContext - extract the attempts for request

Types

type DefaultServer

type DefaultServer struct {
	// contains filtered or unexported fields
}

DefaultServer - default backend server implementation

func (*DefaultServer) Address

func (ds *DefaultServer) Address() *url.URL

Address - getter for server address

func (*DefaultServer) IsAvailable

func (ds *DefaultServer) IsAvailable() bool

IsAvailable - getter for server's availability

func (*DefaultServer) LastSeen

func (ds *DefaultServer) LastSeen() int64

LastSeen - getter for lastSeen time field

func (*DefaultServer) PingServer

func (ds *DefaultServer) PingServer() bool

func (*DefaultServer) ReverseProxy

func (ds *DefaultServer) ReverseProxy() *httputil.ReverseProxy

ReverseProxy - getter for reversing proxy

func (*DefaultServer) SetAvailable

func (ds *DefaultServer) SetAvailable(status bool)

SetAvailable - setter for server's availability

type RoundRobinServerBucket

type RoundRobinServerBucket struct {
	// contains filtered or unexported fields
}

RoundRobinServerBucket - round-robin representatino of servers pool

func (*RoundRobinServerBucket) AddServer

func (sb *RoundRobinServerBucket) AddServer(srv Server) error

AddServer - collect Server instance

func (*RoundRobinServerBucket) Healthcheck

func (sb *RoundRobinServerBucket) Healthcheck()

Healthcheck - passive server's availability checks

func (*RoundRobinServerBucket) RemoveStale

func (sb *RoundRobinServerBucket) RemoveStale(timeout time.Duration)

RemoveStale - remove stale servers from storage

func (*RoundRobinServerBucket) RunServices

func (sb *RoundRobinServerBucket) RunServices(staleTimeout int)

RunServices - execute servers pool services

func (*RoundRobinServerBucket) Serve

Serve - serve incoming request with server's proxy

func (*RoundRobinServerBucket) Size

func (sb *RoundRobinServerBucket) Size() int

type Server

type Server interface {
	Address() *url.URL
	ReverseProxy() *httputil.ReverseProxy

	IsAvailable() bool
	SetAvailable(bool)

	LastSeen() int64

	PingServer() bool
}

Server - common backend server interface

func NewServer

func NewServer(URL string) (Server, error)

NewServer - backend server factory

type ServerBucket

type ServerBucket interface {
	AddServer(Server) error
	Size() int
	Serve(http.ResponseWriter, *http.Request) error
	Healthcheck()
	RemoveStale(time.Duration)
	RunServices(int)
}

ServerBucket - common servers pool interface

func New

func New(algo string) (ServerBucket, error)

New - backends pool factory, can use different balancing algorithms in future

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL