데이터베이스 설정 가져오기 시 캐싱 관련 질문 있습니다
안녕하세요, 좋은 강의 감사드립니다.
강의 내용 중 DAG Top-Level에서 캐싱을 사용해 DB 설정 조회 시 스케줄러 DAG 파싱 리소스를 절약할 수 있다는 부분에 대해 질문이 생겨 글을 남깁니다.
제가 알기로는 Airflow 스케줄러(DagFileProcessorManager)가 주기적으로 DAG를 파싱할 때, 각 DAG 파일마다 새로운 자식 프로세스(PID)를 포크(Fork)하여 처리를 위임하고 파싱이 끝나면 해당 프로세스를 종료하는 것으로 알고 있습니다.
그렇다면 파이썬 메모리에 상주하는 @lru_cache 의 경우, 프로세스가 종료되면 캐시도 함께 사라지게 되어 다음 파싱 주기 때는 캐시 히트가 발생하지 않고 매번 DB에 새로 쿼리를 날리게 되지 않나 생각이 듭니다.
제가 Airflow 스케줄러의 파싱 프로세스 메커니즘을 잘못 이해하고 있는 부분이 있는지 궁금합니다.
만약 제 생각이 맞다면, 현업에서 이처럼 외부 DB 설정을 기반으로 DAG나 Task를 동적으로 생성할 때 스케줄러 부하를 줄이기 위해 주로 어떤 방식 캐싱 또는 시스템을 활용하시는지 조언을 구하고 싶습니다.
감사합니다!
# lru-cache
# 데이터베이스에서 설정 가져오기 (간단히 표현)
def get_configs_from_db():
return [
{"name": "customer_sync", "schedule": "0 1 * * *"}, {"name": "sales_sync", "schedule": "0 2 * * *"}
]
回答 1
0
안녕하세요 sejeong1108님 질문 주신 부분이 맞습니다.
말해주신 내용대로 자식 프로세스르 관점으로 띄우기 때문에, DAG 파일 하나당 별도 프로세스로 파싱하고, 끝나면 종료를 하게 됩니다. 즉 그래서 모듈 레벨에서의 @lru_cache 라는 애는 파싱 주기간에는 보존이 안되요.
대신 단일 파싱 사이클에서는 캐시가 유호할겁니다. 예를들어 한 DGA 파일 안에서 같은 설정 조회 함수를 여러 DAT/Task 루프에서 호출을 한다면, 한번만 DB에 가고 캐시에서 처리를 하는거죠
SingleFlight라는 패턴 공부해보시면 좋을꺼같아요.
음 추가로 현업에서 자주 사용하는 패턴에서 효과가 좋을만한것들만 우선적으로 나열해보자면,
파일 기반 캐시 -> 별도 스케줄러가 주기적으로 DB -> 로컬 파일로 덤프하고 DAG 파싱을 진행할떄는 이 파일을 읽는다.
Redis 등등 -> 프로세스가 죽어도 외부 소스를 통해서 캐싱을 처리가능
DAG 파일 자체를 사전에 생성 -> CI/CD나 별도 Job이 DB 설정을 읽어서 이걸 기반으로 .py 파일을 만든다. 근데 이거는 사실 좀 어렵습니다. (대신 동적인 DAG 가 많은 경우에 좋겟죠 )
이정도가 있을꺼 같아요. 질문 감사합니다!
astro dev init 에 Dockerfile 버전 고정 방법 문의
0
10
2
astro dev start - python 라이브러리 설치 fail
0
47
1
astro project 실무 적용 질문
0
57
1
pykrx 회원제 전환으로 인한 실습 불가
0
115
2
48강 csv
1
73
2
강사님의 로그포맷과 저의 로그포맷이 차이가 있는것 같습니다.
0
82
3
7 강에서 astro dev start를 하는데, localhosst8080화면이 안뜹니다
0
73
2
astro dev start에서 building 시간이 깁니다.
0
70
2
수료증 발급
0
84
3
에러 발생 관련 질문드립니다.
0
85
2
vscode 작업화면에 오류가 발생하지 않습니다.
0
72
2
plugins 폴더 생성
0
77
2
WSL에서 git push 가 안되요 ㅠ
0
118
2
chatGPT&Airflow로 블로그 자동 포스팅하기 는 Deprecated 가 필요합니다.
0
68
2
github에 회원가입이 안되는데 원인이 뭔지 모르겠어요 ㅠ
0
742
2
자료 다운로드 하면 링크가 모두 클릭이 안됨
0
107
2
apache airflow 설치하기 질문
0
88
2
강의에서사용하신 root.py 파일이 안보여서 실습하면서 만든 텍스트 공유 드려요
0
128
7
48강 강의 여전히 49강과 같은 강의가 나옵니다
0
105
3
설치중인데 venv를 꼭 써야할까요?
0
127
2
설치 버전 관련 질문입니다.
0
68
1
우분투 버전 다운받아야하는데 어떤걸로 설치해야할까요?
0
62
1
forloop으로 task 정의시 task_id 정해지는 로직
0
100
3
실습환경에 대해 질문이 있습니다!
0
74
2

