목록분산시스템 (10)
나의 잡다한 노트 및 메모
하나의 Task 프로세스에서 매우 많은 CPU 자원을 쓰기보다는, 여러 Task 프로세스를 병렬로 띄워 노드 전체(또는 전체 클러스터)의 자원을 고르게 활용하려는 취지 1. Worker마다 스레드를 여러 개 주는 방식의 단점만약 **각 Worker(Task 프로세스)**에 4~8개의 스레드를 부여한다면,동일 노드에서 동시에 돌아가는 여러 Task 각각이 다중 스레드를 사용할 때, 스레드가 경쟁이 심해지고, CPU/메모리 요구량이 기하급수적으로 늘 수 있습니다.특히 자원(특히 Direct Memory, CPU 코어 수)가 제한적인 환경에서는, 스레드가 많아도 실질적인 성능 향상이 크지 않을 수 있고, 오히려 컨텍스트 스위칭, 메모리 부족 등의 문제가 발생합니다. 2. Worker에 1개의 스레드만 주는 이..
최종적 일관성. 분산 시스템, 특히 DB에서 자주 언급되는 개념. 1. 기본 개념정의:Eventual consistency는 시스템 내의 모든 노드가 일정 시간이 지나면 동일한 데이터 상태(일관성 있는 상태)에 도달한다는 것을 의미합니다. 즉, 업데이트 후 즉시 모든 노드가 동일한 데이터를 보유하지 않을 수 있지만, 최종적으로 일관성이 보장된다는 것입니다.즉각적 일관성(Strong Consistency)와의 차이:즉각적 일관성(Strong Consistency): 데이터가 업데이트되면, 모든 사용자가 즉시 최신 데이터를 볼 수 있도록 보장하는 모델입니다.최종적 일관성(Eventual Consistency): 데이터가 업데이트된 후 즉각적으로 일관성이 보장되지 않지만, 시간이 지나면 모든 노드가 동일한 상..
ZooKeeper에서 Watcher 기능은 클라이언트가 특정 znode의 상태(데이터, 존재 여부, 자식 노드 변화 등)를 감시하고, 해당 상태에 변화가 생겼을 때 이벤트를 받아 처리할 수 있도록 해줍니다. Watcher는 일회성(one-time)으로 동작하기 때문에, 한 번 트리거되면 자동으로 해제되며, 지속적인 감시가 필요하다면 이벤트 발생 후 다시 등록해야 합니다. ZooKeeper에서 특정 znode에 Watcher 기능을 설정하려면, 해당 znode에 대한 조회(존재 여부, 데이터, 자식 노드 등)를 수행하는 API 호출 시 Watcher를 함께 등록하면 됩니다. ZooKeeper API에서는 주로 아래 세 가지 메서드를 통해 Watcher를 설정할 수 있습니다.exists(String path..
분산 코디네이션이라하면 분산 시스템에서 시스템 간으 정보 공유, 상태 체크, 서버들 간의 동기화를 위한 lock 등을 처리해주는 역할을 가지고 있다.대규모 작업을 N개 이상의 시스템이 유기적으로 처리하는 것을 의미한다. Zookeeper의 ZnodeZnode는 디렉터리 구조 기반으로 된 Key-Value 형태의 자료구조이다.트리구조의 디렉터리 노드 아래에 이벤트를 받고자 하는 노드를 생성 또는 삭제합니다. 주키퍼에 붙는 인코딩 서버는 자신이 바라보고 있는 노드나 그 노드의 하위 노드가 생성되거나삭제되었을 때 이벤트를 이벤트를 받는다.이벤트 처리는 단일 쓰레드로 순차적으로 처리하기 때문에 N대의 인코딩 서버가 동시에 같은 작업을 할당받지 않는다.또한 Znode를 생성할 때 작업이나 서버의 상태정보를 같이 ..
서비스 레지스트리 : 클러스터 내에서 '누가 현재 리더인지', '어떤 노드가 어떤 역할을 맡고 있는지' 등을 어디엔가 기록해두고, 참여자들이 필요할 때 참조할 수 있게 하는 기능을 포괄적으로 일컫는다. 예를 들어, Hasicorp의 Consul, etcd, zookeeper 등이 서비스 레지스트리로 자주 사용된다. zookeeper의 경우를 예로 들면.... “Active Master”가 결정되면, 해당 Master는 자신의 주소(host:port) 또는 “현재 마스터가 누구인지”에 대한 정보를 ZooKeeper에 기록(등록)합니다.이후 Spark Worker들은 주기적으로 ZooKeeper에서 “현재 Master가 어디에 있는지”를 조회하거나, 이벤트 알림(Watch)을 통해 변경을 감지하여 새로운 M..
**Service Discovery(서비스 디스커버리)**는 동적으로 변화하는 분산 환경(특히 마이크로서비스 아키텍처)에서, 애플리케이션들이 서로 위치를 파악하고 통신하기 위해 사용하는 기법/시스템을 말합니다. 예컨대, 각각의 마이크로서비스가 실행 중인 IP/포트 또는 엔드포인트 URL을 자동으로 등록하고, 찾아 쓸 수 있게 하는 과정 전반이 서비스 디스커버리입니다.아래에서는 개념, 필요성, 대표 패턴과 구현 방식, 그리고 실제 사례 등을 단계적으로 설명하겠습니다.1. 왜 서비스 디스커버리가 필요한가?동적 스케일링컨테이너 기반이나 클라우드 환경에서 서비스는 자동으로 스케일 업/다운 됩니다.이때 서비스 인스턴스(IP, 포트)가 실시간으로 바뀌기 때문에, 클라이언트가 서비스의 위치를 하드코딩하면 곤란합니다...
**분산 시스템에서 애플리케이션 광고(application advertising)**는 애플리케이션이 자신의 존재, 기능 또는 제공하는 서비스를 시스템 내의 다른 구성 요소나 애플리케이션에게 알리는 방법과 과정을 의미합니다. 이는 서비스 디스커버리(서비스 탐색)의 중요한 부분으로, 분산 시스템 내에서 하드코딩된 구성이 없이도 동적으로 서로를 찾고 통신할 수 있도록 돕습니다. 아래에서는 주요 개념과 예시를 통해 자세히 설명하겠습니다.주요 개념서비스 디스커버리 (Service Discovery)광고(Advertising): 애플리케이션이 시작될 때, 자신이 제공하는 서비스의 위치(예: IP 주소와 포트)와 관련된 메타데이터(서비스 종류, 버전 등)를 서비스 레지스트리나 디스커버리 서비스에 등록함으로써 자신의..
주로 분산 시스템이나 클러스터 환경에서 발생할 수 있는 문제 중 하나이다. 스플릿 브레인(Split Brain)이란?네트워크 파티션이나 통신 장애로 인해 클러스터가 두 개 이상의 독립된 부분으로 나뉘어 각각이 전체 시스템의 일원으로 인식하는 상황을 말한다. 이로 인해 각 부분들이 독립적으로 동작하면서 데이터 불일치, 중복 처리, 시스템 충돌 등의 문제가 발생할 수 있다.단어를 느낌대로 이해해보면 될 듯 하다. 뇌가 절반 쪼개져서 좌뇌 우뇌가 서로 자기만이 시스템을 담당하는 뇌라고 착각에 빠지는 것이다. 스플릿 브레인의 원인1. 네트워크 파티션클러스터 내 노드 간의 네트워크 연결이 끊어지거나 지연되어 노드들이 서로를 인식하지 못하게 될 때 발생한다. 2. 하드웨어 장애스토리지, 스위치, 라우터 등의 하드웨..