인프런 커뮤니티 질문&답변
Queue 강의를 듣고 난 후에 대한 질의
해결된 질문
작성
·
23
·
수정됨
0
Queue에 대한 질문이 몇가지가 있습니다.
- 큐를 지정할 때는 무조건 큐의 이름을 지정해 줘야 하나요? 자동으로 비어 있는 woker에 큐를 할당하는 방법은 없나요? 
- cpu_intensive라는 woker에 여러개의 큐가 동시에 요청이 왔을 경우 동기적으로 처리하나요? 
- 큐를 생성하면 해당 큐의 물리적 자원은 어떻게 할당 되는 것인가요? 
- 대체로 하나의 DAG에서 강의에 예시와 같이 여러 개의 큐를 사용하는 경우가 있을까요? 
- 워커를 많이 만들어 환경을 구성하는 사례는 어떤 사례가 있는지 알 수 있을까요? 
내용 확인 부탁드립니다.
답변 1
0
안녕하세요 김제원님,
좋은 질문들이 많네요.
큐를 지정할 때는 무조건 큐의 이름을 지정해 줘야 하나요? 자동으로 비어 있는 woker에 큐를 할당하는 방법은 없나요?
=> 꼭 지정할 필요는 없습니다.. BaseOperator(queue="...")를 지정하지 않으면 기본값(default) 큐로 갑니다. Airflow/Celery 설정의 default_queue를 바꾸면 기본 큐 이름을 바꿀 수 있어요.
=> “빈 워커”로의 자동 배정은 큐 단위로만 이뤄집니다. Celery는 “같은 큐를 구독하는(worker -q) 워커들” 사이에서 작업을 분배합니다. “현재 가장 한가한 워커를 자동으로 찾아서” 같은 기능은 같은 큐를 공유할 때에만 자연스럽게 일어납니다(라운드로빈+prefetch 수준).
cpu_intensive라는 woker에 여러개의 큐가 동시에 요청이 왔을 경우 동기적으로 처리하나요?
=> 동기적이라는 말이.. 직렬 처리를 말씀 하시는 건가요? Celery 워커는 기본적으로 worker_concurrency(프로세스/스레드 수)만큼 병렬로 처리합니다. 한 워커가 여러 큐(-q cpu,gpu,io)를 구독하면 각 큐에서 들어온 작업을 하나의 작업 대기열로 합쳐 자신의 동시성만큼 병렬 실행해요. 직렬 처리를 원하신다면, 그 워커를 worker_concurrency=1로 세팅하시면 될 겁니다.
큐를 생성하면 해당 큐의 물리적 자원은 어떻게 할당 되는 것인가요?
=> 큐는 "논리적 라우팅 키"일 뿐, 자원을 직접 할당하지 않습니다. 자원은 Worker에서 알아서 합니다.. 워커 프로세스 수(concurrency), 머신 vCPU/RAM, 컨테이너 리소스 제한(요청/제한), 쿠베라면 노드/네임스페이스 등에서 결정됩니다.
대체로 하나의 DAG에서 강의에 예시와 같이 여러 개의 큐를 사용하는 경우가 있을까요?
=> 가능은 하지만, 너무 많이 하나로 넣는 것은 추천드리지 않습니다.. 일반적으로는 “리소스 클래스별” 소수 큐로 충분합니다. 예를 들면 cpu_intensive, io_heavy, gpu, external_api 이런 식으로 말입니다.
워커를 많이 만들어 환경을 구성하는 사례는 어떤 사례가 있는지 알 수 있을까요?
=> Work Load를 분리할 때 CPU 바운드/IO 바운드/GPU/대용량 메모리 작업을 서로 다른 워커 그룹으로 격리할 때가 있을 수 있겠고 ...멀티 테넌시/팀 분리가 필요할때 팀별 큐/워커로 나눠 소음(노이즈 네이버) 방지 및 운영 책임 분리를 원할때? 쯤이 있을 것 같습니다.






