[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
[야생의 땅: 듀랑고] 서버 아키텍처 - SPOF 없는 분산 MMORPG 서버Heungsub Lee
NDC14에서 발표한 "[야생의 땅: 듀랑고] 서버 아키텍처" 세션의 슬라이드입니다.
슬라이드에 설명이 많지 않은데, 디스이즈게임에서 발표 내용을 잘 정리해주었습니다. 기사도 함께 보시면 좋을 것 같습니다.
http://www.thisisgame.com/webzine/news/nboard/4/?n=54955
멀티플레이어 게임을 서비스하는 데 필요한 게임 장르별 백엔드 아키텍처에 대한 설명해 드립니다. 기본적인 게임의 상태 동기화 개념과 서버 구성에 관한 이야기, 게임 클라이언트 엔진(Unity, Lumberyard, Unreal Engine 등)에서 제공하는 복제 프레임워크를 통하여 손쉽게 게임 서버를 만드는 방법에 대한 내용을 다룹니다. 또한, 이렇게 만들어진 게임 서버를 Amazon GameLift라는 클라우드 서비스를 통해 DevOps형태의 비용 효율적으로 서비스하는 방법에 대해 소개합니다.
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps...hoondong kim
[Tensorflow-KR Offline 세미나 발표자료]
Auto Scalable 한 Deep Learning Production 을 위한 AI Serving Infra 구성 및 AI DevOps Cycle 구성 방법론. (Azure Docker PaaS 위에서 1만 TPS Tensorflow Inference Serving 방법론 공유)
Origin Link : http://www.oss.kr/oss_information6/58382
2012년 3월 31일 "제 22회 Open Technet"이 열렸습니다.
다음 커뮤니케이션 한남동 사옥 5층 교육장에서 우분투 커뮤니티와 함께 진행된 제 22회 Open Technet 은 '우분투와 함께하는 공개SW 활용'에 관한 주제로 진행되었습니다.
<session>
'국내 포탈에서의 우분투'
(강사) 다음 커뮤니케이션 최민호(시스템엔지니어)
KGC 2014: 클라이언트 개발자를 위한 컴퓨터 네트워크 기초 배현직Hyunjik Bae
클라이언트 개발자들은 직접 서버와 네트워크를 다루지는 않더라도 컴퓨터 네트워크의 특징에 대해서는 알고 있어야 한다. 본 강연은 클라이언트 개발자들이 반드시 알아야 하는 컴퓨터 네트워크 관련 용어와 특징을 소개한다. 아울러 스마트폰 무선 네트워크 관련해서 주안점도 다룬다.
5. • iPhone 4S의 전체 메모리는 512MB
• 그 중에서 실제 사용가능한 프로세스 메
모리는?
• iOS 7 50~200MB
• iPhone 5S에서 iOS 8 업그레이드 후 잔여 공
간이 700에서 500MB로 하락!
• 메모리 모자라면 PC는? 한편 모바일은?
6. • 60Hz만 충족시킨다고 ok? 배터리는?
• 하이엔드 경험을 위해 60Hz 강행
• 배터리 아끼기 위해 15Hz로 다운
• 멀티스레드 싫어함 & 소켓 버퍼 커야
7. 네트워크의 고약한 점
• 긴 하위호환성의 문제
• 사람 피를 완전히 바꾸는 것만큼 어려움
• 유선 네트워크보다 무선 네트워크가 물리학상으로도 훨씬 더
불안정
12. TCP on packet drop
• 무선 통신의 높은 레이턴시와 패킷 드
랍율
• TCP는 쉽게 retransmission 랙이 발생
함
• 결론: UDP 꼭 쓰세요
20~200ms 20%
20~200ms (80%)
520~720ms (20%)
13. UDP only면 충분?
• 기업 방화벽
• 일부 wifi AP
• 일부 3G/LTE 기지국
• 결론: TCP를 꼭 혼용하세요 (프라우드넷은 옛날부터 이미 ㅋ)
14. UDP vs. traffic conservation
• 무선 통신량 패킷 드랍율
• 전파 혼잡 패킷 드랍율
• 결국 한번 보낼 때 적게 패킷 보내야
• 결론: UDP 패킷을 필요한 것들은 합쳐
보내세요
• 그렇다고 너무 합치면 합침 대기 간격
(coalesce interval) 자체가 랙이 됨
• RTO에 비례해서 잡아야 (아니면 프라우드넷을… ㅋㅋ)
15. 모바일에서 P2P
• 프라우드넷은 선 홀펀칭 후 릴레이 방식 게임 개발자는 그냥
항상 홀펀칭 된다는 가정하에 코딩
• 홀펀칭 대기 시간이 없어 개발은 편하지만,
안타깝게도 양쪽 다 LTE인 경우 홀펀칭 안됨
• 하나 이상이 wifi이면 85(국외)~95%(국내)지만
16. • 3G/LTE vs. Wifi
• 게임 하다가 wifi존에서 나간 경우
• 게임 하다가 wifi존에 도착한 경우
• 게임 플레이하다 전화가 온 경우
17. MPTCP가 뜰까?
• 연결 유지 기능을 TCP stack에!
• 거의 모든 라우터에서 TCP 타입 IP 패킷을 투과시킨다는 점을 착안
• TCP option field hacking! 페이로드 손 안댐! 님좀짱!
• Proof of Concept (POC)
Wifi
MPTCP-aware Server
3G
18. • MPTCP in iOS7
• Siri (검증중?)
• 후퇴 가능한 프로토콜
• 올리버 논문의 변경 없이 안착한다면?
• 그렇지 않다면?
19. • SCTP, DCCP 혹은 기타는 안나오나?
• 나온지 10년이 넘었는데도 안착 못하는 이유
20. • 프라우드넷에서는?
• P2P, C/S 모두 연결유지 기능 프로토타입 구현된 상태
• 리눅스 포팅 끝나면 마무리 예정 (현재 일부 업체 임상실험(…)중)
• 기존 사용중 업체들에게는 무료로 업데이트될거임
22. 현재 지원중
언어 네트워크 클라이언트 생성
C++ CNetClient* a=Proud::CNetClient::Create();
C# NetClient a=new Nettention.Proud.NetClient();
UnrealScript a = class'NetClient'.static.Create();
Java NetClient a=new com.nettention.proud.NetClient();
플랫폼 네트워크 클라이언트 라이브러리
Windows ProudNetClient.lib
iOS libProudNetClient.a
Android, NDK ProudNetClient.jar libProudNetClient.a
Unreal Engine 3 UnrealEngine3/Development/src/ProudNet/*.*
Unity Engine ProudNetClient.dll (Android, iOS도 동일)
23.
24. • 짜증나더라도, epoll, kqueue, simple poll은
• reactor 모듈로, iocp는 proactor 모듈로 이원화 후
• 제각각 케이스를 만들어야 성능에 유리
• syscall과 1:1 대응하기 때문. 모바일에서 성능에 중요한 요소임
언어 비동기 I/O API 이벤트 대기 함수
Windows IOCP GetQueuedCompletionStatus
Android epoll epoll_wait
iOS kqueue kevent
Marmalade simple poll select
25. • Win32 API 쓰던 부분들 다 뜯어냄
• #if 떡칠
최대한 모아놓고 거기서만 #if 떡칠
• 제일 까다로왔던 부분은 의외로… string 부분임 -0-;
VC++, Marmalade Android, iOS
char Multibyte
(3개 국어 소화 불가능)
UTF-8
wchar_t UTF-16 UTF-32
(메모리 너무 차지)
26. • Mono ≠ .Net Framework
• iPhone3GS, iPhone 4에서 일으키는 문제
• Mono Socket.Connect 함수의 버그
36. • 몇 단점에도 불구하고 장점이 매우 큼
• 낮은 반응 속도 < 높은 안정성
• 비동기 멀티플레이 게임에서는 만족
37. decision making tree
비동기
멀티플레이
동기
멀티플레이
TCP, UDP
클라에서
플레이 판정
(빠른 반응성, 서버
유지비 절감)
서버에서
플레이 판정
(해킹 방어,
잠수함 패치 용이)
HTTP
38. 웹서버+프라우드넷
• 이렇게 개발하는 경우
• 처음에 웹서버로 개발하다가 중
도에 필요해지는 경우
• 멀티플레이, 서버사이드 게임판정
• 어떻게 같이 사용하는지
• DB를 매개채로 데이터 공유
• 플러그인을 통해 서버간 통신
39. 논리적 단일 서버
• 우리의 DB cache 시스템으로 논리적
단일 서버를 이렇게 구축
게임
DB
유저계
정 DB
매핑DB
DB cache
server
게임
DB
유저계
정 DB
DB cache
server
게임
DB
유저계
정 DB
DB cache
server
게임
DB
유저계
정 DB
DB cache
server
게임서버
게임서버
게임서버
매핑DB 매핑DB
클라
44. 클라우드에서 프라우드넷의 성능
• 모바일 게임 Fish Riots 라이
브 서버
• A???? US West
• 7GB RAM, 4 CPU
• Windows Server 2012
• 화면에 최대 50개의 타 플레이
어가 보여짐 (일반적인
MMORPG보다 2배정도 부하
를 줌)
• 스트레스 테스트 클라이언트
를 사용
• No P2P
45. • 동시접속자 1112명에서
CPU 8~12% 사용
• System process는 약 6%
를 사용 (서버 반 클라 반)
• 일반적인 서버의 한계 수
위가 CPU 80%인 점을 감
안하면, 최대 동시접속자
7000명 처리 가능
46. 리얼 머신에서 처리 성능
CPU Intel® Core™ i7-2600 CPU @ 3.40GHz
(4코어&하이퍼스레딩)
메모리 16.0GB
운영체제 Window 8.1 Pro K
시스템 종류 64비트 운영체제, x64 기반 프로세서
1000개 +
더미 클라이언트
즉, 80% 기준으로 동시
접속자
20000명 처리