작성
·
214
1
강의에서는 1개의 Queue에 1개의 celery서버가 할당되어 있는 구조인데요. 1개의 Queue에 여러대의 celery 서버가 할당되어 있는 구조도 문제없는 구조 일까요?
예를 들어 celery 3대의 서버가 모두 대기상태일때 동일한 queue를 바라보면 메세지가 하나 날라왔을 때 동시에 3대의 celery 서버가 같은 큐를 처리할 것 같아서요.
그리고 같은 task에 대해서 queue 여러개로 로드밸런스하고 싶다면 어떻게 하는게 좋을까요?
답변 1
0
안녕하세요 김태규님,
한개의 큐에 여러개의 Celery를 묶어서 사용가능합니다. 실전에서는 다 그렇게 사용합니다.
그리고 대부분의 경우 큐를 여러개로 로드밸런스 하는 경우는 극히 드문 경우인데, 그럴 경우에는 몇개의 프로젝트나 서비스 별로 큐와 Celery를 나누어서 쓰시면 됩니다.
Redis안에 큐가 여러개가 있어도 태규님이 그 큐를 지정하실 수 있습니다.
그리고 메세지가 여러개 오더라도, 하나의 Celery가 하나의 메세지를 받아서 처리하기 때문에 하나의 메세지를 여러개의 Celery가 중복적으로 처리하지는 않습니다.
Task1이 queue1로 왔다고 한다면, queue1를 celery 1,2,3이 할당되어있다면 task1을 celery 1,2,3이 처리하더라구요. 총 3번이 처리가 되네요!
호음??? 그럴리가 없을텐데요 ㅎㅎㅎ
제가 한번 확인해 보겠습니다. 기본적으로 Celery Broker가 Task Queue를 관리하는데, 특별히 다르게 세팅하지 않는 이상 하나의 Task는 하나의 Worker에 Assign됩니다.
큐가 redis가 아니라 redis안의 큐를 말하는 거였는데 그렇게하면 큐에 메시지가 왔을때 여러대의 celery가 동시에 가져가서 처리하는 거 같아서요.