[게임 서버] 10.1 로그온 처리의 분산
카테고리: GameServer
태그: GameServer
이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 GPT에게 요약을 요청하여 작성되었습니다.
게임 서버 프로그래밍 교과서, 배현직 저자
📦 10. 분산 서버 구조 사례
👉🏻 1. 로그온 처리의 분산
🔐 로그온 처리 과정
---
config:
look: handDrawn
theme: dark
layout: dagre
---
sequenceDiagram
participant C as 클라이언트
participant S as 서버
participant DB as 데이터베이스
C->>S: ① RequestLogon()
rect rgba(200, 200, 200, 0.4)
activate S
deactivate S
end
S->>DB: ② DB query()
rect rgba(200, 200, 200, 0.4)
activate DB
deactivate DB
end
DB->>S: ③ result()
activate S
deactivate S
S->>C: ④ NotifyLogonResult()
activate C
deactivate C
- ① 요청: 클라이언트는 서버에 ID/PW 암호화 후 전송, 인증 서버에서 수신 후 메시지 복호화
- ② 질의: 서버는 복호화된 메시지에서 ID/PW를 구하고, DB에 질의를 던지고 응답 대기
- ③ 결과: DB에서 질의 수행 후 결과 전송
- ④ 응답: 서버에서 결과 판단 후, 클라이언트에게 응답
동시접속자 수가 많아지면, 회색 부분에서 과부하가 발생한다.
- 로그온 메시지 복호화 연산 과정
- 질의 분석과 디스크 스토리지 액세스
🔀 로그온 서버 수평 확장
---
config:
look: handDrawn
theme: dark
layout: dagre
---
flowchart LR
C1[클라이언트]
C2[클라이언트]
subgraph AUTH[인증 서버]
A1[인증 서버]
A2[인증 서버]
A3[인증 서버]
A4[인증 서버]
end
DB[유저 DB]
C1 --> A2
A2 --> DB
C2 --> A3
A3 --> DB
- 클라이언트는 인증 서버 중 하나에 접속한다.
- 서버 주소 목록 중 랜덤으로 하나를 선택해 접속한다.
- 클라이언트는 서버 주소 목록을 알고 있다고 가정한다.
⚖️ 로드 밸런서
---
config:
look: handDrawn
theme: dark
layout: dagre
---
flowchart LR
C1[클라이언트]
LB[로드 밸런서]
subgraph AUTH[인증 서버]
A1[인증 서버]
A2[인증 서버]
A3[인증 서버]
A4[인증 서버]
end
DB[유저 DB]
C1 --> LB
LB --> A1
LB --> A2
LB --> A3
LB --> A4
A2 --> DB
A3 --> DB
- 로드 밸런서: 클라이언트 연결들을 인증 서버로 분배해주는 하드웨어
- 클라이언트가 서버 주소 목록을 가지고 있다면, 로드 밸런서를 사용해도 된다.
📈 로드 밸런서 수평 확장
---
config:
look: handDrawn
theme: dark
layout: dagre
---
flowchart LR
C1[클라이언트]
DNS[DNS]
LB1[로드 밸런서]
LB2[로드 밸런서]
subgraph AUTH[인증 서버]
A1[인증 서버]
A2[인증 서버]
A3[인증 서버]
A4[인증 서버]
end
DB[유저 DB]
C1 --- DNS
C1 --> LB1
C1 --> LB2
LB1 --> A1
LB1 --> A2
LB1 --> A3
LB1 --> A4
LB2 --> A1
LB2 --> A2
LB2 --> A3
LB2 --> A4
A2 --> DB
A3 --> DB
- 로드 밸런서에 과부하가 걸리는 경우, 로드 밸런서 추가 / DNS 서버를 통해 해결할 수 있다.
- DNS 서버는 랜덤하게 로드 밸런서 서버 주소를 반환한다.
- DNS는 IP 주소를 확보하면, 며칠간 로컬 디스크에 저장해둔다.
- 그러므로, DNS는 과부하가 걸릴 일이 거의 없다.
댓글남기기