인프런 커뮤니티 질문&답변

태규 김님의 프로필 이미지
태규 김

작성한 질문수

실리콘밸리 엔지니어와 함께하는 샐러리(Celery)

Task Routing에 대해 알아보기

Task Routing 부분 보니까요

작성

·

214

1

강의에서는 1개의 Queue에 1개의 celery서버가 할당되어 있는 구조인데요. 1개의 Queue에 여러대의 celery 서버가 할당되어 있는 구조도 문제없는 구조 일까요?

예를 들어 celery 3대의 서버가 모두 대기상태일때 동일한 queue를 바라보면 메세지가 하나 날라왔을 때 동시에 3대의 celery 서버가 같은 큐를 처리할 것 같아서요.

 

그리고 같은 task에 대해서 queue 여러개로 로드밸런스하고 싶다면 어떻게 하는게 좋을까요?

답변 1

0

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

안녕하세요 김태규님,

한개의 큐에 여러개의 Celery를 묶어서 사용가능합니다. 실전에서는 다 그렇게 사용합니다.

그리고 대부분의 경우 큐를 여러개로 로드밸런스 하는 경우는 극히 드문 경우인데, 그럴 경우에는 몇개의 프로젝트나 서비스 별로 큐와 Celery를 나누어서 쓰시면 됩니다.

태규 김님의 프로필 이미지
태규 김
질문자

IMG_1312.jpeg큐가 redis가 아니라 redis안의 큐를 말하는 거였는데 그렇게하면 큐에 메시지가 왔을때 여러대의 celery가 동시에 가져가서 처리하는 거 같아서요.

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

Redis안에 큐가 여러개가 있어도 태규님이 그 큐를 지정하실 수 있습니다.

그리고 메세지가 여러개 오더라도, 하나의 Celery가 하나의 메세지를 받아서 처리하기 때문에 하나의 메세지를 여러개의 Celery가 중복적으로 처리하지는 않습니다.

태규 김님의 프로필 이미지
태규 김
질문자

Task1이 queue1로 왔다고 한다면, queue1를 celery 1,2,3이 할당되어있다면 task1을 celery 1,2,3이 처리하더라구요. 총 3번이 처리가 되네요!

미쿡엔지니어님의 프로필 이미지
미쿡엔지니어
지식공유자

호음??? 그럴리가 없을텐데요 ㅎㅎㅎ

제가 한번 확인해 보겠습니다. 기본적으로 Celery Broker가 Task Queue를 관리하는데, 특별히 다르게 세팅하지 않는 이상 하나의 Task는 하나의 Worker에 Assign됩니다.

태규 김님의 프로필 이미지
태규 김
질문자

저도 한 번 다시 확인해보겠습니다 ㅎㅎ

태규 김님의 프로필 이미지
태규 김
질문자

로그를 따로 저장해놓고 확인하는데 로그 상의 오류로그렇게 보였던 것 같습니다. 각 worker가 독립적으로 1개의 task만 처리하는게 맞는거 같습니다.

태규 김님의 프로필 이미지
태규 김

작성한 질문수

질문하기