본문 바로가기

프로그래밍/서버

분산 서버 구조 1

서버의 확장성(scalability)

 : 사용자 수가 늘어나더라도 쉽게 대응할 수 있어야 한다

 

수직 확장 (스케일 업, scale-up)

 : 서버의 하드웨어를 더 좋은 것으로 교체하여 처리량을 늘리는 것

 서버 소프트웨어 설계 비용 : 낮다

 확장 비용 : 높다 (기하급수적으로 높아진다)

 과부하 지점 : 서버 컴퓨터 자체

 오류 가능성 : 낮다 (로컬 머신 안에서 동기 프로그래밍 방식으로 작동하므로)

 단위 처리 속도 : 높다 (로컬 컴퓨터의 CPU와 램만 사용)

 처리 가능 총량 : 낮다 (서버 컴퓨터 한 대 성능만 사용하므로)

 

수평 확장 (스케일 아웃, scale-out)

 : 서버 대수를 늘려서 더 많은 처리를 하는 것

 서버 소프트웨어 설계 비용 : 높다

 확장 비용 : 낮다 (선형적으로 높아진다)

 과부하 지점 : 네트워크 장치

 오류 가능성 : 높다 (여러 머신에 걸쳐 비동기 프로그래밍 방식으로 작동하므로)

 단위 처리 속도 : 낮다 (여러 서버 컴퓨터 간 메시징이 오가면서 처리하므로)

 처리 가능 총량 : 높다 (여러 서버 컴퓨터로 부하가 분산되므로)

 

 서버에 분산 처리가 되지 않았을 때 일어나는 일

 ex) 동시접속자 수가 무제한으로 증가했을 때

 1. 서버로 보낸 메시지에 대한 처리 응답이 늦게 도착한다

 2. 서버 접속 과정이 매우 오래 걸린다

 3. 서버와 연결이 돌발 해제된다

 4. 서버 접속 자체가 실패하여 타임아웃 현상이 발생한다

 

 서버에서는

 1. CPU 사용량이 증가한다

 2. 클라에서 메시지를 받는 속도보다 메시지를 처리하는 속도가 느릴 때

     클라에 보낼 메시지의 발생 속도보다 실제로 메시지를 보내는 속도가 느릴 때

    서버의 메모리 사용량이 증가한다

 3. CPU 과부하는 램 사용량 증가로 이어진다

 

32비트 서버에서는 메모리를 수 기가바이트까지 쓰게 된다

그러다 malloc()에서 null을 리턴한다

 

64비트에서는 서버의 물리적 메모리보다 더 많은 양의 메모리를 할당하면서 대량의 메모리 스와핑(memory swapping)이 발생한다

때문에 프로그램 실행 속도가 급락하고, 메모리 할당량이 더욱 증가하게 된다

 

단일 서버에 물려있는 네트워크 기기에 과부하가 걸리면

 1. 라우터 과부하패킷 유실(packet drop)이 발생한다

 2. TCP 재전송 타임아웃으로 TCP 연결 해제가 발생한다

 3. TCP 소켓에서 ECONNABORTED 오류가 발생한다

 

데이터 분산

 : 한 머신이 처리해야 하는 데이터를 같은 역할을 하는 여러 머신이 나누어서 처리하는 것

 

기능적 분산

 : 한 머신이 처리해야 하는 데이터의 처리 단계를 세분화해서 여러 머신이 나누어 처리하는 것

 

DB에서의 분산 처리

 데이터 단위 분산

 : 테이블 1개를 테이블 안의 키 필드 단위로 분배하는 것, 파티셔닝이라고 한다

기능 단위 분산

 : 서로 다른 테이블을 서로 다른 서버에 배치하는 것

 

'프로그래밍 > 서버' 카테고리의 다른 글

분산 서버 구조 3  (0) 2019.10.18
분산 서버 구조 2  (0) 2019.10.09
게임 서버와 클라이언트  (0) 2019.09.30
소켓 프로그래밍 3  (0) 2019.09.27
소켓 프로그래밍 2  (0) 2019.09.25