티스토리 뷰

program

웹 게임 서버 구성도

littlecarbb 2013. 7. 26. 11:13

출처 : http://valley.egloos.com/viewer/?url=http://studionabu.egloos.com/428065


프로젝트 쫑 기념으로 지금 프로젝트의 서버 구성도나 이야기 해보겠습니다.

일단 DB/Image 를 빼고는 모두~ Cloud입니다.

L4도 Cloud~, Web Server도 Cloud~, Admin Server(주 작업 서버)도 Cloud~(트래픽이 엄청 발생하면 비용도 엄청 발생합니다~)

그리고 Cloud와 물리 서버(DB/Image)가 내부 네트웍으로 묶여있습니다.

떨어진 과제는 동접(웹 게임에 무슨 동접이니..) 1만 커넥션을 유지해달라! 기존에 퍼블리싱 했던 게임은 동시접속 4천(이건 어떻게 체크한거지?) 정도였다고 합니다.

이번엔 투자된 돈(우린 받은게 없지만)과 관계사들이 많으니 꼭 1만을 찍어야 합니다!라는군요.

자세히 이야기를 들어보니 코드이그나이터의 접속 세션을 DB로 받아서 유지되는게 1만개면 된다더군요..??

제약조건 1 : 동시접속10k.

제약조건 2 : 기존 게임 백엔드를 최대한 활용할 것. = Codeigniter(PHP) + MySQL 기반.

제약조건 3 : 기존 게임보다 기능이 더 들어갈 것(+HTML5??)


여튼 기존의 동시접속 4천 못넘기던 게임 백엔드 소스를 가지고 새로운 웹 게임을 만들라고 합니다.(기본적인 프로세스 빼고는 전혀 다른 기획을 주고 똑같이 만들라니..)

여튼 지금까지 4천은 무난히 넘길 것 같고 앞으로 추가할 작업들(저는 미리 해두었지만)에 대해서 고민을 좀 해봤습니다.

현재 물리 DB 서버가 3대입니다. 24G 네할렘 2~4way 머신 3대. 2008년에 나온 네할렘 말입니다.

그런데 빡치는건 기존에 쓰던 RAM 48G에 샌디브릿지(E5-2470) 4 way 장비를 갑자기 IO가 불안하단 이유로 RAM 24G 게인스타운(L5520)으로 내려앉히더군요... 뭐야 1만 버티라며?...

327

거기에 남은 장비는 RAM 24G 걸프다운 4 way. 2대.(그런데 둘다 CPU 종류가 다름..)

이래저래 문의해봤는데 정식 장비명을 알려주지 않는거보면.. 분명 화이트박스(조립 서버) 일것으로 생각됩니다.

하다못해 Raid Card에 Cache라도 달려있는지, 뭘 알아야 IO 튜닝을 하지 이사람들아!!

여튼 DB3대를 가지고

  • Master - CUD 와 일부 R이 일어나는 장비.
  • Slave - R(SELECT 쿼리)이 메인. 실제로 제일 많은 부하가 걸릴 장비.
  • Log - 게임은 일단 로그를 쌓아야 하지 않슴메?

로 구성해서 코드이그나이터에 DB 커넥션을 아주 쉽게 해주는 기능이 있어 구문 구분은 grep 으로 돌려서 파일 목록 뽑은 후 시간 날때마다 수작업해서 리플리케이션에 대응 완료!!.

게임도 여차저차 다 대강 돌아갈 만큼(퍼블리셔 측에 기획이 매번 바뀌고, QA/QC가 없어 어디까지가 허용범위 인지 아무도 모르는 상태지만..) 나왔고.

클로즈 베타 첫날부터 PL님께서 만드신 DB 쿼리가 널을뛰고, 검색 기능은 화면이 거의 멎을 만큼 동작을 안하고... 난 또 슬로 쿼리 로그  PL님께 던지고.. 검색 기능막고.. 그런 삽질을 거의 한주간 했습니다. 이제는 어지간한 상황에서도 DB는 논다. 앞으로 추가할 신규기능은 모르지만..

메모리가 충분(앞으로 부족해지겠지만..)하니 Innodb Pool에 대충 다 때려넣고 timeout변수들 다 줄이고, 커넥션 2000개쯤 잡고 조인 키 버퍼 가득 올려주니 현재까지 느린건 없습니다.

거기에 왠 일인지 물리 서버로 이미지 서버를 하나 주길래 거기에 nginx 설치하고 스태틱 컨텐츠(Javascript/css/각종 이미지/폰트)다 올리고 역시나 코드이그나이터에서 선언된 변수 몇줄 바꾸는 것으로 이미지(스태틱 서비스용)서버 적용 완료.
기존의 클라우드 웹서버 8대(이건 왜 이렇게 많은거지?)가 거의 놀다 시피 하고 있다.

현재 이 상태로(광고 같은 것 하나도 안올린 상태에서) 동접 2k를 여유있게~ 찍고 있는 상황.

갑측 SE와 자꾸 티격태격 하고 막 rsync로 스크립트 짜서 배포를 자동화 해야하느니 이상한 말을 하길래..

나 : '우리 스크립트는 우리가 알아서 하는데 왜 그러시죠?'
갑 : 'rsync란걸 써서 배포해야 하지 않나요?'
나 : '기술적인 설명이 필요하신가요?'
갑 : '저희 SE가 rsync로 된 스크립트라고 하면 알거라고 하셔서..'
나 : 저희는 각 개별 서버에 rsyncd가 떠있고 lsyncd로 File System의 inotify 변경사항을 점검해서 변경점이 생길때 마다 rsyncd에 sync 하도록 명령을 내리고 있습니다. 이걸 rsync를 이용한 스크립트로 짜면 서버가 추가되거나 빠질때 마다 복잡해지지 않을까요? 기술적 용어가 좀 어려우셨으면 SE분께 그대로 전달하시면 되겠네요'
갑 : '네...네...'




그 뒤론 별말 없다....그러다 한참 튜닝작업이 한창일때..

갑 : '개발팀에서 직접 모니터링 하시는 도구 같은거 설치하셔서 쓰시면 안되나요? SNMP 같은게 다 동작하고 있다고 하던데요..'
나 : '그쪽에서 특정 IP 이에외는 외부에서 접근을 다 막으셨는데 저희가 SNMP에 어떻게 접근하죠?'
갑 : '아...네...'
나 : '그럼 관리서버(Cloud)에 대한 권한을 다 주시고 우리가 관리서버에 모니터링 도구를 설치하고 모니터링도 하겠습니다.'
갑 : '아 잠시만요 SE분과 상의 해보겠습니다.'



다음 날.

갑 : 'Nabu씨. 저희 SE가 Cacti 주소와 ID/Password를 알려드릴테니 이걸 보시라고 하네요.'



1920

여튼 이상한 갑이다. root 패스워드도 공유되어 있는데 직접 보면 모르나?..

다음 스텝은 지금 상황에서 동시접속 5~6k를 버틴다는 가정하에

  • 신규 장비가 오면 HAProxy를 사용 Slave2 를 추가.
  • 이미지 서버 1기 더 추가.(갑님쪽 관리를 사실 못믿겠다..)
  • Admin 서버로 배포 및 간단한 모니터링 스크립트 정리.

정도가 되겠다. 이정도면 11k~13k 정도는 버틸 것으로 예상. 그 이상은 Master DB나 캐쉬서버 도입, 검색 서버 도입 형태로 스케일 아웃 해야하는 상황.

서버 구조나 코드나 자동화는 별로 걱정안되는데... 우리 코드도 DB 쿼리 뜯어고치고 캐쉬도입하고 하면 크게 느려질 것이라고 생각되진 않지만...

추가되는 DB서버로 쓸 장비들은 좀 제대로 된 놈들로 바꾸어줬으면 하는 바램. 그리고 네트웍/인프라 비용 감당안되서 뭐 어쩌자는 말 안나왔으면 하는 바램.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함