본문으로 건너뛰기

15. 웹 서비스와 네트워크

38강 네트워크 분기점

1Gbps의 한계

1Gbps의 한계는 정확히는 30만 pps의 한계입니다. 하테나에서 사용하고 있는 표준적인 하드웨어에서 최신의 Linux 커널을 사용하면 대략 30만 패킷/초가 한계라는 사실이 실측 결과 판명되었습니다.

이때의 평균 패킷 길이가 300바이트라면 대략 1Gbps가 됩니다. Gigabit Ethernet 레벨에서도 1Gbps라는 게 한계이며, 성능면에서도 30만 패킷/초가 한계라는 것을 알았습니다.

이에 대한 대책으로는 PC 라우터를 여러 대 병렬화하든가, 박스형 라우터, 예를 들면 고가의 Cisco 라우터를 구입하는 방법이 있습니다.

500호스트의 한계

Ethernet 통신이라는 것은 MAC주소(Media Access Control address)를 기반으로 하고 있습니다. ARP 테이블이란 IP주소와 MAC주소 간 대응관계표로 스위치는 이 테이블을 갖고 있습니다. IP통신을 할 때는 먼저 IP주소로 통신대상을 지정하면 이에 대응하는 MAC주소를 검색한 후, Ethernet 계층에서 이 MAC주소를 사용해서 통신하게 됩니다.

받아들이는 쪽은 그 내용을 IP 계층까지 확인해서 다른 서브넷으로 보낼지 서브넷 내에서 통신을 마칠지 결정해서 통신을 실현하고 있습니다.

이 IP주소와 MAC주소 간 관계를 나타내는 ARP 테이블이 있는데, 이를 사용하고 있는 스위치에서는 이 테이블의 크기가 대략 수백 건 정도라는 것을 최근에 알게 되었습니다. ARP 테이블의 크기 상한선이 900건 전후였는데, 실제로 ARP 테이블의 내용이 800건 이상까지 늘어나자 갑자기 특정 호스트로만 ping이 가지 않게 되는 등 통신을 할 수 없게 되었습니다.

당초에는 원인을 전혀 알 수 없었는데, 여러 가지로 조사해보니 ARP 테이블의 한계가 원인이었습니다. 이런 현상도 있구나라고 생각하며, 1서브넷은 500호스트가 한계라고 기억해두는 게 좋다는 것을 알았습니다.

또한 서브넷 내에 호스트를 많이 두면 브로드캐스팅 패킷이 서서히 증가합니다. 점차 이 트래픽이 무시할 수 없을 정도가 되어 브로드캐스팅 패킷을 수신하는 것만으로도 CPU를 약간 잡아먹게 됩니다.

네트워크 구조 계층화

지금까지 언급해온 문제에 대한 대책으로는 네트워크 구조의 계층화라는 것이 최선의 관행(best practice)으로 확립되어 있으며, 3단 구조로 구성하는 것이 일반적인 의견입니다.

  • ❶ 가장 작은 것은 Access 계층(액세스 영역)
  • ❷ 그 다음이 Distribution 계층(디스트리뷰션 영역)
  • ❸ 가장 위가 Core 계층(코어 영역) 또는 OSPF(Open Shortest Path First) 영역

이와 같은 3단 구조로, 가장 작은 서브넷에서 100대, 200대로 억제하고 디스트리뷰션을 1,000대 정도, 코어 전체로는 10,000대 단위를 다룰 수 있다는 계층구조를 설계하는 것이 일반적입니다.

그림 15.1 네트워크 구조의 계층화

또한 디스트리뷰션 영역 간 트래픽을 제어해서 너무 증가하지 않도록 한다거나, 서브넷 간 통신량을 제어하는 등 이런 부분도 신경을 쓰게 되는 것이 대략 수백 대 이상이 되었을 때 주의해야 할 부분입니다.

글로벌화

요즘 인터넷이 용량도 어느 정도 늘어나서 빨라졌지만, 수MB 단위의 파일을 태평양을 넘어서 전송하는 것은 상당한 오버헤드입니다. 우고메모와 같은 MB를 넘는 용량의 미디어를 다수 전송하려는 용도로는, 하나의 데이터 센터에서 전송하는 것은 비현실적입니다.

반면, CDN을 사용하면 상황은 크게 달라집니다. Amazon CloudFront와 같은 CDN을 사용하면 대략 5~6초 만에 파일을 받을 수 있으며, 타임아웃도 거의 발생하지 않고 양호한 응답시간을 유지할 수 있습니다. 따라서 글로벌하게 서비스를 운영하려 한다면 CDN을 사용하는 게 거의 필수조건이라고 할 수 있습니다.

CDN 선택방안

CDN이란 무엇인지에 대해 언급해두겠습니다. CDN은 Content Delivery Network를 말합니다.

CDN은 세계 각지에 서버를 두고 거기에 미디어를 캐싱시켜서 사용자가 가지러 갈 때에는 가장 가까운 서버로 액세스해서 미디어를 다운로드하도록 하는 것이 기본적인 동작원리입니다.

Amazon CloudFront는 서버가 지구 상의 각지에 있는데, 그 중에서 미국 사용자는 가장 가까운 미국 서버로 접속하고, 유럽 사용자는 유럽 서버로 접속하고, 아시아 사용자는 홍콩이나 일본 서버로 접속합니다. 이와 같이 가장 가까운 서버로 접속해서 응답시간을 단축시키는 기술입니다.

39강 한층 높은 단계로

10Gbps 이상의 세계

이 세계에서는 AS 번호(Autonomous System number)라는 것을 보유하고 IX(Internet exchange)에 접속해서 트래픽을 교환하거나 BGP(Border Gateway Protocol)라는 인터넷의 라우팅을 제어하는 프로토콜을 사용합니다.

이런 세계가 되면 훨씬 다이나믹해지고, 여기서 잘못 제어하게 되면 다른 사이트에도 영향을 미쳐서 질타를 받게 됩니다.

이와 같은 인터넷 전체에 관련될 법한 트래픽 제어에 발을 들여놓지 않으면 10Gbps라는 것은 좀처럼 효율적으로 이해할 수 없는 영역이 됩니다. 인프라의 관점에서 이 부분을 넘어서는 것은 큰 즐거움이며, 앞으로의 서비스 성장 또한 계속 지켜볼 것입니다.

AS 번호는 BGP로 트래픽을 제어하기 위한 기본적인 번호이지만, 통신사업자나 ISP뿐만 아니라 니코니코 동영상 서비스를 하는 DWANGO Company나 mixi와 같은 콘텐츠 프로바이더도 보유하고 있는 것 같습니다. 그 정도의 규모가 되면 AS 번호를 보유하고 BGP를 사용해서 트래픽 전체 비용을 낮추기 위한 방법을 채택해가는 듯합니다.

Wrap Up

웹 서비스의 네트워크는 단순히 대역폭만 늘린다고 해결되지 않고, pps 한계, ARP 테이블 한계, 브로드캐스트 증가 같은 현실적인 제약을 함께 봐야 합니다. 그래서 계층화된 네트워크 설계와 CDN 활용이 중요해지며, 더 큰 규모로 가면 AS 번호와 BGP까지 포함한 인터넷 레벨의 제어가 필요해집니다.

Summary

1Gbps 네트워크의 실질적인 한계는 대략 30만 pps 수준이며, 평균 패킷 크기에 따라 실제 병목이 결정됩니다. 또한 1서브넷에 호스트가 지나치게 많아지면 ARP 테이블 한계와 브로드캐스트 트래픽 증가 때문에 대략 500호스트 수준이 현실적인 상한이 될 수 있습니다. 이런 문제를 피하기 위해 Access, Distribution, Core의 3계층 구조로 네트워크를 나누고, 각 계층이 담당하는 호스트 수와 트래픽 규모를 조절하는 것이 일반적인 관행입니다. 글로벌 서비스에서는 대용량 미디어를 하나의 데이터센터만으로 전달하는 것이 비효율적이므로 CDN을 통해 사용자가 가장 가까운 엣지 서버에서 콘텐츠를 받도록 하는 것이 사실상 필수입니다. 그리고 더 큰 10Gbps 이상 규모에서는 AS 번호, IX, BGP를 포함한 인터넷 라우팅 제어 영역까지 이해해야 비로소 효율적인 운영이 가능해집니다.

Reference