1.
이흥섭
왓 스튜디오 / 넥슨코리아
<야생의 땅: 듀랑고>
서버 아키텍처
SPOF 없는 분산 MMORPG 서버
2.
이흥섭 sub@nexon.co.kr
• 주로 게임 서버 프로그래밍
• 현재 <야생의 땅: 듀랑고>
• <카트라이더 대시 & 코인러시> - 페이스북, 카카오 MO 게임
• <한글라이즈>, <블라> 등 웹 서비스
• 틈틈이 오픈소스 활동 https://github.com/sublee
133.
국내에 AWS 데이터센터가 없는데
한국에서 상용 서비스를 돌리기에는 느리지 않을까요?
한국 IDC에 비해 통신 속도는 다소 느립니다. 하지만 게임 디자
인 차원에서 느리고 불안정한 무선 통신을 가정하기 때문에 사
용자 경험에 영향을 주지는 않을 것 같습니다.
(요즘 일본 EC2와의 핑 지연시간은 40ms 정도 나옵니다.)
Q.
A.
134.
gevent를 사용해도 C 라이브러리의 I/O는 봉쇄될텐데,
DB 드라이버 등의 선택에 제약이 많을 것 같습니다.
스레드를 봉쇄하는 C 라이브러리는 사용하지 않습니다.
Python 오픈소스 커뮤니티에서 적절한 도구를 찾는 데에 큰 어
려움은 없었습니다. Couchbase 드라이버의 경우 gevent를
지원하는 Python 라이브러리가 개발되어 있습니다.
Q.
A.
135.
특정 서버에 부하가 몰려
그쪽으로 보내던 RPC가 지연되면 어떻게 되나요?
보내는 쪽에 RPC 실패 또는 타임아웃이 감지됩니다. 그 예외를
잡아 게이머에게 장애 상황을 통지합니다.
Q.
A.
136.
MMORPG는 트랜잭션 처리가
중요할 것 같은데 어떻게 하셨나요?
Couchbase에서 문서 내 트랜잭션은 보장할 수 있고, 문서 간 트랜잭션은 보장할 수
없습니다.
예를 들어 아이템을 습득하는 경우, 아이템을 DB에 추가하고 인벤토리에 아이템
DB를 추가해 DB 상에서 갱신합니다. 두 작업은 원자적으로 실행될 수 없고 둘 중
하나가 실패할 수 있습니다. 이 경우엔 아이템 추가가 우선 끝나면 인벤토리에 연결
하는 방법으로 로직을 작성합니다. 추가됐으나 연결되지 않아서 미아가 되는 아이템
도 생길 것입니다.
이런 방식만으로는 모든 케이스가 해결되지 않는 다는 것을 알고 있고, 높은 일관성
과 복구 가능성을 확보하기 위해 노력 중입니다.
Q.
A.
137.
뮤테이터 호출 시 액세서에서 확인한 상태가
이미 변경되었을 경우 문제가 생길 수 있지 않나요?
LBYL (Look before you leap) 방식과 EAFP (Easier to ask for forgiveness
than permission) 방식이 있습니다. 전자는 할 수 있는지 먼저 확인하고 하는 것,
후자는 일단 한 후 문제 생기면 예외처리 하는 것입니다. 분산환경에서 LBYL 방식은
실패할 확률이 높지만 EAFP 방식은 그렇지 않습니다. 그래서 저희는 EAFP 방식을
주로 사용하고 있습니다.
질문하신 케이스의 경우, 액세서의 결과가 시시각각 변하는 거라면 일단 뮤테이터를
호출하고 오류가 발생했을 때 예외처리 합니다.
Q.
A.
It appears that you have an ad-blocker running. By whitelisting SlideShare on your ad-blocker, you are supporting our community of content creators.
Hate ads?
We've updated our privacy policy.
We’ve updated our privacy policy so that we are compliant with changing global privacy regulations and to provide you with insight into the limited ways in which we use your data.
You can read the details below. By accepting, you agree to the updated privacy policy.