320x100

NDC 11

[NDC 2016] <야생의 땅: 듀랑고> 중앙 서버 없는 게임 로직

객체가 중심이 되는 서버? 하나의 지역을 물리적인 서버가 담당하는 것은 땅의 크기가 서버의 성능에 의해 제한될 수 밖에 없다 => 서버는 모종의 규칙에 의해 배정된 객체를 담당한다 장점 서버에 소속된 객체의 시야 외에는 관심이 없어 전체 세계의 크기와 상관 없는 구조 => 이론적으로 무한한 크기의 세계를 표현 가능 특정 서버에 문제가 생겼을 때 재 접속하면 바로 그 위치에서 정상적인 플레이 가능 => 안정성의 향상 동기화 동기화가 잦을 수록 DB에 부담이 된다 분산 환경에서는 서버간 동기화가 이루어지므로, N배 부담이 된다 동기화 최적화 1. 미래를 예측해 동기화 횟수를 줄이자 변화량을 입력하면 그래프 방식으로 데이터를 보여주는 라이브러리 https://github.com/what-studio/gauge..

NDC/Server 2023.01.16

[NDC 2016] <야생의 땅: 듀랑고> 지형 관리 완전 자동화 - AWS와 DOCKER 체험기

도전 과제는 크게 2가지로 - 지형 배포: 지형 배포 자동화 - 자연물 관리: 자연 상태 파악, 생태계 시뮬레이션 자동화 지형 제작 & 배포 개요 - 전용 도구로 지형 파일들을 제작 - 후처리를 거친 뒤 지형 파일을 git에 commit - 서버 코드에서 해당 커밋을 참조하도록 변경 지형 제작 & 배포 도구 - WorldGen: 지형 파일 제작(C#) - ManageTool: 지형 배포 및 관리에 필요한 기능 제공(Python) 지형 배포 절차 - 청크별 빠른 색인을 위해 여러가지 지형 정보들을 청크별로 나눔 - 청크: 16 x 16 타일 -> pub-sub 토픽, 분산의 최소 단위 - 타일: 가로 세로 2m의 정사각형 -> 자연물, 건축물 등의 최소 단위 - cm: 동물의 위치등 섬세한 위치 조정에 사..

NDC/Server 2023.01.15

[NDC 2016] 유니티, iOS에서 LINQ 사용하기

LINK(Language Integrated Query): 데이터 저장소 종류와 관계 없이 저장소에 일관성 있는 인터페이스로 질의 - 동일한 인터페이스 사용 - 다양하고 편리한 기능 (Max, Min, Average, OrderBy, First ...) - 지연 실행 (성능 이점) - 간결한 High Level 코드 품질 - 컴파일 타임 에러 체크 int[] numbers = { 5, 10, 8, 3, 6, 12 }; Query syntax var result = from num in numbers where num % 2 == 0 orderby num select num * 2; Method syntax var result = numbers .Where(num => num % 2 == 0) .Order..

NDC/Dev 2023.01.15

[NDC 2016] 테라 서버의 Modern C++ 활용기

smart pointer (RAII) - 객체의 생성 소멸 관리를 위해 사용하는 객체 - shared_ptr, unique_ptr t_ptr - shared_ptr처럼 Reference Count를 공유 - 침습형(invasive) 카운터를 사용 Cppcon2015 중 "Smart pointers" are overused (스마트 포인터는 과다 사용되고 있다) - shared_ptr can be expensive => reference count의 증감 연산이 많이 일어나기 때문에 사례1) 빠른줄만 알았던 type_cast template T* type_cast(S* s) { if (s && TypeTable -> -> seq * C++14부턴 간단하게 std::make_index_sequence으로 대..

NDC/Server 2023.01.14

[NDC 2015] 마비노기 듀얼: 분산 데이터베이스 트랜잭션 설계와 구현

비관적 동기화 (락 기반 동기화) 내용 __ 작업하는 동안 다른 동작을 못하게 한다. 단점 __ 모든 DB 변경에서 락을 잡아야 한다 __ 락을 잡을 수 없는 상황(서버 다운)이 있다 낙관적 동기화 (트랜잭셔널 메모리) 내용 __ 일단 진행하고, 문제가 생기면 롤백한다 애플리케이션 레벨에서 롤백을 구현해야 하므로 문제 영역을 나눠보자 __ 퍼스트 로컬 트랜잭션 ____ 실패할 가능성이 있는 것 ____ 안전하게 롤백할 수 있어야 함 ____ ex) 아이템 제거, 골드 감소 __ 세컨드 로컬 트랜잭션 ____ 실패할 가능성이 없는 것 ____ 안전하게 롤백할 수 없어도 된다 ____ ex) 아이템 추가, 골드 증가 절차 1. 모든 참여자(DB)들에게 퍼스트 LT를 실행 2. 모든 퍼스트 LT가 성공하고 나..

NDC/DB 2023.01.09

[NDC 2015] 이 쿼리를 어떻게 짜야 잘 짰다고 소문이 날까?

반복 액세스 피하기 일일 구매로그 데이터 중 아래 통계를 구하자 1. 캐쉬 구매에 성공한 유저 수 2. 인게임 머니로 구매에 성공한 유저 수 3. 쿠폰을 이용하여 구매에 성공한 유저 수 변경 전 SELECT @CASH_COUNT = COUNT(*) FROM 구매로그 WHERE BUY_CODE = @캐쉬구매 AND LOG_DATE >= @어제새벽 AND LOG_DATE = @어제새벽 AND LOG_DATE < @오늘새벽; SELECT @INGAME_COUNT = COUNT(*) FROM 구매로그 WHERE BUY_CODE = @인게임구매 AND LOG..

NDC/DB 2023.01.06

[NDC 2015] <쿠키런> 바쁘고 가난한 개발자를 위한 S3 기반 로그 시스템

쿠키런 로그 __ 매일 200 ~ 400 GB의 JSON 텍스트 형식 __ 비정형 스키마 로그 수집 __ Apache Kafka 사용 __ 분산 메세징 시스템: Publish / Subscribe __ 일별 토픽, 4일치 저장 Kafka의 장점 __ 메시지를 복제해 저장 ____ 노드 장애에 강함 ____ 서버 업데이트 및 재부팅이 상시 가능 __ 단순한 저장소 구조로 오류가 잘 안남 __ 높은 읽기 / 쓰기 대역폭 Kafka 사용시 주의점 __ 메시지 중복은 피할 수 없다 (기록 성공 응답을 못받으면 중복 발생) Logstash -> Kafka __ 컴포넌트를 멈추면 로그가 유실 발생 __ Logstash는 Push 방식, Kafka는 Pull 방식 로그 백업 - Amazon S3 __ 무햔 용량 __..

NDC/Server 2023.01.05

[NDC 2015] 피파온라인3 서버 구조와 85만 동접 포스트 모템

Front-End __ Node.js + Express __ Game Server, Notification Server, Relay Server Back-End __ Redis __ MongoDB Etc __ Munin: 모니터링 __ Jenkins: 빌드 자동화 Game Server Graceful Restart - 서비스에 영향을 주치 않는 서버 재시작 - 스키마 / DB 주소 수정과 커넥션이 연결된 서버는 적용이 불가 - 구현: __ L7 ping 응답을 404 failed로 보냄 __ 1분 동안 대기 (기존 응답이 모두 처리될 때 까지) __ 서버 종료 & 업데이트 & 재시작 __ 재기동이 완료되면 L7 ping 응답을 200 ok로 보내서 살아났음을 알림 서비스 중 문제 해결 사례 MetaDB ..

NDC/Server 2023.01.05

[NDC 2015] Key-Value Store를 사용한 대용량 게임 통계

어떻게 만드나? API로 15분 단위 경매장 snapshot 가져오기 (JSON, 물품 1개 = 1ROW) [{"auc":1347942360, "item":14344, "owner":"Sanctuary", "bid":2041200}] snapshot마다 아이템 ID 별로 묶어서 정리 - 최소 가격 - 평균 가격 - 중간 가격 - 물품 개수 이렇게 분석한 결과를 처음에는 mongodb에 저장 - JSON 포맷 저장하기에 간편 - 개발 도중 schema 변경 간편 => 하지만 많은 데이터와 최소 유지 비용 증가로 인해 실패 가능하면 NoSQL로 구성 - 수평 확장이 편리 - 키에 여러 Column 추가 가능 Key는 서버, 시간, 아이템 ID로 만들고, Value에 시간대별로 가격 정보를 기록 Key Val..

NDC/ETC 2023.01.03
320x100