티스토리 뷰

반응형

서론

argo workflow를 사용하면서, airflow 개발자분들과 서로의 워크플로우 툴이 훨씬 편하다 라는 언쟁이 붙었습니다. argo workflow 는 그 자체가 k8s 를 이용하는 것이라, k8s 에 좀더 친화적이라고 열심히 어필했지만, airflow 에도 k8s 를 지원하는데?? 라고 하니까 말문이 막히더군요.

아니 그러니까 일반인 토니스타크가 아크리액터를 손에 들고 다니기 vs 아크리액터 심장 토니스타크 둘중에 누가 쎄겠냐구요!!!!!!! 아무튼 k8s 이용한 워크플로 툴로는 argo 승이라 생각합니다.. 아무튼 흠흠,, 그런데 막상 우리 툴이 더 좋아~ 라고 하기엔 생각보다 지식이 빈약하더군여

그래서 이번에 준비했습니다. airflow 와 argo workflow 를 한 번 비교해보겠습니다. (절대 우리 꼴뚜기,,, 바람개비보다 귀여워요 에서 이기기 위함은 아닙니다) 틀린내용이 있으면, 자유롭게 코멘트해주세요.

이 내용에 대해서는 상당한 논의가 있습니다.
심지어 공식 argo 깃헙에도 링크되어있는 이야기중에 하나이니, 이미 숙련자라면, 또 하나의 정리글(?) 이구나 정도로 받아들여주시면 좋을 것같습니다.

공식 argo 깃헙에도 링크된 airflow 비교

Workflow management system ( a.k.a workflow tool )

what is workflow tool

우선 그래, 이 씹덕들아 둘다 그게 뭔데;;; 말하고 가라고 하실 분들을 위한 기초 개념부터 잡고 가겠습니다.

  1. airflow, argo workflow 는 둘다, 일종의 워크플로 관리 시스템입니다.
  2. 워크플로 관리 시스템 ( WfMS 또는 WFMS )은 워크플로 응용 프로그램 으로 배열된 정의된 작업 시퀀스의 설정, 성능 및 모니터링을 위한 인프라를 제공 합니다 .
  3. 워크플로 응용 프로그램 은 프로세스 또는 프로세스를 어느 정도 자동화 하는 소프트웨어 응용 프로그램 입니다. 프로세스는 일반적으로 비즈니스와 관련되어 있지만 소프트웨어 를 통해 일련의 단계를 자동화해야 하는 모든 프로세스가 될 수 있습니다.

잘,, 와닿지 않을 수 있습니다.(제가 그렇거든요.)

사실 제가 생각했을때, 이런 워크플로 관리툴들이 가장 많이 사용되는 쪽은 데이터분야 ETL 개발할 때 많이 이용됩니다.

저희가 웹이나 앱에서 사용자들의 로그들을 모아 (raw data extract) → 우리에게 필요한 정보 모양으로 변형하여(transform) → 저장하는 (load) 이러한, etl 과정에서 보면, 앱로그에서 우리가 필요한 정보를 저장하기 라는 한 개의 목표를 위해 필수적으로 → 이러한 검은 화살표와 같은 일련의 태스크의 순서들이 필요하게 됩니다.

이러한 순서들의 흐름으로 하나의 목표를 수행하는 것을 하나의 “워크플로우" 라고 하고, 이러한 워크플로우들이 개발자가 정해놓은 간격 (1일에 1번, 1주일에 1번..) 으로 수행되게 예약하기, 그리고 그것들이 잘 동작했는지, 모니터링 가능한, 그런 툴이 워크플로우 관리 시스템입니다.

물론 데이터쪽에서만 아니라, 다양하게, 이용될 수 있습니다.

예를 들어, mysql 에서 hadoop 으로 sqoop 을 하는 작업도 매일 잘 작동했는지 확인하는 곳이나, 배포 작업이 복잡해서 순차적으로 적용하고 싶은 경우 등, 오늘 하루만 할 예정인 단일성 작업이 아니라고 판단되는 때에 이용할 수 있습니다.

DAG

워크플로우 이야기를 할때, 항상 나오는 개념이라서 해당 이야기를 넣었습니다.
DAG 는 directed acyclic graph 의 약자로 순환형이 아닌, 유향 비순환그래프를 의미합니다.
해당 이야기는, 무슨 의미가 있냐, 고 하면, 순환이 아닌 유향 그래프 전체를 의미한다는 것에 의의가 있습니다.
즉, 엄마의 형제 같은 구조가 있을 수 있다! 라는 거죠.
이렇게 여러 작업이 있을때, 병렬 작업까지 가능하다 ? ⇒ 시간 단축 개꿀! 이라는 것입니다.

dag

그외 알아두면 좋은 대략적인 워크플로우 툴들의 내부 구조

공통적으로 워크플로우툴에서 제공해야하는 내부 구조는 크게 이렇게 볼 수 있을 것 같습니다. (각각의 세부 워크플로우 툴에 예외가 있을 수 있습니다.

  • UI server: 제 파이프라인 상태를 보기 위해서는 ui 가 필요하죠
  • 스케줄러: 제가 예약한 시간에 해당 워크플로를 동작시키기 위해서는, 일종의 매 시간마다 워크플로를 작동시키고, 잘 작동하고 있는지 체크하는 스케줄러가 필요합니다.
  • 메타데이터 저장소: 해당 워크플로우가 동작여부, 예약된 워크플로를 찾기 위해서는 메타데이터 저장소가 필요합니다.
  • worker, worker queue: 각각의 워크플로 안에 해당 태스크를 실행시키고, 해당 태스크가 잘 작동하고 있는지 여부를 전달할 worker 와 병렬 작업을 제공하기 위해서는 worker queue 가 필요해보입니다.

airflow architecture

https://airflow.apache.org/docs/apache-airflow/stable/concepts/overview.html

argo workflow architecture

https://argoproj.github.io/argo-workflows/architecture/

workflow tool 종류

더 다양한 툴이 있겠지만, github star 히스토리로 유명한 workflow 툴을 비교해보면 이러한 양상을 보입니다.

github star 히스토리로 유명한 workflow 툴을 비교

 

https://star-history.com/#argoproj/argo-workflows&apache/airflow&mlflow/mlflow&spotify/luigi&apache/oozie&kubeflow/kubeflow&Date

https://towardsdatascience.com/airflow-vs-luigi-vs-argo-vs-mlflow-vs-kubeflow-b3785dd1ed0c 이 블로그의 workflow 툴 비교를 인용하자면,

  • 가장 완전한 기능을 갖춘 성숙한 도구를 원하고 작동 방식, 설정 및 유지 관리에 시간을 할애할 수 있는 경우 Apache Airflow 를 사용하길 권장합니다.
  • Airflow보다 학습 곡선이 더 쉬운 무언가가 필요한 경우 Luigi . 기능은 더 적지만 지상에서 벗어나기가 더 쉽습니다.
  • 이미 Kubernetes 에코시스템에 깊이 투자했고 모든 작업을 Pod로 관리하고 Python 대신 YAML로 정의하려는 경우 Argo 를 사용합니다.
  • Kubernetes를 사용하고 싶지만 YAML 대신 Python으로 작업을 정의하려는 경우 KubeFlow 를 이용하는 것 또한 방법입니다.
  • 기존 사용자 지정 워크플로에 적응할 수 있는 도구를 찾는 것보다 MLFlow의 사전 정의된 패턴을 사용하여 실험 추적 또는 모델 추적 및 배포에 더 관심이 있는 경우 MLFlow 를 선택합니다.

라고 합니다.


Argo workflow

  • lntuit( Applatex )에서 유래된 오픈소스입니다.
    • 오픈소스이다 = 무료다! 👍🏼
  • Argo Workflows는 Kubernetes 위에 구축되어있습니다=k8s native 합니다.(CRD + controller)
  • golang 으로 이뤄져있습니다.
  • DAG of containers(any language) : container 내부에는 어떤 언어로 이뤄져있어도관계없습니다.
  • Argo Workflows를 사용하면 조직에서 YAML 을 사용하여 작업을 DAG로 정의할 수 있습니다
  • 확장성:
    • Argo Workflows는 높은 안정성을 위한 강력한 재시도 메커니즘을 가지고 있으며 확장성이 뛰어납니다. 수천 개의 포드와 워크플로를 병렬로 관리할 수 있습니다.

argo workflow in kubeflow

kubeflow 의 많은 기능중에, workflow orchestration 기능의 경우, argo workflow 를 통해 구현하였습니다.

참고문헌에 출처가 있습니다.

Airflow

https://airflow.apache.org/

  • Apache Airflow 는 저작, 예약 및 모니터링 워크플로를 위한 잘 알려진 오픈 소스 자동화 및 워크플로 관리 플랫폼입니다.
  • 표준 Python 프로그래밍 언어의 DAG ( Directed Acyclic Graphs )로 워크플로를 작성할 수 있습니다.
  • Airflow는 또한 실시간으로 워크플로를 모니터링할 수 있는 다양한 도구와 함께 대화형 인터페이스를 제공합니다.
  • 현존하는 workflow 툴중에 가장 오래되었고, 가장 huge community를 가지고 있습니다.

Argo 대 Airflow: 주요 비교 포인트

이제 두 플랫폼에 대한 기본적인 이해를 하였으므로 Argo와 Airflow의 일대일 비교에 대해 알아보도록 하겠습니다. Airflow와 Argo를 사용하면 워크플로를 DAG로 정의할 수 있지만 요구 사항에 적합한 플랫폼을 선택하는 데 중요할 수 있는 두 플랫폼의 작동 방식에 몇 가지 차이점이 있습니다.

공통점

  • 둘다, ui(웹서버 모니터링) , 예약 기능을 제공합니다.
  • 또한, airflow 에서도, k8s operator 를 이용할 수 있고, argo workflow 는 k8s 의 커스텀 버전이므로, k8s 에서 이용가능합니다.
  • argo event = airflow sensor
  • 그리고 loop, jinja 템플릿 등을 이용해 , dag 를 좀더 flexible 하게 작성할 수 있게 도우려합니다.

차이점

  • 성숙도 차이 : airflow win!
    • 무시 못합니다. airflow 검색했을때, 나오는 것에 비해, argo workflow 의 경우, 아무리 도큐먼트가 잘되어있다고 해도, 그 검색량, 지식량에 대해서는 현저한 차이가 있습니다. 다른, argo cd 를 제외한 argo event 나, argo rollout 등에 대해서는 상태가 더 안좋을 것으로 예상됩니다.
  • 워크플로 언어 : airflow 비등 argo
    • airflow : python
      • Python에 대한 기본적인 기본 지식만 있으면 코드를 작성하고 복잡한 파이프라인과 워크플로를 단순화하기에 충분합니다. Python 기반 API는 엄청난 인기와 적응성의 주요 이유 중 하나입니다.
    • argo : yaml
      • (-) Argo YAML과 같은 구성 언어보다는 코드로 표현됩니다. yaml 은 이게, 띄워쓰기랑 - 가 중요한데, 복잡해지면 진짜 개 헬이기때문에 감점했습니다.
      • (+)하지만, Python plugin을 이용하면, argo 를 파이썬으로 작성할 수 있습니다.(물론 조금 제한될 수 있습니다.)
      • (+) yaml 로 작성하면, 물론, k8s 에 원하는 스펙을 좀더 직관적으로 제공할 수 있습니다.
  • 확장성 : argo win! (사실상, k8s 그 자체.)
    • Airflow 는 수평 확장성 을 지원하며 여러 스케줄러를 동시에 실행할 수 있습니다. 작업과 관련하여 Airflow는 작업을 실행하기 위해 전용 작업자 풀에 의존합니다. 따라서 최대 작업 병렬 처리는 활성 작업자 수와 같습니다.
    • Argo 는 각 작업을 별도의 Kubernetes 포드로 실행하므로 수천 개의 포드와 워크플로를 병렬 로 관리할 수 있습니다. Airflow와 달리 워크플로의 병렬 처리는 Argo의 고정된 작업자 수에 의해 제한되지 않습니다. 따라서 시퀀스 및 병렬 단계 종속성이 있는 작업에 가장 적합합니다.

“Argo workflow” vs “Airflow k8s operator”

구조

아키텍처 비교 (제가 그렸어요 두번 보세요!!!)

https://github.com/argoproj/argo-workflows/blob/master/workflow/controller/agent.go

  • Airflow 에는 워크플로의 일부로 pod를 실행하는 데 사용할 수 있는 Kubernetes operator가 있습니다. 그러나 다른 리소스 생성(database,sheduler, )에 대한 지원은 없습니다.
  • Argo 는 Kubernetes 위에 구축되었으며 각 작업은 별도의 Kubernetes 포드로 실행됩니다. Argo는 포드 및 배포와 같은 Kubernetes 개체에서 CRUD 작업을 수행하기 위한 탁월한 지원 시스템을 갖추고 있습니다.

여기서 차이가 발생하는데, 굳이 k8s의 자원에서 충분히 지원가능한 메타데이터 db 기능이나, sheduler 기능을 굳이 , Airflow 를 써서 관리를 해야하는 것과 k8s 자원에서 하는 것이 아닌 만큼의 git sync 과정에서 어느정도 어려움이 있었던 것 같은데, git 과 k8s 를 이용하기로 한 환경에서는 argo workflow 를 이용하는 것이 좋지 않을까요? 라는 것이 소심한 저의 견해입니다.. Argo workflow 와 Airflow on k8s 를 비교하는 것은 k8s vs Airflow on k8s 와 같으니까요


Result

Airflow는 더 다재다능하고, 화력이 좋습니다. Argo는 타사 서비스와의 상호 작용 측면에서 다소 제한된 유연성을 제공합니다(다른 말로 이게 왜 안돼 가 있을 수 있단 말이겠죠). 대부분의 인프라에 이미 Kubernetes를 사용하고 있다면 작업에 Argo를 사용하는 것이 좋습니다.

닫는 말

확실한건, argo 제품군을 더 잘 이용하기 위해서는 go 공부를 하는 것이 제일 도움이 될 것 같습니다.(투덜투덜) 이놈의 꼴뚜기는 하면할수록 좋은데, airflow 랑 비교하면, 설명이나 화력 쪽에서 아쉬운 부분이 있네요

이렇게 argo workflow 와 airflow , 그리고 대략적인 workflow management 시스템에 대해 알아보았습니다. 어떠셨나요? 혹시 argo.. 한번 저 꼴뚜기,,, 써봐? 라는 생각이 드시나요?!

후후후 다음 글에서 뵙겠습니다.

 


참고 문헌

반응형

'argo' 카테고리의 다른 글

Argo Event 의 개념과 아키텍처  (2) 2022.06.11
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함