나의 잡다한 노트 및 메모

분산 처리 시스템에서 worker에게 1개의 스레드만 부여하는 이유 본문

분산시스템

분산 처리 시스템에서 worker에게 1개의 스레드만 부여하는 이유

peanutwalnut 2025. 3. 10. 15:21

하나의 Task 프로세스에서 매우 많은 CPU 자원을 쓰기보다는, 여러 Task 프로세스를 병렬로 띄워 노드 전체(또는 전체 클러스터)의 자원을 고르게 활용하려는 취지

 

1. Worker마다 스레드를 여러 개 주는 방식의 단점

  • 만약 **각 Worker(Task 프로세스)**에 4~8개의 스레드를 부여한다면,
  • 동일 노드에서 동시에 돌아가는 여러 Task 각각이 다중 스레드를 사용할 때, 스레드가 경쟁이 심해지고, CPU/메모리 요구량이 기하급수적으로 늘 수 있습니다.
  • 특히 자원(특히 Direct Memory, CPU 코어 수)가 제한적인 환경에서는, 스레드가 많아도 실질적인 성능 향상이 크지 않을 수 있고, 오히려 컨텍스트 스위칭, 메모리 부족 등의 문제가 발생합니다.

 

2. Worker에 1개의 스레드만 주는 이점

  1. 정확한 자원 제어
    • “작은” 단위의 Task(Worker)에게 “확실히 1개 스레드”와 제한된 버퍼만 부여 → 각 Task가 사용할 수 있는 메모리를 명확히 제한할 수 있습니다.
    • 이로써 전체 노드(또는 전체 클러스터) 입장에서, Task 개수 × 1 스레드 만큼만 리소스를 예상 가능.
  2. 여러 Task 동시 실행으로 인한 병렬성 확보
    • 한 Task가 “단일 스레드”로 동작해도, 동시에 여러 Task(예: 8개, 16개)를 실행함으로써 노드 전체적으로는 다중 병렬 작업이 수행됩니다.
    • 즉, “Task × 1 스레드”가 여러 개 모이면, 노드 전체 스레드 수가 확보되며,
    • 각 Task 단위로 철저한 격리(JVM 별도)와 리소스 제한이 가능합니다.
  3. 간단한 스레드 모델
    • Task 입장에서는 “단일 스레드로만 집계/쿼리”를 수행하므로, 복잡한 동시성 이슈가 줄어들고, Debugging이 용이해집니다.
    • 대신, Worker(작업 프로세스) 수를 늘려 “분산 스케일아웃”으로 전체 성능을 끌어올리는 분산시스템 철학을 택하는 것이죠.
  4. 클러스터 규모가 커질수록 유연성 증대
    • 스레드 수준의 병렬성보다는, “작업(컨테이너, 프로세스) 수준의 병렬성”을 높이는 전략이, 대규모 클러스터에서 더 유연합니다.
    • 예: 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