본문 바로가기

분류 전체보기

(80)
분산 서버 구조 3 분산 처리 전략 1. 성능 분석을 하여 분산 처리가 필요한 지점을 엄선한다 2. 데이터 응집력을 확인한다. 다룰 데이터 간 상호 작용이 매우 적은 것들만 골라서 분산한다 응집력이 높은 데이터를 구별하는 기준을 찾아야 한다 3. 분산 처리 방식은 1) 동기 분산 처리 2) 비동기 분산 처리 3) 데이터 동기화에 기반을 둔 로컬 처리 중에서 선택한다 4. 분산 처리 자체는 구현과 디버깅이 까다롭고 불필요한 과부하를 일으킨다. 불필요한 분산 처리라고 생각되는 부분은 피할 수 있으면 피하는 것이 좋다 분산 처리는 안정성에도 효과를 준다 ex1) 데이터 분산 서버의 경우 중지된 서버가 처리하는 데이터는 전체 플레이어 중 일부이다 -> 서비스 장애 영역이 전체에서 국소로 줄어든다 ex2) 서버가 5개로 수평 분산되..
분산 서버 구조 2 로직 처리의 분산 방식 1. 동기 분산 처리 : 어떤 연산을 다른 서버에 던져 놓고 그 결과가 올 때까지 대기한다. 그 연산과 관계된 데이터가 도중에 변경되지 않게 잠금(lock)을 해야한다 일광성을 지키면서 다른 서버에 있는 데이터에 액세스하는 방식도 있다 분산 락 기법이 동반된다. 둘 이상의 서버가 나누어서 가지고 있는 데이터를 일관성 있게 처리할 수 있다 잠금으로 인한 병목이 생길 수 있다 암달의 법칙 : 병렬 처리할 수 있는 장치에서 병렬로 처리하지 못하는 시간에 비례하여 병렬 효과가 급감하는 현상 -> 동기 분산 처리의 잘못된 사용은 분산 서버의 효과를 떨어뜨릴 수 있다 2. 비동기 분산 처리 서버에서 어떤 연산 명령을 다른 서버에 송신할 때, 다른 서버의 명령 처리결과를 기다리지 않는다 일방적..
분산 서버 구조 1 서버의 확장성(scalability) : 사용자 수가 늘어나더라도 쉽게 대응할 수 있어야 한다 수직 확장 (스케일 업, scale-up) : 서버의 하드웨어를 더 좋은 것으로 교체하여 처리량을 늘리는 것 서버 소프트웨어 설계 비용 : 낮다 확장 비용 : 높다 (기하급수적으로 높아진다) 과부하 지점 : 서버 컴퓨터 자체 오류 가능성 : 낮다 (로컬 머신 안에서 동기 프로그래밍 방식으로 작동하므로) 단위 처리 속도 : 높다 (로컬 컴퓨터의 CPU와 램만 사용) 처리 가능 총량 : 낮다 (서버 컴퓨터 한 대 성능만 사용하므로) 수평 확장 (스케일 아웃, scale-out) : 서버 대수를 늘려서 더 많은 처리를 하는 것 서버 소프트웨어 설계 비용 : 높다 확장 비용 : 낮다 (선형적으로 높아진다) 과부하 지점..
게임 서버와 클라이언트 클라가 서버에 메시지를 전달하면 서버는 이를 수신하여 메시지 내용에 따라 특정한 행동을 처리한다 서버에서 클라에 메시지를 전달하면 클라는 수신한 메시지 내용에 따라 특정한 행동을 한다 메세지가 오가는 과정을 상호 작용(interaction)이라 한다 1. 연결 : 최초로 클라가 서버와 데이터를 주고받을 준비를 하는 것이다 2. 요청-응답 : 연결을 마쳤으면 클라는 서버에 메시지를 보내고, 서버는 이를 처리한 후 결과를 응답해 준다 3. 능동적 통보 : 클라에서 요청을 보낸 적도 없는데 서버에서 능동적으로 통해야 할 때도 있다 ex) 세션의 상태는 시간이 지나면서 변화하는데, 이 변화를 클라에 일정 시간마다 통보해야 할 때가 있다 4. 연결 해제 게임 서버가 주로 하는 일 1. 여러 사용자와 상호 작용 2..
소켓 프로그래밍 3 epoll : 소켓이 I/O 가능 상태가 되면 이를 감지해서 사용자에게 알림을 해주는 역할을 한다 어떤 소켓이 I/O 가능 상태인지 알려준다 논블록 소켓을 대량으로 갖고 있을 때 효율적으로 처리해 주는 API이다. 레벨 트리거 : 소켓이 I/O 가능하다를 의미한다 에지 트리거 : 소켓이 I/O 가능이 아니었는데, 이제 I/O 가능이 되었다를 의미한다 에지 트리거를 사용할 때 I/O 호출을 한 번만 하지 말고 would block이 발생할 때까지 반복해야 한다 소켓은 논블록으로 미리 설정되어 있어야 한다 IOCP(I/O Completion Port) : 소켓의 Overlapped I/O가 완료되면 이를 감지해서 사용자에게 알려주는 역할을 한다 epoll과 IOCP의 차이점 epoll은 I/O 가능인 것을 ..
소켓 프로그래밍 2 논블록 소켓의 데이터를 다루는 순서 1. 소켓이 I/O 가능인 것이 있을 때까지 기다린다 2. 소켓에 대해 논블록 액세스를 한다 3. would block이 발생했으면 두고, 그렇지 않으면 실행 결과 리턴 값을 처리한다 Overlapped I/O의 데이터를 다루는 순서 1. 소켓에 대해 Overlapped 액세스를 건다 2. Overlapped 액세스가 성공했는지 확인한 후 성공했으면 결과값을 얻어와서 나머지를 처리한다 Overlapped I/O 함수는 즉시 리턴되지만, OS로 해당 I/O 실행이 별도로 동시간대에 진행되는 상태이다 호출한 Overlapped I/O 전용 함수가 비동기로 하는 일이 완료될 때까지 소켓 API에 인자로 넘긴 데이터 블록을 제거하거나 내용을 변경해서는 안된다 Overlappe..
소켓 프로그래밍 1 블로킹 소켓(Blocking Socket) : 소켓에 대한 동기 입출력 방식 블로킹 : 디바이스에 처리 요청을 걸어 놓고 응답을 대기하는 함수를 호출할 때 스레드에서 발생하는 대기 현상 송신 버퍼(send buffer) : 일련의 바이트 배열 송신 버퍼의 크기는 고정되어 있지만, 마음대로 크기를 변경할 수 있다 송신 버퍼는 FIFO 형태로 작동한다 send(data)를 호출하면 송신 버퍼에 채워진다 송신 버퍼에 채워진 data는 잠시 후 통신 선로를 통해 빠져나간다 따라서 송신 버퍼는 뭔가가 채워지더라도 곧 빈 상태가 된다 송신 버퍼가 가득 차면 send() 함수의 블로킹이 발생한다 송신 버퍼가 수용가능한 상태가 될 때까지 대기한다 TCP 수신 함수 : recv() 1바이트라도 수신할 수 있으면 즉시 리..
컴퓨터 네트워크 2 계층 3 : 네트워크 계층 : 광역 통신망(WAN)에서 통신을 가능하게 한다 WAN의 모든 단말기는 OSI모델의 계층 3에서 요구하는 형식의 주소를 가진다 직접 데이터를 건네는 것이 아닌, 계층적으로 데이터를 건네주는 방식이다 어떤 데이터가 단말기에서 스위치로 갔는데 그 데이터를 스위치가 직접 건네줄 수 없는 곳에 있으면, 이를 취급할 수 있는 곳으로 데이터를 보내야 한다 이 역할을 하는 네트워크 기기를 라우터(Router)라고 한다 라우터 : 서로 다른 LAN 사이에 컴퓨터 통신을 할 수 있게 하는 장비이다 인터넷 프로토콜(Internet Protocol, IP) 어떤 데이터 X를 보내려고 하면 IP에 의해 IP 패킷(packet) 형태로 포장된다 단말기 A -> 단말기 A의 LAN -> 라우터 -> ..