[게임 서버] 10.1 로그온 처리의 분산

게시:     수정

카테고리:

태그:

이 글은 아래의 책을 자세히 정리한 후, 정리한 글을 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는 과부하가 걸릴 일이 거의 없다.

GameServer 카테고리 내 다른 글 보러가기

댓글남기기