Search

클러스터형 시스템 NUMA, DLM

class
운영체제 심화
상태
완료
날짜
목차

클러스터형 시스템

클러스터형 시스템은 여러 대의 독립적인 컴퓨터를 네트워크를 통해 연결하여 하나의 시스템처럼 작동하게 만든 컴퓨팅 아키텍처입니다. 이러한 시스템은 고성능, 고가용성, 확장성을 제공하는 데 목적을 두고 있습니다.

클러스터형 시스템의 특징

1.
고가용성 : 하나의 노드가 실패하더라도 다른 노드가 그 역할을 대체할 수 있어 시스템 전체의 가동 중단 시간을 최소화할 수 있습니다.
2.
부하 분산 : 작업을 여러 노드에 분산시켜 전체적인 시스템의 효율성과 성능을 향상시킬 수 있습니다.
위 두 부분이 클러스터형 시스템의 핵심입니다. 추가로 확장성처럼 노드를 쉽게 추가할 수 있는 특징도 있지만, 개인적으로는 고가용성과 부하 분산이 클러스터형 시스템의 핵심 기술이라고 생각합니다.

예시 : 구글의 검색 엔진 클러스터

구글은 전 세계에 분산된 수천 대의 서버를 클러스터로 구성하여 사용자의 검색 요청을 처리합니다. 사용자가 검색 쿼리를 입력하면, 이 정보는 여러 서버에 걸쳐 있는 인덱스와 데이터베이스를 통해 빠르게 처리됩니다. 이 클러스터는 부하 분산, 데이터 복제 및 실시간 데이터 처리 기능을 통해 높은 가용성과 빠른 응답 시간을 제공합니다. 이를 통해 구글 검색 엔진은 전 세계 어디서나 높은 성능으로 서비스를 제공할 수 있습니다.

NUMA

NUMA(Non-Uniform Memory Access)는 멀티프로세서 시스템에서 각 프로세서가 로컬 메모리에는 빠르게 접근할 수 있는 반면, 다른 프로세서의 메모리인 원격 메모리에 접근할 때는 더 느린 속도를 갖는 메모리 아키텍처입니다.
제가 개인적으로 NUMA와 클러스터형 시스템이 매우 비슷하다고 생각해서 같은 페이지에 구성했습니다.
이를 활용하는 예시는 조금 어려울 수 있지만, 최대한 비슷한 예를 들어보겠습니다.

NUMA 활용 예시 : 게임 서버

게임 서버는 전 세계의 여러 지역을 대표하는 맵 데이터를 관리하고, 각 맵은 서로 다른 메모리 영역에 저장될 수 있습니다. 이를 NUMA 아키텍처로 설계한다고 가정해봅시다.
1.
로컬 메모리 접근
서버에 여러 프로세서가 있고, 각 프로세서는 자신이 담당하는 특정 맵의 데이터를 로컬 메모리에 저장합니다. 예를 들어, 프로세서 B는 '맵 B'의 데이터를 관리합니다.
플레이어가 '맵 B'에 있는 동안, 프로세서 B는 자신의 로컬 메모리에서 데이터를 빠르게 접근하여 처리할 수 있어 성능이 향상됩니다.
2.
원격 메모리 접근
플레이어가 '맵 B'에서 활동하다가 갑작스럽게 전체 게임 세계에 영향을 미치는 이벤트(예: 전체 서버 점수 업데이트, 글로벌 이벤트 발생 등)에 대한 정보를 요청하는 경우가 있습니다. 이 정보는 '메모리 A'에 저장되어 있습니다.
이때, 프로세서 B는 자신의 로컬 메모리가 아닌 '메모리 A'에 저장된 데이터에 접근해야 하며, 이는 원격 메모리 접근에 해당합니다. 이 과정에서 데이터 접근 시간이 길어져 성능이 저하될 수 있습니다.

DLM

DLM(Distributed Lock Manager)은 다중 컴퓨터 시스템에서 데이터에 대한 동시 접근을 조정하기 위해 사용되는 소프트웨어입니다. 즉, DLM은 클러스터 시스템 내의 노드들 사이에서 자원을 안전하고 효율적으로 공유할 수 있도록하는 소프트웨어입니다.

DLM의 주요 기능

1.
락 : DLM은 다양한 종류의 락(읽기 락, 쓰기 락 등)을 관리하며, 각 노드가 자원에 대해 적절한 권한을 가지고 접근할 수 있도록 조정합니다.
읽기 락 : 자원을 읽을 수 있지만 수정은 할 수 없습니다. 여러 노드가 동시에 읽기 락을 얻을 수 있습니다. 쓰기 락 : 자원을 수정할 수 있는 권한을 제공합니다. 쓰기 락이 활성화되어 있는 동안 다른 노드는 해당 자원을 읽거나 쓸 수 없습니다.
2.
동시성 제어 : 여러 노드가 동시에 같은 자원을 사용하고자 할 때, DLM은 동시성 문제를 해결하고 데이터의 일관성을 유지하기 위해 작업 순서를 조정합니다.
동시성 제어 예시
1.
쓰기 락 요청 : 노드 A가 특정 자원에 대해 쓰기 락을 요청합니다. 이 자원은 현재 다른 노드들에 의해 읽고 있을 수 있습니다.
2.
대기 상태 진입: DLM은 쓰기 락 요청을 받고, 해당 자원에 이미 활성화된 읽기 락들을 확인합니다. 노드 A의 쓰기 락 요청은 이 읽기 락들이 모두 해제될 때까지 대기 상태로 전환됩니다.
3.
읽기 락 해제 감지 : DLM은 활성화된 읽기 락들이 해제되는 것을 감시합니다. 모든 읽기 락이 해제되면, DLM은 대기 중인 쓰기 락 요청을 활성화할 준비를 합니다.
4.
쓰기 락 부여 : 모든 읽기 락이 해제되면, DLM은 노드 A에게 쓰기 락을 부여합니다. 이 시점에서 노드 A는 해당 자원을 수정할 수 있는 권한을 갖게 됩니다.
5.
자원 수정 : 노드 A는 이제 자원을 자유롭게 수정할 수 있습니다. 수정 과정에서는 다른 노드들이 이 자원에 접근하여 읽거나 쓰는 것이 불가능합니다.
6.
쓰기 락 해제 : 작업이 완료되면, 노드 A는 쓰기 락을 해제하고 DLM에 이를 알립니다. 이후 다른 노드들이 다시 자원에 접근할 수 있게 됩니다.
3.
교착 상태 감지 및 해결 : 두 노드 이상이 서로의 자원을 기다리며 무한 대기에 빠지는 교착 상태를 감지하고, 이를 해결하기 위한 메커니즘을 제공합니다.