Chapter 16 스케줄러 부하 줄이기에 관한 질문입니다.
331
작성한 질문수 12
멀티 스케줄러 환경에서, 각 스케줄러는
Dag Parsing
DB에 해당정보를 기록
Scheduler Loop
의 과정을 거친다고 이해했습니다.
여기서, Dag Parsing에 관한 부분은 DB에 관한 정보를 참고해서 하는것이 아닌 코드만을 가지고서 돌려보는 것으로 이해하고 있는데, 그렇다면 1번 과정(Dag Parsing)은 멀티 스케줄러 환경을 구성한다고 해서 시간 단축의 효과를 얻을 수 없는것인가요??
DAG이 10개가 있고, 스케줄러가 두개가 있다면,
1번 스케줄러가 첫번째 DAG를 돌렸고, Lock을 걸은 후, 해당 작업이 큐까지 들어가게 되면 DB에 관한 정보의 Lock을 해제 하나요? 그렇다면 만약 다른 스케줄러가 해당 DAG의 정보를 검색했을때, 해당 DAG에 관한 Scheduler Loop를 돌것이고, 그렇다면 이 상황에서는 멀티스케줄러의 이점을 얻을 수 없는것인지가 궁금합니다.
감사합니다.
답변 1
1
안녕하세요 Hyeonghwan Kwon 님
요약하자면 스케줄러는
DAG Parsing 단계에서는 스케줄러를 N개를 띄운다해서 각 스케줄러의 부하가 1/N로 줄지는 않습니다.
스케줄러는 DAG Parsing을 각자 독립적으로 진행하죠.하지만 Scheduler Loop 단계에서는 스케줄러를 N개 띄우면 각 스케줄러의 부하는 1/N로 줄어듭니다.
Scheduler Loop 단계는 수업에서 설명드렸듯이 실행 준비가 된 DAG에 대해 RUN ID 생성 -->Task를 인스턴스화해서 Celery 큐에 넣어 실행되도록 하죠.
그리고 이 과정에서 메타 Database 테이블에 Lock을 걸어놓음으로써 다른 스케줄러가 중복처리되지 않도록 합니다.
따라서 이 단계에서는 선형적이지는 않겠지만 스케줄러가 많으면 많을수록 스케줄러당 부하가 감소될 수 있습니다. 물론 파라미터들을 조정하면서 실험적으로 테스트해봐야 합니다 (max_dagruns_to_create_per_loop, max_dagruns_per_loop_to_schedule)
추가로 질문주신 아래 내용에 대해서는
1번 스케줄러가 첫번째 DAG를 돌렸고, Lock을 걸은 후, 해당 작업이 큐까지 들어가게 되면 DB에 관한 정보의 Lock을 해제 하나요? 정확히 언제 Lock을 해제하는지 문서에 나와있지는 않습니다만, RUN ID를 만들어 메타 database table 에 insert하고 task instance 도 database table에 insert 가 완료될 때까지만 Lock이 유지되지 않을까 합니다. task가 수행중일 때는 lock이 해제될 것으로 생각되는데요.
task는 수행되면서 여러 status를 가집니다. queued --> running --> success or failed 등의 상태를 가지지요. 각 상태가 바뀔때마다 스케줄러가 메타 테이블에 update를 수행합니다.
보통 Application을 작성할 때 row의 상태가 변할때에만 lock을 걸고 DML을 수행합니다.
즉 첫 Insert 단계에서 Lock 수행 --> Insert --> Lock 해제 --> Task의 상태가 변할때마다 Lock --> update --> Lock 해제 이런식으로 동작하지 않을까 싶네요.
궁금하신게 해결됐으려나요? ^^
0
다시 생각해보니, 질문하면서 scheduler와 worker의 동작에도 약간이 혼동이 있었던것 같은데, 핵심만 짚어서 잘 설명해주셔서 감사합니다!!.
0
네 Celery Executor 에서 워커는 스케줄러의 존재를 모릅니다. Celery 큐(redis)를 통해 지시된 작업만 처리한다고 보시면 되요.
늦은시간까지 열공하시네요.
화이팅입니다 ^^
pykrx 회원제 전환으로 인한 실습 불가
0
109
2
수료증 발급
0
81
3
에러 발생 관련 질문드립니다.
0
82
2
vscode 작업화면에 오류가 발생하지 않습니다.
0
69
2
plugins 폴더 생성
0
74
2
WSL에서 git push 가 안되요 ㅠ
0
112
2
chatGPT&Airflow로 블로그 자동 포스팅하기 는 Deprecated 가 필요합니다.
0
66
2
github에 회원가입이 안되는데 원인이 뭔지 모르겠어요 ㅠ
0
723
2
설치중인데 venv를 꼭 써야할까요?
0
124
2
설치 버전 관련 질문입니다.
0
68
1
우분투 버전 다운받아야하는데 어떤걸로 설치해야할까요?
0
62
1
DAG 만들기 중 airflow 패키지 로드 에러
0
106
2
3.0에서도 수업노트가 성립하는지 확인 부탁드립니다!
0
95
3
task_id 사용법이 뭔가 바뀐 것 같습니다.
0
76
3
email operator 오류 관련
0
66
2
plugins 폴더 관련
0
96
2
bash operator 관련 문의입니다
0
78
3
스케쥴러 - DAG 파싱 부하 줄이는 과정 질문
0
79
2
Dags refresh 주기 관련 질문
0
123
2
wsl 관련 질문입니다.!
0
73
2
macOS에서 docker 설치
0
93
2
템플릿 변수에 대한 오류
0
61
2
custom_image 디렉토리 문의드립니다.
0
54
2
ETL 인터뷰 관련 문의
0
103
2





