[게임 서버] DataBase Queue

이정석·2023년 9월 7일

게임서버

목록 보기
7/14

DataBase Queue

lock과 데이터베이스에 접근하는 기능을 동시에 사용하면 시스템 성능이 떨어지는 상황이 발생할 수 있는데 그림으로 나타내면 아래와 같다. PlayerBPlayerC의 요청을 처리하는 쓰레드들이 오랜시간동안 대기하게 된다. 이러한 문제는 단위시간동안 요청이 많아질수록 심각한 성능저하를 야기한다.

이러한 문제가 발생한 원인은 여러 쓰레드가 데이터베이스에 접근하는 기능을 실행하려고 할 때 접근하는 코드가 연산 순서상 lock으로 형성된 임계구역에 있음으로 인한 쓰레드 대기현상이다. 즉 위 그림에서 PlayerA, PlayerB, PlayerC가 게임을 떠나 각 플레이어의 상태를 데이터베이스에 저장한다고 할 때, 처음 요청을 보낸 PlayerA의 데이터접근은 바로 실행되지만 이후에 들어오는 PlayerB, PlayerC의 쓰레드는 PlayerA의 쓰레드가 작업을 끝날 때 까지 기다려야 하고 이는 곧 자원낭비로 이어진다.

이러한 문제를 해결하는 방법은 데이터베이스에 접근하는 것을 일종의 데이터베이스 Job Queue에 위임하는 방법이다. 데이터베이스 전용 Job Queue를 DataBase Queue라고할 때 DataBase Queue에 쌓인 Request를 처리하는 쓰레드가 하나임을 보장하는것이 제일 중요하다. DataBase Queue를 적용한 구조는 아래 사진과 같다.

Job Queue의 원리와 설명은 여기를 참고하자!

profile
게임 개발자가 되고 싶은 한 소?년

0개의 댓글