로직 처리의 분산 방식
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 |