[인용글]서버 증설이 답이 아니다

블리자드 포럼에도 글을 올렸지만,
모처럼 애들 재우고 게임 해보려다 입구에서 저지당하고 답답한 심정에
공지사항 보고 글 올립니다.

*구식 서버 구조를 그대로 계승한 단일 글로벌DB 문제.

이는 대형 게임에 적용하면 100% 터지는 문제로
게임서버가 증설되면 될 수록. 동접이 늘면 늘 수록 더 빨리 DB가 터집니다.
즉, 게임서버만 늘리면 문제는 더 악화됩니다.
저도 직접 당해봐서 지금 블자 서버 개발팀이 얼마나 맨탈이 붕괴 돼 있는 지 짐작이 됩니다.
이거 간단히 무슨 서버증설 같은 것으로 금방 해결 절대 안됩니다.
식당을 예로 들면 주방(DB)은 그대로인데 손님 받는 테이블(게임서버)만 늘리면 주방은 더 뒤져 나가는 원리입니다.
아이템 등 유일한 데이터를 보장해주는 장점이 있는 단일DB의 한계입니다.
그래서 지금 부랴부랴 밖에서 번호표 받고 기다리라고 하고 있는거고요.
(무슨 백종원의 골목식당도 아니고…)

해결책

1. DB(데이터베이스)서버에 대한 소프트웨어 샤딩
아무리 주방의 가스불 화력을 높이고 더 좋은 냄비를 써도 음식 나가는 속도에는 한계가 있습니다.
백종원 할애비가 와도 1개 주방으로는 점심 피크시간에 100테이블 못 받습니다.
샤딩은 수평 확장을 의미합니다.
즉, 주방의 갯수를 여러개로 늘리는 것입니다.
대신 이를 위해서는 DB서버 쿼리로직 전반에 걸쳐 작업이 필요합니다.
해당 유저가 몇번DB에 데이터를 저장하는 지 처리해야하는 코딩이 수반됩니다.
그래도 구식 디아 서버 코드에서는 그나마 가장 빠르고 확실한 대처법일 것입니다.
대충 글로벌DB를 10개로 분산하면 지금 한계동접 10배 가까이 더 받을 수 있습니다.
20개로만 분산해도 지금 사태는 종식될거라 봅니다.
DB서버성능은 그렇게 비싼걸로 안해도 됩니다.
공지사항을 토대로 예측해보면, 막대한 부하가 발생하는 아이템 관련 DB 부분만 샤딩 처리해도 충분히 해결 가능할 것 같습니다.
*개별 유저DB에는 몇번 아이템DB를 사용하는 지 정해져 있어야 합니다.
*나중에 유저가 줄면 물리DB머신 하나에 데이터베이스 여러개를 통합하면 그만입니다.
다시 유저가 늘면 물리DB머신을 따로 분리하면 되구요.

  1. DB Write Back
    이건 너무 큰 서버 코딩 수정작업이 수반될 것으로 예상되어
    디아2 레저렉션에 적용하기에는 현실성이 부족합니다.
    최신 온라인게임에 많이 적용하는 방식입니다.
    원리는 DB서버가 바로 하드(HDD/SSD)에 정보를 저장하기 전에
    앞단에서 메모리에서만 처리하는 데이터베이스가 여러개 존재하여 빠르게 처리하고 게임서버와 통신하는 방식입니다.
    이를테면 아이템 감별속도가 전 보다 훨~~씬 빨라지겠죠.
    그리고 실제 DB에 아이템 정보를 저장하는 것은 뒤에서 메모리DB > SQL DB로 천천히 진행하는 방식입니다.
    단, 앞에 있는 메모리DB가 문제가 생기면 먹은 아이템이 없어지거나 하는 경우가 생길 수 있다는 리스크는 있습니다.

3. 게임목록
최신 게임 목록은 Redis와 같은 메모리DB Sorted Set 같은 것을 활용해야합니다.
SQL DB로 매번 게임 목록을 필터링해서 SELECT 때리면 쿼리 부하가 쭉쭉 밀립니다.
역시 참여자 정보를 JOIN해서 긁어오는 식으로 DB 쿼리를 짰다면 100% 서버 터집니다.
게임 목록이 반드시 실시간 데이터일 필요가 없다면,
여러개의 Replication DB에서 SELECT만 날려도 괜찮습니다.
Master DB에서 저 짓을 한다면 그것은 자살 행위입니다.

4. 게임목록-참여자 목록
위의 게임목록에서 사용자 정보를 JOIN해서 긁어오면 100% 터진다고 했습니다.
참여자 정보 조회는 Redis나 Memcached 같은 캐쉬DB를 활용해야합니다.
이 정보는 유저가 게임 플레이 시 메모리DB에 유저 정보(닉네임, 착용장비외형, 레벨 등)에 대한 간단한 정보를 간헐적으로 기록하고 조회하면 글로벌DB에 부하가 전혀 없습니다.
이 정보는 영속적일 필요가 없으므로 TTL같은 것으로 일정 시간이 지나면 삭제하거나 crontab과 같은 스케쥴러를 적용하여 휘발시키면 됩니다.
개인적으로 Redis를 추천합니다. CPU오버헤드는 적고 램만 많으면 되니 상대적으로 저렴하게 문제 해결이 가능합니다.

*블리자드 서버 개발팀의 수준은 이미 세계 최고 수준이라고 봅니다.
하지만 디아블로2 레저렉션 서버는 기존 시스템을 그대로 가져온 것 같습니다.
개발 인력 투입/비용 등 여러가지를 고려했겠지요?
아마 베타테스트 등을 거치면서 문제가 없다고 판단했을텐데요.
단일DB(공지사항의 글로벌 데이터베이스)는 임계점에 다다르기 전 까지는 무척이나 잘 작동하고 버티지만,
그 임계점을 넘는 순간 현재 우리가 겪는 것 처럼 곧바로 서비스 장애로 이어지게됩니다.
그리고 DB머신의 성능을 최대치로 높여도 서버비용은 천정부지로 올라가지만,
처리능력 향상은 고작 몇십% 밖에 되지 않습니다.
부디 빠른 문제 해결을 해서 그나마 삶의 위안을 삼고자 하는 많은 PC유저와 고통 받고 있는
콘솔 사용자들에게 평안을 가져다 주시길 바랍니다.

대기열에 빡친 한 유저가…

출처 : 디아블로2 인벤 Songinnight 님 글

좋아요 28개

좋은글 잘읽었습니다

좋아요 1개

일반 유저들은 저런 전문적인 용어 모르고 서버 늘리라고 하는거예요…ㅋㅋ

좋아요 3개

그게 문제가 아님
이 정도 사태를 예상 못했다고 하는걸 믿을 수 없음
스타 리마스터 때만해도 아재들의 수요를 확인하고 서버 터지고 놀라고
지금도 명절때마다 줄어들고는 있지만 놀라고 있는데
이정도 규모의 유저를 예상 못했을리 없음
그게 화나는 거지
애초에 출시하기전에 예상치보다 더 예상했어야지
차라니 지역별 DB로 바꾸고 뒤에서 DB를 합치는 방향으로 해서
아이템 먹고 일정시간( DB 합치기 전까지) 거래불가 같은 제한을 두는게 낫다고 봄

좋아요 9개

이게통일하는 사람이 말하는데 이거 문제 고치는거 졸라쉽단다

서버증설말고도 다른 방법으로 이런 문제 고칠수있데

근데 돈이 들어간다더라,

쉽게말해서 블리자드는 돈안쓸려고 최대한 지금버티는거여
멍총아

좋아요 1개

ㅋㅋㅋㅋㅋ 참 세상 쉽게 사는놈들 많어 말로는 뭐는 못하냐 ㅋㅋ

뭘 답이 아니야 효용성이 있든없든 늘리면 답인데. 개좉같은 선민의식좀 역겹게 들이대지 말아줄래

좋아요 2개

졸라쉽다고 ? ㅋㅋㅋ 블쟈에서 스카웃좀 해라

니가 블리자드가라 그게 답인거 같다

좋아요 1개

어떤일이든 쉬우면 돈 안들어감.
귀찮거나 어려운 일이 돈 들어가는 일임.

굳이 해석하자면 쉬운데 돈이 들어가는게 아니고
돈을 들이면 쉬운거고 돈을 안들이는 방향으로 하려면 어려운거고 그런거지

결국 블쟈도 이윤추구가 최대 목적인데 욕 쳐먹더라도 돈 안들이고 어려운건 안하는 방향으로 하려니까 지금 이꼬라지가 난거지

게임 운영만 몇년인데 당연한걸 모르겠나?
그냥 돈좀빨고 사람들 흥미 떨어지면 현 서버로도 충분히 가능하니 또 이지룰 떠는거지
워낙에 블자 옛날 명성에 기대서 처음만 반짝하다 똥겜인증하고 사람들 떨어져나간게 몇번인데. 얘네들도 그냥 지금 사람들 질릴만한 요소 계속 추가해서 못들어가게하고 서버 운영 뭐같이 해서 인원줄인다음 개선했다 이지룰할게 뻔한데.

이게 디비 분산 기술들은 이미 있습니다. 그걸 현재 시스템에서 마이그레이션 가능하냐 ??? 할꺼냐의 문제에요. 할려고 했다면 이미 출시전에 했어야된다고 봅니다. 근데 안했다. 터질꺼 뻔한데 안했다? 못했다에 …한표…

대기업이 소비자를 호갱으로보니 **자동차도 하자있는거 나몰라라 하다 국민청원 올라오지 자꾸 돈4만8천원가지고 어쩌고 저쩌구~~~

자동차도 하자 있는거 소비자가 원인분석해서 문제점 밝혀야 보상해줍니다.
(이게 개같은 국내법이고 현실입니다. 관련기관들은 입꾹다물고 있고… 이러니 돈이문제가 아니라 청원하는 이유중 하나입니다.
(자동차랑 비교하기 하찮은 푼돈입니다만 이건 신뢰문제입니다)

국민청원에서 " 만행에 대해 고발 합니다"로 검색하면 나옵니다.
www1.president.go.kr/petitions/601691

야이 씨바년아 말 적당히 가려서 해라

가장큰 문제가 디아2 개발진 들이 다 퇴사 했고 기술 이전 했을까 ? 막말로 이거 그래픽 가저 오구
다른거 그냥 오리지날 그냥 가저 온거야 잠시 생각해보면 구지 룬 시작할까 내말을 완전 초기
버전 처럼 유니크 가장 좋운때 득탬 재미 있을때지 초보 신규 분들도 룬 빼면 다 유니크 사용안해
소서 꺼 및까지 빼면 그냥 잡탬 수준이고 즉 이게임은 그냥 오리지날에 그래픽 새로 만들러서
출시한거야 하청줘서 뼈대 손도 못대 나중에 내 장담한다 복사 오토 맵 기타 등등 손도 못쓰고
당한다 이유 이 게임자체가 이미 과거 부터 수많은 핵커들 농락했는대 뼈대 기존 것인대
그걸 방어한다구 불가능하지 서버 문제안녀 ~~

내 돈내고 내가 게임하는데 ㅅ ㅂ 뭔 db까지 걱정해야돼…

좋아요 2개

좋은 글 잘 읽었습니다. 사실 이 문제는 디아블로3 때 이미 확인 된 문제로 '배틀넷 2.0’이 가지는 태생적 한계입니다. 디아블로3가 시판되고 한달 동안 서버다운이 없었던 날은 단 2일 뿐이었습니다. 임시점검, 정기정검, 긴급정검, 연장정검 4대 명검이 총동원되었지만 아무것도 해결하지 못했습니다. 지금도 전설로 회자되는 Error37은 이 때 나온 겁니다.

블리자드 서버는 크게 배틀넷 서버와 플레이 서버로 나뉘고 밸틀넷 서버는 글로벌 서버일 뿐만 아니라 블리자드 모든 게임이 관통하는 서버입니다. 로그인 인증, 채팅로비, 경매장 정보등이 연동되는데 이 부분이 가장 큰 문제입니다. 배틀넷 2.0은 수십만명의 동시접속자에게 실시간으로 정보를 공유할 수 없습니다. 병목현상으로 과부하가 걸릴 수 밖에 없습니다. 서버다운은 배틀넷 2.0으로 부터 독립시키지 않는 이상 이 문제는 영원히 해결되지 않을 것 입니다.

아마 10년도 더된 서버소스, 그시절엔 redis나 memcache같은것도 제대로 없었지요. DB도 오래된 MS 2000대나 my 5.1이하에 myisam 쓰고있다면 뭐 마이그레이션 하는것 자체가 엄청난 위험부담이 있을것 같아요.
(물론 맘먹고 하면 가능한데, 그걸 할 리소스를 쓰기 싫어서 대충 오픈한듯)

아마, 블쟈도 쓰신글들을 모르진 않을거에요. 작은 기술력없는 기업은 아니니…아마 scale-out 하고 마이그레이션 및 업그레이드 하는 작업 자체를 꺼려하는것으로 보여요.

현 상황에서 최소한의 비용으로 타개해보겠단 의지…
할거였으면 레저렉션 개발하면서 다 뜯어고쳤겠죠.

이 분 스카웃 하시오 블리쟈드에서는 어여~

물 들어올 때 노 저어라