[CodeMania101] Intro to Airflow: Good bye Cron

สำหรับ Session นี้เป็น ส่วนหนึ่งที่ทำให้ผมอยากมางาน CodeMania 101 ครับ เนื่องจากตัวเองมีงานทำให้ Python ทำผ่าน Cron เหมือนกันครับ มาเข้าเรื่องเลยดีกว่า สำหรับการ Interface ในยุคก่อน จนมาถึงยุคของ Data ที่มันเยอะมากจน เราต้องทำ Extract Transform Load เพื่อสกัดปรุงแต่ง ทำข้อมูลให้สะอาดพร้อมใช้ครับ ซึ่งงานในแต่ละ Task เรากำหนดให้มันทำงานต่อเนื่องกันได้ด้วย CRON

ซึ่งเจ้า CRON เป็น Timed-based job scheduler ครับ ที่มัน Popular มา เพราะมันมี Pattern ที่ง่าย จน Tools หลายๆตัวเอา Pattern นี้ไปใช้ เช่น Jenkins แต่ตัว CRON เอา แม้ว่าช่วยให้เราสบายขึ้นแล้ว แต่มันยังมีปัญหาอยู่ครับ

  • Hard to Manage - เราไม่รู้ว่างานแต่ละชึ้น ทำนานแค่ไหน มีความเกี่ยวข้อง(Dependency) กัน หรือป่าว ? สิ่งที่ทำได้ คือ การกะเวลาครับ ถ้ามันมาก งานทั้งหมดเสร็จข้าลง แต่ถ้ามันน้อยก็ไป งานมันชนกันและครับ
  • Hard to Monitor - สำหรับ Cron เราทำได้แค่สั่ง ถ้าอยากเพิ่ม Feature อื่น สิ่งที่ทำได้ คือ ต้องเขียน Code เพิ่มเข้าไปเองครับ ให้มันแจ้ง E-mail มากครับ (ซึ่งในงานปกติผมก็ทำแบบนั้น 555) หรือกรณีอื่นๆ กว่าเราจะรู้ว่าระบบมันเกิดปัญหาเป็นวันรุ่งขึ้น หรือ หลังจากหยุดยาวครับ
  • Hard to Scale - มันขยายไม่ได้ครับ

แล้วเอาอะไรมาแก้ปัญหาหละ ตามหัวข้อเลยใช้ Airflow โดย Airflow เป็น Workflow Scheduler กำหนดงานเป็นลำดับ โครงนี้เกิดจาก Startup Airbnb จากนั้นโอนมาใช้ Apache ดูแลต่อครับ โดยมีจุดเด่น ดังนี้

  • Python - Configuration as a Code (ถ้าใครจะใช้ ต้องรู้ภาษา Python ก่อน) ทำให้เราสามารถ Monitor จัดการ Task และ Scale ไปได้เลย
  • Easy to Manage - ใช้ Web UI มี Dashboard, Task Visualization จัดการได้ง่าย และมีการแสดง Progress การทำงาน
  • Free
  • DAG - เรามากำหนดความสัมพันธ์ของงานต่างๆ โดยใน Graph แบบ DAG (Directed acyclic graph) ในการแทนค่า เขียนด้วย Python การออกแบบ Workflow สำคัญมาก
    ภาพจาก wiki : https://en.wikipedia.org/wiki/Directed_acyclic_graph
  • Architecture ของตัว Airflow ประกอบด้วย
    ภาพจาก http://site.clairvoyantsoft.com/SETTING-APACHE-AIRFLOW-CLUSTER/

    • Web Server
    • Scheduler - เอาไว้จัดการงาน ส่งให้ worker ต่างๆ ทำงานต่อ
    • Worker - ตัวที่ทำงานจริง โดยสามารถกำหนดให้มัน Scale ได้
  • Executor มี 3 แบบ
    • Sequential Executor - ทำตามลำดับ
    • Local Executor - ทำงานขนานกันได้
    • Celery Executor - Scale ให้ Worker ช่วยๆกันทำงานได้

นอกจาก Airflow แล้วมีอะไรบ้าง lutgt, pinball, azkaban, oozie เป็นต้น สำหรับใครที่ยังงงๆ สามารถดู Slide ของ Speaker น้อง Burasakorn Sabyeying ได้ครับ และมี Facebook Group ด้วยนะครับ