이 포스트는 널널한 개발자님 강의를 참조하며 작성하였습니다.
로드밸런싱을 하는데 L4스위치 하나가지고 하면 쉽게 말해서 호스트 한 대를 여러대로 분산해서 여러 호스트가 한 대의 호스트로 보이자는 것이다. 그래서 부하분산 애기를 하면 가장 기본적으로 먼저 나오는 애기가 위의 애기인데 이 수준을 더 확장하는데 GSLB이다. 이런 체계로 서비스를 하는데를 예로 들면 넷플릭스, 구글, 네이버가 있다. 또한 Global Server라고 할 만한 것들이 대부분 웹서버여서 당연히 Domain Name이 있다보니 DNS가 같이 딸려간다. 그래서 GSLB를 할 때는 무엇을 활용하냐면 DNS를 활용한다. 또한 콘텐츠를 많이 가진 서비스에서 n대의 서버를 한번에 동시에 업데이트하기 위해 존재하는 개념이 있는데 그것이 바로 CDN이다. 즉, 서버가 여러대 있더라도 콘텐츠가 같아야하기 때문에 이런걸 신경써야 한다. 또한 GSLB가 되면 부하상태, health check는 당연히 따져야하고 추가적으로 클라이언트의 지리적 위치까지 고려해서 대응해야 한다. 그러다보니 범지구적 수준의 애기를 하게 된다.
예를 들어 www.abc.com이라는 도메인을 둔 서비스가 global하게 서비스를 둔다고 해보자. 이 도메인은 영상서비스 같은 속도가 생명인 서비스를 제공한다고 하자. 만약 www.abc.com이 서버가 1대밖에 없다면 전국의 모든 클라이언트들이 웹서버 1대에 집중될 것이고 이 서비스가 L4 스위치 로드밸런서를 두고 그 뒤에 n대의 서버를 붙이고 해야할텐데 이걸로도 커버가 안된다고 하면 어떻게 할까? 이때 GSLB를 적용할 수 있다. 그럼 어떤식으로 GSLB를 적용할까? 어느 호스트가 어떤 ISP를 쓴다고 했을 때 이 ISP 네트워크에 물려있는 서버는 굉장히 빠르게 접속이 가능할 것이다. 그래서 GSLB는 www.abc.com쪽에서 ISP마다 서버를 따로 두는 방식이다. 그리고 같은 ISP에 속한 host가 www.abc.com을 요청하면 DNS는 해당 IP를 알려주는 것이 아닌 alias로 a.www.abc.com이라는 것을 알려주는 것이다. 그려면 다시 호스트가 a.www.abc.com의 IP를 요청할 것이고 그때서야 3.3.3.3을 알려줄 것이다. 이렇게 되면 호스트가 서버와 같은 ISP에 있으니 트래픽이 왔다갔다 할 필요없이 빠르게 호스트한테 전달될 것이다. 즉, 각자 ISP내부에서 트래픽이 발생하다보니 I/O 네트워크 성능이 올라가고 쾌적하게 콘텐츠를 즐길 수 있을 것이다.
그런데 문제가 뭐냐면 이렇게 ISP마다 서버가 있는데 이 서버 전체를 관리하기 위한 어떤 매니저 서버 개념이 있어야하고 ISP서버마다 콘텐츠를 동기화하는 이슈가 크게 다가올 것이다. 그래서 이런 것들을 보통 CDN서비스를 이용해서 CDN서비스의 매니저 서버에 콘텐츠를 업데이트해서 동기화시킨다.
더 확장해서 위에서 ISP마다 서버를 둔다고 했는데 ISP가 아니라 국가마다라고 하면 클라이언트의 지리적 위치를 알아야하는데 어떻게 알 수 있을까? 바로 IP주소가지고 판별한다. 어느 IP가 어느 국가의 어느위치에 속해있는지 알려주는 DB가 있는데 이 DB를 이용하여 판별을 할 수 있다.