Lessons Learned From Running Apache Airflow at Scale

ไปเจอมาจาก hackernews frontpage (ติดหน้าแรก แสดงว่ากระทู้ดี)

discussion น่าสนใจมาก

เพื่อนๆ ที่ใช้ airflow เจออะไรกันมาบ้าง มาแลกเปลี่ยนกันๆ (ส่วนตัวเริ่มมาก็ dagster เลย ไม่เคยใช้ airflow :joy: )

3 Likes

Thread คุยกันยาวมากครับ ฮ่า ๆ ดูสนุกสนานดี เดี๋ยวไปตามอ่านต่อ กราบขอบคุณที่มาแชร์ให้อ่านครับบบ :heart_eyes:

ปัญหากวนใจหลัก ๆ เลยมีประมาณนี้

  • เวลาที่เราปรับ version ของ DAG (สร้าง DAG ใหม่ ลบ DAG เก่า) ตัว DAG runs มันจะ stale แล้วก็ต้องมานั่ง clean ตัว database ของ Airflow เอง (Airflow metadata)
  • เวลาที่มี DAG runs เยอะ ๆ หน้า Web UI ก็ช้ามาก เมื่อก่อนคือหน้า Tree View ตอนนี้เปลี่ยนเป็น Grid View แล้วในเวอร์ชั่น 2.3 ซึ่งเร็วขึ้นเยอะเลย แต่ก็ยังรู้สึกหน่วง ๆ อยู่ดี
  • เคยพ่น log ออก S3 แล้ว ปัญหาคือ ช้า~ กว่าจะโหลดขึ้นมาดูได้ก็ต้องใช้เวลาสักพักเล็ก ๆ และที่เจ็บปวดคือค่า cost ของ S3 นี่พุ่งเลย :smiling_face_with_tear: ตอนนี้ย้ายไปใช้ EFS แล้วสบายใจขึ้นเยอะ
  • อัพเกรด Airflow ที ใช้เวลา migrate ข้อมูลค่อนข้างนาน ซึ่งสืบเนื่องมาจากข้อแรกที่มันมี stale DAG runs เยอะ ล่าสุดอัพเกรดไปเวอร์ชั่น 2.3 ใช้เวลาไป 11 ชม. ได้ :joy: และ migrate แต่ละทีต้องมา clean database แบบ manual เพิ่มอีกหน่อย
  • ช่วงแรก ๆ มีปัญหาเรื่อง task แย่ง resource กัน ตอนนี้จับแบ่งใส่ Airflow pool ไป ช่วยได้เยอะ
  • เนื่องด้วย DAG มีจำนวนเพิ่มมากขึ้น (task ก็เพิ่มขึ้นด้วย) ถ้า database เรามีเครื่องที่ไม่แรงพอ จะเจอปัญหา task ค้างบ่อยมาก เพราะแย่งกันไปอัพเดท status กัน นี่เพิ่งอัพเกรด spec ไป ก็แก้ปัญหาได้ (เดาว่าปัญหานี้ workflow orchestration อื่นก็น่าจะเจอ)

ตอนนี้นึกได้ประมาณนี้ครับ อิอิ

3 Likes

ที่เคยเจอมาคล้ายพี่กานต์ค่ะ

  • เจอเรื่อง task ค้างเหมือนกันค่ะ เวลามี task จำนวนมาก แถมใช้ไปนานๆ CPU usage จะเพิ่มตาม Airflow DB ที่บวมขึ้น :smiling_face_with_tear: อาจจะต้องเข้าไปอัปสเปคบ้าง นานๆ ที ส่วน UI ก็ช้าอยู่แล้ว เคสนั้น 55555
  • หา log ใน job ไม่เจอ ถ้า cluster มี task จำนวนมาก :smiling_face_with_tear: หายไปไหนหว่า (อันนี้เหมือน cloud composer ก็เป็นเหมือนกัน ขนาด mount log กับ GCS แล้ว)
  • ปัญหา task แย่ง resource จนบาง task ไม่ได้รัน แก้ด้วย แยก airflow instance ไปเลยค่ะ 55555555 แบ่งกันชัด ๆ เพราะตัวที่มาแย่งใน use case นี้ จะเป็น flow adhoc หรือตัวที่รันด้วย frequency น้อยกว่า เช่น เดือนละครั้ง สัปดาห์ละครั้ง
1 Like