본문 바로가기

프로그래밍/서버

분산 서버 구조 2

로직 처리의 분산 방식

 

1. 동기 분산 처리

 : 어떤 연산을 다른 서버에 던져 놓고 그 결과가 올 때까지 대기한다.

   그 연산과 관계된 데이터가 도중에 변경되지 않게 잠금(lock)을 해야한다

 

일광성을 지키면서 다른 서버에 있는 데이터에 액세스하는 방식도 있다

분산 락 기법이 동반된다.

둘 이상의 서버가 나누어서 가지고 있는 데이터를 일관성 있게 처리할 수 있다

 

잠금으로 인한 병목이 생길 수 있다

 

암달의 법칙

 : 병렬 처리할 수 있는 장치에서 병렬로 처리하지 못하는 시간에 비례하여 병렬 효과가 급감하는 현상

-> 동기 분산 처리의 잘못된 사용은 분산 서버의 효과를 떨어뜨릴 수 있다

 

2. 비동기 분산 처리

 서버에서 어떤 연산 명령을 다른 서버에 송신할 때, 다른 서버의 명령 처리결과를 기다리지 않는다

 일방적으로 자기가 해야 하는 다음 일을 시작한다

 

장점 : 동기 분산 처리와 달리 잠금으로 인한 병목이 없다

 -> 각 서버가 가진 성능을 최대한으로 활용할 수 있다

 

단점 : 모든 로직을 이 방식으로 구현하기 어렵거나 불가능하다

 -> 반환 값 없는 함수만으로 로직을 구현하는 것과 유사하다

 

중요한 핵심 처리는 기계어 명령어 수십~수백개인데, 분산된 서버 간 대화에 기계어 명령어가 수천개 사용된다.

과도하게 서버간 분산 처리를 하면 쓸데없이 비효율적인 상황이 발생할 수 있다

 

3. 데이터 복제 및 로컬 처리

 : 게임 플레이를 위한 로직 처리는 두 서버에 분산된다. 어떤 처리가 서버와 맞물려 돌아가지 않고 각 서버가 알아서 처리한다.

  한쪽 서버에서 데이터 변화가 발생하면 나머지 서버에도 전파된다. 즉, 데이터 복제가 일어난다

 

각 서버 프로세스는 데이터 원본이나 사본을 가진다

서버 프로세스 안의 원본과 사본을 가지고 연산을 수행한다

 

장점 : 분산 처리에서 발생하는 병목 현상이 없고, 여러 머신에 걸쳐 연산하지도 않으므로 응답 속도가 분산하기 전처럼 빠르다

 

단점 : 스테일 데이터 문제(stale data problem)가 발생할 수 있다. 

 

스테일 데이터 문제

 : 사본 데이터와 원본 데이터가 간발의 차이로 다른 것

 

하이젠버그(Heisenbug)

 : 서버가 가진 데이터를 모두 신뢰할 경우 데이터 불일치로 잘못된 연산이 발생할 수 있다

 

3가지 분산 처리 방식은 장점과 단점이 하나씩은 다 있기 때문에, 어느 한 방법이 절대적으로 우세하지 않다

-> 분산 처리가 가장 적게 일어나는 방법을 찾으면 좋다

 

응집도가 높은 데이터끼리는 가급적 분산 처리를 하지 말고, 응집도가 낮은 데이터에 대해 분산 처리를 하는 것

 

응집도(coherency 또는 locality)

 : 특정 영역 안에 얼마나 많은 데이터가 관련되고 뭉쳐 있는지를 의미

 

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

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