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ụ:
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:
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ư:
Thông tin các jobs chạy
2.2 Schedule
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.
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:
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 như sau:
Schedule được triển khai dưới dạng active-standby. Scheduler Failover Controller sẽ đẩy các heart beat vào db mỗi 10s. Khi heart beat quá 20s 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 em đ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:
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.
Giới thiệu về Airflow và triển khai kiến trúc HA - Hoàng Hiệp - Blog
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ụ:
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:
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ư:
Thông tin các jobs chạy
2.2 Schedule
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.
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:
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 như sau:
Schedule được triển khai dưới dạng active-standby. Scheduler Failover Controller sẽ đẩy các heart beat vào db mỗi 10s. Khi heart beat quá 20s 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 em đ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:
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.