Golang을 사용한 로드 밸런싱
은행 시스템 등에 주로 사용되는 사용자의 지속적인 요청이 있는 경우 사용자 요청 사이에 트래픽 '경찰'을 두는 것은 요청을 효율적으로 최대화하여 속도와 용량 활용도를 최대화하여 서버가 과로하지 않도록 하는 데 큰 도움이 됩니다. . 하나의 서버가 다운되면 로드 밸런서는 나머지 온라인 서버로 트래픽을 리디렉션합니다.
위의 예에서 사용자가 요청하면 로드 밸런서를 통해 사용 가능한 서버를 결정합니다.
여기에도 보안을 위해 리버스 프록시가 필요합니다. 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을 통해 서버가 살아 있는지 확인합니다.
Reference
이 문제에 관하여(Golang을 사용한 로드 밸런싱), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dutdavid/load-balancing-with-golang-17jh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)