나의 잡다한 노트 및 메모
분산 처리 시스템에서 worker에게 1개의 스레드만 부여하는 이유 본문
하나의 Task 프로세스에서 매우 많은 CPU 자원을 쓰기보다는, 여러 Task 프로세스를 병렬로 띄워 노드 전체(또는 전체 클러스터)의 자원을 고르게 활용하려는 취지
1. Worker마다 스레드를 여러 개 주는 방식의 단점
- 만약 **각 Worker(Task 프로세스)**에 4~8개의 스레드를 부여한다면,
- 동일 노드에서 동시에 돌아가는 여러 Task 각각이 다중 스레드를 사용할 때, 스레드가 경쟁이 심해지고, CPU/메모리 요구량이 기하급수적으로 늘 수 있습니다.
- 특히 자원(특히 Direct Memory, CPU 코어 수)가 제한적인 환경에서는, 스레드가 많아도 실질적인 성능 향상이 크지 않을 수 있고, 오히려 컨텍스트 스위칭, 메모리 부족 등의 문제가 발생합니다.
2. Worker에 1개의 스레드만 주는 이점
- 정확한 자원 제어
- “작은” 단위의 Task(Worker)에게 “확실히 1개 스레드”와 제한된 버퍼만 부여 → 각 Task가 사용할 수 있는 메모리를 명확히 제한할 수 있습니다.
- 이로써 전체 노드(또는 전체 클러스터) 입장에서, Task 개수 × 1 스레드 만큼만 리소스를 예상 가능.
- 여러 Task 동시 실행으로 인한 병렬성 확보
- 한 Task가 “단일 스레드”로 동작해도, 동시에 여러 Task(예: 8개, 16개)를 실행함으로써 노드 전체적으로는 다중 병렬 작업이 수행됩니다.
- 즉, “Task × 1 스레드”가 여러 개 모이면, 노드 전체 스레드 수가 확보되며,
- 각 Task 단위로 철저한 격리(JVM 별도)와 리소스 제한이 가능합니다.
- 간단한 스레드 모델
- Task 입장에서는 “단일 스레드로만 집계/쿼리”를 수행하므로, 복잡한 동시성 이슈가 줄어들고, Debugging이 용이해집니다.
- 대신, Worker(작업 프로세스) 수를 늘려 “분산 스케일아웃”으로 전체 성능을 끌어올리는 분산시스템 철학을 택하는 것이죠.
- 클러스터 규모가 커질수록 유연성 증대
- 스레드 수준의 병렬성보다는, “작업(컨테이너, 프로세스) 수준의 병렬성”을 높이는 전략이, 대규모 클러스터에서 더 유연합니다.
- 예: Kubernetes나 YARN, Mesos 등에서 Worker 컨테이너를 많이 띄우고, 각각 1~2개의 스레드를 주어 관리하면, 노드 전체의 CPU 코어, 메모리 자원을 스케줄링하기가 쉽습니다.
'분산시스템' 카테고리의 다른 글
Eventual Consistency (0) | 2025.02.19 |
---|---|
Service Registry (0) | 2025.01.16 |
Service Discovery란? (1) | 2025.01.16 |
application advertising (0) | 2025.01.15 |
Split Brain이란? (0) | 2025.01.09 |