안녕하세요 강사님
다름이 아니라 제가 요즘 선생님 강의를 듣기전에 가장 원초적인 문제부터(회사개발일) 해결하고자 도움되는 강의를 선생님!
강의에서만 최대한 찾아보려고 하는데요.
제가 직면한 문제는 다음과 같습니다.
fastapi 로 작성된 API를 gunicorn 을 활용해서 요청을 받고 있습니다.
다만 현재 서버에서 해당 API 가 Long Running Task
이다보니 gunicorn 이 원하는대로 돌아가지 않거나 중간에 죽어버리는 상황이 발생 하더라고요.. 아마 여러 고질 적인 문제가 있다고 생각합니다. 그래서 여러 gunicorn 설정을 수동으로도 커스텀해보고 서버 자원 할당도 조정해봤지만 해결 법을 아직 찾지 못해서 이렇게 선생님 강의를 활용해 도움될 수 있는 방법들이 있을까 찾고 있습니다.
현재 분산 처리 시스템을 활용하여 해당 API 요청을 개선해보려고 여러 테스트를 진행중입니다.
강의와 다른 질문을 드려 죄송합니다.
읽어주셔서 감사합니다.
안녕하세요,
흠 제 생각에는
gunicorn
이 중간에 타임 아웃이 되거나, 계산중에 OOM(메모리) 이슈가 생기는 거 같은데, 그쪽을 확인해 보세요. 그리고Long Running Task
는 API로 바로 실행하지 마시고, Request는 받고 저장하신 후에Celery
나Airflow
같은 걸로 스케쥴해서 따로 돌리세요(참고로 Airflow 강의도 개설했습니다 ㅎㅎ)도움이 되셨으면 좋겠네요 ㅎㅎ
답글
Cooper Ben
2023.08.30답변 감사합니다 ㅎㅎ
근데 강사님의 답변중에
Request는 받고 저장하신 후에 Celery 나 Airflow 같은 걸로 스케쥴해서 따로 돌리세요
는 어떤 이유에서 스케쥴로 따로 돌리라고 하신건지 궁금한데 알 수 있을까요?ps. Aireflow 강의 신설된걸 지금 봤네요 ㅠㅠ 감사합니다
미쿡엔지니어
2023.08.30앗, 제가 너무 내용을 간략하게 말했나보네요. 예를 들자면, 이번 달이 다 지나가는데, 이번 달에 모든 이벤트를 이벤트 별로 묶어서 카운트를 해달라고 하자면, API로 바로 대답하는데 한계가 있습니다(물론, Cache로 미리 준비해 놓는 경우를 제외하고 말입니다.)
이럴 때는, 그러한 요청을 하나의 Task로 데이타 베이스나 Kafka에 저장한 후에, Airflow같은 스케쥴러나, Kafka topic을 듣고 있는 consumer가 오프라인으로 그 요청을 따로 돌려서 그 결과 값을 보내주는 것을 추천드립니다. 그 사이에 API는 현재 진행중이라는 Status를 요청자에게 보내주고요.
답변이 되었을까요? :D
Cooper Ben
2023.08.30네, 정말 이해 쉽게 설명해주셔서 감사합니다 ㅎㅎ
미쿡엔지니어
2023.08.30감사합니다! 끊김 현상은 개선 되었나 보네요 ㅎㅎ 혹시나 해서 저도 지금 들어봤는데, 크롬에서는 이상이 없는 듯 합니다. 제 생각에는 인프런 네트워크에 문제가 잠깐 생기지 않았나 싶네요. 문제 있으면 언제든지 메세지 남기세요.