본문 바로가기
개인공부/Web API 게임 서버 공부

배경지식 - Web 서버 구조

by 하고싶은건많은놈 2023. 4. 23.

Web 서버 기본 구조

  • 가장 간단한 구조
  • 서버가 죽을시 데이터 소멸, 서비스 중지
  • 요청이 늘어날 경우 Scale up(서버의 스펙 상승) 또는 Scale out(서버의 대수 증가) 방법을 사용하여 처리 능력을 향상시킬 수 있음

서버 Scale out

  • 서버를 단순히 Scale out하여 대수를 늘린 경우
  • 특정 서버에 부하가 집중될 수 있음
  • 각 서버마다 가지고있는 데이터가 다름
  • 가용성, 정합성 문제를 해결하지 못함

Load Balancer, DB 추가

  • 로드 밸런서를 추가해 서버에 가해지는 트래픽을 여러대의 서버에 균등하게 분산
  • 모든 서버가 동일하게 공유하는 데이터베이스에서 데이터를 관리하므로 데이터의 일관성이 유지됨
  • DB를 통해 데이터를 더 효율적으로 관리할 수 있으며, 보안 / 백업 등에도 이점이 생김

 

Load Balancing

로드 밸런싱에는 다음과 같은 알고리즘들이 사용됨

  • 라운드로빈(Round Robin) : 서버에 들어온 요청을 순서대로 돌아가면서 배정
    여러 대의 서버가 동일한 스펙을 가지는 경우 사용
  • 가중 라운드로빈(Weighted Round Robin) : 서버마다 가중치를 매긴 후 가중치가 높은 서버에 요청을 우선적으로 배정
    서버마다 트래픽 처리 능력이 상이한 경우 사용
  • IP 해시(IP Hash) : 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리
    사용자가 항상 동일한 서버로 연결되는 것을 보장
  • 최소 연결(Least Connection) : 요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트래픽 배분
    서버에 분배된 트래픽들이 일정하지 않은 경우에 적합
  • 최소 리스폰타임(Least Response Time) : 서버의 현재 연결상태와 응답시간을 고려하여 트래픽을 배분

 

로드 밸런싱은 OSI 7 Layer 중 어느 계층에서 밸런싱이 이루어지냐에 따라서 구분 가능

  • L2 : Mac 주소를 바탕으로 로드 밸런싱
  • L3 : IP 주소를 바탕으로 로드 밸런싱
  • L4 : TransPort 계층에서 로드 밸런싱
    • IP 주소 / 포트번호 / Mac 주소 / 전송 프로토콜에 따라 트래픽을 분산
    • 패킷 레벨에서만 트래픽을 분산하기 때문에 속도가 빠르고 효율이 높음
  • L7 : Application 계층에서 로드 밸런싱
    • 패킷의 내용을 확인하고 그 내용에 따라 특정 서버에 분배 가능
    • 패킷의 내용을 복호화해야하기 때문에 L4보다 더 높은 비용을 지불해야

 

AWS에서는 ELB(Elastic Load Balancer)라는 이름으로 로드 밸런서를 제공

이 때 ELB는 ALB, NLB, CLB를 모두 포함하는 포괄적인 개념

  • ALB(Application Load Balancer) : OSI 7계층에서 동작, HTTP/HTTPS 트래픽을 처리에 적합
  • NLB(Network Load Balancer) : OSI 4계층에서 동작, TCP/UDP 및 TLS 트래픽 처리에 적합
  • CLB(Classic Load Balancer) : OSI 4, 7계층에서 동작하지만 현재는 거의 사용하지 않음

DB의 레플리케이션

  • DB를 Master와 Slave로 나누어 Master에서는 Insert / Update / Delete 등의 Wrtie 작업, Slave에서는 Select의 Read 작업을 수행
  • 자원을 많이 소비하는 Read 작업을 여러 개의 Slave에서 진행하기 때문에 부하를 분산시킬 수 있음
  • Master의 내용을 복제하기 때문에 데이터를 백업하는 용도로도 사용 가능
  • 단, Slave는 Master의 복사본이기 때문에 데이터의 정합성을 보장할 수 없
  • MySQL에서는 레플리케이션에 비동기 복제 방식을 사용
    Master 노드에서 변경되는 데이터에 대한 이력을 로그에 전송시 Replication Master Thread가 비동기적으로 이를 확인 후 Slave에 전송

KVS 추가

KVS(Key Value Store)

Key와 Value 쌍으로 데이터를 관리하는 DB

Memcache, DynaamoDB, Redis 등이 있으며 각 DB마다 특징, 사용방법, 용도가 다름

  • KVS중 하나인 Redis는 주로 캐시 데이터베이스 서버로 활용

데이터베이스 확장

수직 파티셔닝(Vertical Partitioning)

테이블의 컬럼을 분할하여 다른 테이블에 저장

테이블의 크기를 줄이고 특정 컬럼에 대한 접근 속도를 향상시킬 수 있음

 

수평 파티셔닝(Horizontal Partitioning)

데이터를 테이블의 행 단위로 분할하여 서로 다른 테이블에 저장

 

샤딩(Sharding)

데이터를 레코드 또는 테이블 단위로 분할하여 서로 다른 DB에 분산 저장

각 DB 서버는 독립적인 데이터베이스 인스턴스를 가지고 동작하며, 쿼리가 여러 서버에 분산되어 실행될 수 있음

단, 여러 샤드에 걸친 데이터를 조인하는 것이 어렵고 한 데이터베이스에 부하가 집중될 경우 성능이 저하됨

'개인공부 > Web API 게임 서버 공부' 카테고리의 다른 글

Web API 서버 예시  (0) 2023.04.24
배경지식 - ZLogger  (0) 2023.04.20
배경지식 - Redis  (0) 2023.04.20
배경지식 - ORM  (1) 2023.04.20
배경지식 - C#  (0) 2023.04.20

댓글