온라인 서비스를 함에 항상 고려해야 할 점은 서비스의 업타임 (uptime) 입니다. 특히나, 24시간 서비스를 목적으로 하는 경우 1년에 얼마만큼의 다운타임을 가질 것이냐는 매우 중요한 문제이며 이러한 온라인 서비스를 회사간에 개발하거나 서비스할 때, 1년에 얼마만의 다운타임을 가질 것인가에 관해 회사간에 계약을 하곤합니다.
다섯 개의 9이라는 이른바 99.999%의 availability를 유지하는 것이 아마도 가장 이상적인 목표입니다. (이는 다시 말해 1년에 5.26분 정도의 다운타임만을 갖는 것). 하지만, five nines를 얻기위해 들어가는 비용이 너무 커서 실용성이 없는 것으로 알려져 있습니다.
온라인 게임도 분명 온라인 서비스 입니다. 그런데, 우리나라 온라인 업체들은 대부분 정기 점검이라는 명목으로 1주일에 무려 서너시간씩 서비스 다운 타임을 갖습니다. 다운타임이 커지는 것은 절대로 바람직한 일은 아닙니다. 특히 전세계를 상대로하는 글로벌 서비스를 하기 시작하면 많은 다운타임이 큰 문제가 될 수 있습니다. 즉, 한국의 수요일 오전이 미국의 오후가 되기 때문에, 이 때 서너시간의 정기점검은 용납되지 않습니다. 서버 개발자들의 큰 목표 중의 하나는 물론 365일 24시간 끊이지 않는 서비스를 제공하는 것입니다.
다운타임을 최소화 하는 데에 걸림돌은 여러 가지가 있으나, 해결이 어려운 것 중의 하나가 memeory fragmentation 입니다. 특히 작은 사이즈의 메모리를 아주 많이 할당/해제하는 경우 32비트 윈도우즈의 가상메모리 주소공간 (기본 2GB)은 단편화되기 쉽습니다. 윈도우즈의 LFH(Low Fragmentation Heap)을 사용하더라도, 중단 없이 실행중인 서버 어플리케이션은 결국 언젠가 memory fragmentation 문제를 만나게 됩니다.
최근 어느 한 서버에서 아래와 같이 Virtual Address Fragmentation 문제가 심하게 나타났는데, 이 서버는 사용 가능한 물리메모리를 충분히 가지고 있었지만, 메모리 단편화로 서비스를 재시작하여야만 하였습니다. (Uncommited range가 많아지는 것은 곧 Virtual Address Fragmentation이 많아 지는 것을 의미합니다)
64비트 프로그램의 경우는 이러한 현상을 매우 완화시킬 수 있을 것으로 생각됩니다.
길드워 서버들의 uptime을 보면 100일이상 동안 실행 중인 서버들도 많습니다. 길드워 게임의 특징상 (인스턴스 맵) 게임 플레이어들에게 영향을 주지 않고 게임서버를 재부팅 할 수 있습니다. 따라서 최근에는 오랜동안 실행 중인 서버는 일정시간 disable 시킨 후 사용자가 모두 logoff 하게 되면 재부팅하고 윈도우즈 업데이트를 적용하고 있습니다.
다섯 개의 9이라는 이른바 99.999%의 availability를 유지하는 것이 아마도 가장 이상적인 목표입니다. (이는 다시 말해 1년에 5.26분 정도의 다운타임만을 갖는 것). 하지만, five nines를 얻기위해 들어가는 비용이 너무 커서 실용성이 없는 것으로 알려져 있습니다.
온라인 게임도 분명 온라인 서비스 입니다. 그런데, 우리나라 온라인 업체들은 대부분 정기 점검이라는 명목으로 1주일에 무려 서너시간씩 서비스 다운 타임을 갖습니다. 다운타임이 커지는 것은 절대로 바람직한 일은 아닙니다. 특히 전세계를 상대로하는 글로벌 서비스를 하기 시작하면 많은 다운타임이 큰 문제가 될 수 있습니다. 즉, 한국의 수요일 오전이 미국의 오후가 되기 때문에, 이 때 서너시간의 정기점검은 용납되지 않습니다. 서버 개발자들의 큰 목표 중의 하나는 물론 365일 24시간 끊이지 않는 서비스를 제공하는 것입니다.
다운타임을 최소화 하는 데에 걸림돌은 여러 가지가 있으나, 해결이 어려운 것 중의 하나가 memeory fragmentation 입니다. 특히 작은 사이즈의 메모리를 아주 많이 할당/해제하는 경우 32비트 윈도우즈의 가상메모리 주소공간 (기본 2GB)은 단편화되기 쉽습니다. 윈도우즈의 LFH(Low Fragmentation Heap)을 사용하더라도, 중단 없이 실행중인 서버 어플리케이션은 결국 언젠가 memory fragmentation 문제를 만나게 됩니다.
최근 어느 한 서버에서 아래와 같이 Virtual Address Fragmentation 문제가 심하게 나타났는데, 이 서버는 사용 가능한 물리메모리를 충분히 가지고 있었지만, 메모리 단편화로 서비스를 재시작하여야만 하였습니다. (Uncommited range가 많아지는 것은 곧 Virtual Address Fragmentation이 많아 지는 것을 의미합니다)
64비트 프로그램의 경우는 이러한 현상을 매우 완화시킬 수 있을 것으로 생각됩니다.
0:020> !heap -s
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-----------------------------------------------------------------------------
006c0000 00001002 2565820 7232 658924 1302 160 200 0 44f3b4 LFH
External fragmentation 18 % (160 free blocks)
Virtual address fragmentation 98 % (200 uncommited ranges)
Heap Flags Reserv Commit Virt Free List UCR Virt Lock Fast
(k) (k) (k) (k) length blocks cont. heap
-----------------------------------------------------------------------------
006c0000 00001002 2565820 7232 658924 1302 160 200 0 44f3b4 LFH
External fragmentation 18 % (160 free blocks)
Virtual address fragmentation 98 % (200 uncommited ranges)
길드워 서버들의 uptime을 보면 100일이상 동안 실행 중인 서버들도 많습니다. 길드워 게임의 특징상 (인스턴스 맵) 게임 플레이어들에게 영향을 주지 않고 게임서버를 재부팅 할 수 있습니다. 따라서 최근에는 오랜동안 실행 중인 서버는 일정시간 disable 시킨 후 사용자가 모두 logoff 하게 되면 재부팅하고 윈도우즈 업데이트를 적용하고 있습니다.
Trackback Address :: http://devnote.net/trackback/60