Golang을 사용한 로드 밸런싱

1832 단어
로드 밸런싱은 수신 네트워크 트래픽을 백엔드 서버 그룹 전체에 효율적으로 분산시키는 프로세스입니다.
은행 시스템 등에 주로 사용되는 사용자의 지속적인 요청이 있는 경우 사용자 요청 사이에 트래픽 '경찰'을 두는 것은 요청을 효율적으로 최대화하여 속도와 용량 활용도를 최대화하여 서버가 과로하지 않도록 하는 데 큰 도움이 됩니다. . 하나의 서버가 다운되면 로드 밸런서는 나머지 온라인 서버로 트래픽을 리디렉션합니다.



위의 예에서 사용자가 요청하면 로드 밸런서를 통해 사용 가능한 서버를 결정합니다.
여기에도 보안을 위해 리버스 프록시가 필요합니다. http util 패키지를 사용하여 리버스 프록시를 생성합니다. 리버스 프록시는 서버 주소를 숨기면서 요청을 리디렉션합니다.

type simpleServer struct {
    addr  string
    proxy *httputil.ReverseProxy
}

func newSimpleServer(addr string) *simpleServer {
    serverUrl, err := url.Parse(addr)
    handleErr(err)

    return &simpleServer{
        addr:  addr,
        proxy: httputil.NewSingleHostReverseProxy(serverUrl),
    }
}



loadbalancer는 활성 서버 사이를 확인하기 위해 포트, 서버 및 roundrobincount가 있는 구조체로 구현됩니다.

type LoadBalancer struct {
    port            string
    roundRobinCount int
    servers         []Server
}

func NewLoadBalancer(port string, servers []Server) *LoadBalancer {
    return &LoadBalancer{
        port:            port,
        roundRobinCount: 0,
        servers:         servers,
    }
}



또한 구조체를 기반으로 새 로드 밸런서 및 서버를 생성하는 함수를 생성합니다.

2가지 방법이 있습니다
isAlive 메소드는 서버가 작동 중인지 여부를 확인하고
서버의 주소를 얻기 위한 Get address 메소드

func (s *simpleServer) Address() string { return s.addr }

func (s *simpleServer) IsAlive() bool { return true }



이에 대한 개요;

서버 목록을 생성하고 서버 프록시 기능을 호출하여 다음 사용 가능한 서버를 가져오는 주요 기능이 있습니다. 따라서 roundrobin을 통해 서버가 살아 있는지 확인합니다.

좋은 웹페이지 즐겨찾기