Giới thiệu về Airflow và triển khai kiến trúc HA

Giới thiệu về Airflow và triển khai kiến trúc HA

Trước khi đi vào giới thiệu chi tiết về airflow, ta cùng xem qua vấn đề sau để thấy được một phần sức mạnh của airflow:

  • Với các công việc lên lịch trước đây thì việc sử dụng crontab là một giải pháp tương đối tốt.
  • Tuy nhiên, trong một job thường có nhiều task nhỏ. Vậy vấn đề đặt ra ở đây là khi một task bị lỗi thì sao? Giải pháp đơn giản nhất là chạy lại toàn bộ job hoặc tìm câu lệnh chạy task đó và tiếp tục chạy. Việc làm này rất thủ công và không chuyên nghiệp :)).
  • Chính vì vậy airflow sinh ra để giải quyết những vấn đề trên giúp lên lịch và quản lí các workflow một cách chi tiết nhất

Và một điều hết sức mạnh mẽ của airflow  "any command, on any node" (chạy bất kì câu lệnh nào trên bất kì node nào).  Chi tiết về apache airflow là gì? cấu trúc của nó như thế nào? Mình sẽ trình bày trong phần dưới đâ

1. Giới thiệu

  • Airflow là môt nền tảng giúp cho việc lập lịch và quản lí workflow công việc thông qua việc lập trình ( hỗ trợ trên Python).
  • Airflow phát triển dựa trên AirBnb vào 10/2014 và quản lí các công việc dựa trên một đồ thị DAG ( đồ thị có hướng và không có chu trình) trong đó mỗi node trong đồ thị là một task nhỏ.
  • Ví dụ:
Ảnh 1.
  • Hiện nay trên thế giới có một số tổ chức nổi tiếng đang sử dụng công nghệ này như:
  • Adobe, Dropbox, Gitlab, Gojek, Grab, ...

2. Kiến trúc tổng quan

  • Airflow bao gồm các thành phần chính:
  • Web server: cung cấp giao diện UI quản lí trực tiếp các job biểu diễn dưới dạng đồ thì DAG.
  • Schedule: bộ lập lịch cho các job quyết định xem các job nào được chạy, task nào được chạy.
  • Metadata database: lưu trữ các thông tin của airflow như: dag, connection, role user, ...
  • Executors/Workers: điều phối thực thi các task trong DAG
  • Chi tiết kiến trúc như trong hình sau:
Ảnh 2.

2.1 Webserver

  • Webserver cung cấp một giao diện cho user có thể thao tác với các job dưới dạng đồ thị DAG trực tiếp trên UI.
  • Một số chức năng trên UI như: kích hoạt DAG, pause DAG, restart lại các task khi bị lỗi, ...
  • Và một số chức năng khác như:
Ảnh 3.
Ảnh 4.

Xem thông tin job chạy theo lịch


Ảnh 5.

Biểu diễn các task dưới dạng graph

Ảnh 6.

Xem code tạo các DAG

gantt.png
tree.png
duration.png

Thông tin các jobs chạy

2.2 Schedule

  • Schedule là một thành phần rất quan trọng trong airflow. Thực hiện chức năng lên lịch & kích hoạt các task trong dag khi đến lịch.
  • Schedule trong airflow monitor tất cả các task và DAG. Kích hoạt các task khi các phụ thuộc nó hoàn thành
  • Mỗi phút schedule sẽ kiểm tra xem có DAG bị lỗi, DAG mới hoặc task nào có thể kích hoạt.

2.3 Database

  • Database ở đây được sử dụng để lưu trữ các thông tin cấu hình của airflow như: connection, username, password, ...
  • Một số db có thế sử dụng mà airflow hỗ trợ như:
  • Mysql version 5.6, 8
  • Sql lite : thường sử dụng để test
  • PostgreSQL: 9.6, 10, 11, 12, 13

2.4 Executors/Workers:

  • Airflow hỗ trợ 5 executor:
  • SequentialExecutor: thực thi task tuần tự, đơn giản -> sử dụng trong test, dev
  • LocalExecutor: cho phép các task thực hiện đồng thời, có thể sử dụng trong prod
  • CeleryExecutor: cho phép scale airflow theo chiều ngang, các task chạy trên nhiều node
  • DaskExecutor: tương tự như CeleryExecutor, xử lí các task python phân tán
  • KubernetesExecutor: Cho phép run task thông qua kubernetes, tài nguyên phân bổ động -> tránh cho việc lãng phí tài nguyên.

2.5 Một số khái niệm cơ bản khác

Chi tiết tại link sau Apache Airflow

3. Triển khai kiến trúc HA với airflow

  • Với một hê thống bất kì việc đảm bảo luôn luôn hoạt động và có tính sẵn sàng cao là hết sức cần thiết. Để đáp ứng nhu cầu nêu trên thì cần có High Availability (HA), trong phần dưới đây mình sẽ trình bày chi tiết về cách triên khai HA cho hệ thống airflow đang sử dụng.
  • Như đã giới thiệu ở trên thì các thành phần chủ chốt của airflow như:
  • Webserver
  • Scheduler
  • Excutor/Worker
  • Database
  • Đây là những phần cần tiến hành HA để đảm bảo hệ thống luôn hoạt động. Trong đó phần database thì bên sysadmin đã hỗ trợ HA.
  • Trong phần này mình giới thiệu triển khai HA đối với CeleryExecutor.
  • Kiến trúc mô hình HA triển khai như sau:
Ảnh 8.
  • Mô hình triển khai HA sẽ như hình trên, tuy nhiên phần quan trọng nhất là scheduler lại chưa được thực hiện. Việc HA cho sheduler là không có cách nào do tại một thời điểm chỉ có một scheduler được phép chạy.
  • Trước vấn đề đó có một project được tạo ra để giải quyết vấn đề này Airflow Scheduler Failover Controller. Mô hình này luôn đảm bảo có một scheduler được chạy tại một thời điểm.
  • Chi tiết mô hình được mô tả như sau:
Ảnh 9.
  • Schedule được triển khai dưới dạng active-standby. Scheduler Failover Controller sẽ đẩy các heart beat vào database mỗi 10s. Khi heart beat quá 20s (thời gian có thể cấu hình được) mà không được làm mới thì sẽ tự active scheduler ở trạng thái standby -> active.
  • Một vấn đề hết sức quan trọng là để hệ thống có thể hoạt động được thì code tạo các dag giữa các excutor phải được đồng bộ và mô hình hiện tại team platform đang triển khai là sử dụng git để sync code giữa các excutor.
  • Mô hình thực tế đang triển khai tại team platform:
Ảnh 10.

4. Kết luận

  • Airflow là một công cụ mạnh mẽ giúp mô hình hóa các công việc dưới dạng workflow.
  • Sử dụng code để định nghĩa workflow giúp cho việc bảo trì, phát triển, test dễ dàng hơn
  • Monitor và log các job dễ nhìn chi tiết với telegram và email.
  • Airflow giúp chạy lại job trực tiếp trên UI khi cần thiết, hạn chế bớt việc cần lên server.