320x100

NDC/Server 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] 테라 서버의 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] <쿠키런> 바쁘고 가난한 개발자를 위한 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 2014] 분산서버 구축의 ABC

분산이란? Machine의 하드웨어 부하를 분산(Network Traffic, CPU, Memory) 분산 서버는 기본적으로 독립적이여서 서로에게 영향을 주지 않음 A+B=C가 아니라 A A A DB의 Sharding Mapping: share 정보를 테이블에 저장하고 cache를 이용해 성능을 최적화 다만 mapping table은 20byte * 1million 만 해도 20M가 되기 때문에 부하가 생김 Dynamic: 기준 값을 key로해서 data를 분산 저장 하지만 key 분산 값이 바뀌면 resharding 문제 발생 Sharding은 DB에서가 아닌 Code에서 처리해야 한다. 병목 CPU: 파이프라인 구성으로 만들지 말자. 하나의 요청이 A서버->B서버->C서버로 완료가 되면 원활한 확장이..

NDC/Server 2022.10.19

[NDC 2014] Rx와 Functional Reactive Programming으로 고성능 서버 어플리케이션 만들기

Reactive Programming 프로그래머들이 외면해 왔던 프로그래밍 패러다임 - Excel은 대표적인 Reactive Programming이다. - 순서대로 실행될 명령들이 아닌 데이터가 흐르는 방법을 나타내는 것 - 명령형 -> 선언적, 순차적 -> 동시적으로 생각하는 방식을 바꿔야 한다. The Reactive Manifesto 새로운 시대의 새로운 소프트웨어를 위한 선언문 - 객체지향 프로그래밍 패턴을 구성하는 인터페이스 OUPUT foo(INPUT a); 너무 당연하게 입력이 들어가고 출력이 나올 때까지 스레드가 아무것도 하지 못한다고 가정하고 있다 - Functional Programming의 핵심 M foo (INPUT a); Functional Programming 함수형 프로그래밍으..

NDC/Server 2021.12.02

[NDC2014] WCF를 이용하여 쉽게 만드는 모바일 게임서버

WCF? (Windows Communication Foundation) - 서비스와 클라이언트 사이에서 SOAP(Simple Object Access Protocol: xml 기반의 메시지를 네트워크 상에서 교환하는 프로토콜) 형식의 메시지를 보내는 시스템을 만드는 런타임과 API 집합 - HTTP, TCP/IP, Named Pipe, MSMQ, P2P등 다양한 프로토콜 지원 - WS-Security, WS-AtomicTransaction, WS-ReliableMessaging등 웹서비스 스펙 지원 WCF의 구성 요소 1. Message: 독립적인 데이터 단위 통신에 사용되는 데이터 구조 2. EndPoint: 서비스를 호출하기 위한 액세스 포인트 (Address, Binding, Contract로 구성..

NDC/Server 2021.12.02
320x100