320x100

NDC 2015 5

[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
320x100