Xin chào cả nhà, mình là Cường đây, cảm ơn vì mọi người đã quay lại với trang blog của tụi mình. Là một người làm Data Science, chắc hẳn việc tìm được một nên tảng giúp mình thiết lập và theo dõi thực trạng của một chuỗi các tasks là rất cần thiết. Đã có rất nhiều công cụ được tạo ra nhưng sự xuất hiện của Airflow mới thật sự giúp người dùng giải quyết các vấn đề trên. Ở bài viết này thì mình muốn giới thiệu về khái niệm cũng như những lợi ích mà Airflow mang lại nhé. Let’s go.
Vậy thì Airflow là gì ta ?
Airflow là một công cụ mã nguồn mở cho phép người dùng thiết lập và theo dõi các tasks của mình trong một pipeline xử lý nhiều tác vụ khác nhau. Đây thực sự là một nên tảng rất hữu ích cho các bạn làm về data và đặc biệt dành cho những người dùng có nhu cầu cần tự động hóa công việc của mình.
Hình trên là giao diện chính của Airflow sau khi người dùng login, ở đây có những thông tin quan trọng các bạn nên để ý đó là DAG (Directed Acyclic Graphs), nói đơn giản thì đây là những pipeline mà user đã thiết lập, tiếp theo là Owner (người có quyền cao nhất đối với pipeline này) và cuối cùng là Schedule (thời gian để DAG được thực thi). Vì trong một team nhiều thành viên thì user có thể filter những task nào của mình và xem được nó sẽ chạy vào lúc nào.
Mỗi nền tảng công nghệ đểu có DNA riêng để giúp nó trở nên khác biệt so với những sản phẩm khác, dựa trên trải nghiệm cá nhân thì Airflow đã thuyết phục được mình bằng những tiện ích sau:
- Tương tác dễ dàng: với việc được vận hàng trên nền tảng website, Airflow hướng đến việc tiếp cận được nhiều nhóm người dùng khác nhau thông qua thiết kế UI đơn giản nhưng tối ưu, user có thể track những pipeline của mình chỉ bằng việc sử dụng những cú click chuột.
- Theo dõi chi tiết: bên cạnh việc cung cấp UI đơn giản cho người dùng, Airflow còn tạo ra nhiều icon để cho phép người dùng theo dõi thực trạng của pipeline (success or false) và user có thể thấy được log trả về với thời gian ghi nhận thực tế.
- Thiết lập dễ dàng: bạn chỉ cần tạo 1 file Python Script với vài dòng lệnh theo format của Airflow thì user đã có thể tạo 1 pipeline trên WebUI cực kỳ nhanh chóng. Airflow còn cho phép user thực thi mỗi task trong 1 dag sử dụng những environment khác nhau (mình sẻ nói rõ hơn ở phần thiết lập nha).
Thiết lập 1 pipeline trên Airflow
Trong phần này, mình xin chia sẻ những công đoạn để thiết lập 1 pipeline hoàn chỉnh. Ở đây Cường sử dụng 1 domain riêng cho Airflow và dùng GitLab làm nơi lưu trữ những file code để đồng bộ với công cụ này. Do kiến trúc bên mình được thiết kế đặc biệt một chút nên các bạn có thể xem hướng dẫn này để cài đặt trên máy của mình nha.
Bước 1: Tạo file definition cho DAG
Ở bước này, chúng ta bắt đầu tạo file python hay nó còn có một tên gọi khác đó là file định nghĩa cho DAG (pipeline). File này bao gồm những thông tin như owner, ngày thực thi, file code nào sẽ được sử dụng,… Để tạo được cái này thì rất may mắn cho chúng ta khi Airflow đã đơn giản hóa quá trình này bằng cách cung cấp cho chúng ta 1 format chung và từ đó các bạn engineer có thể tùy biến theo từng tác vụ cụ thể mà các bạn muốn thực thi.
Bước 2: Tùy chỉnh / Bổ sung thêm chi tiết
Sau khi các bạn đã tạo cho mình một file pipeline giống như format do Airflow cung cấp thì tiếp theo đây mình sẻ thay đổi thông tin bên trong cho phù hợp với nội dung của từng tác vụ khác nhau, mình thấy có vài cái mà mọi người cần đọc qua và có thể custom lại nha:
- dag_id: cái này kiểu giống như một cái tên duy nhất giúp phân biệt pipeline này với một cái khác, hiểu đơn giản nó tương tự như cái mã CMND của pipeline này.
- owner: cái này dùng để chỉ định người nào sở hữu và có quyền hạn cao nhất đối với file DAG này, thông tin này được phân biệt bằng tên đăng nhập trên Airflow của người dùng.
- run_as_user: dữ liệu này giúp bạn chỉ định user nào dùng để chạy DAG.
- start_date và schedule_interval: biến đầu tiên dùng để chỉ định ngày giờ để tạo tác vụ đầu tiên còn schedule_interval là bao lâu cái pipeline sẻ chạy một lần . Nói đơn giản thì nếu bạn set start_date = ‘2022-07-09’ và schedule_interval = ‘@daily’ thì ngày thực thi sẽ là ‘2022-07-11’ có nghĩa là nó được chạy sau 1 ngày (start_date + schedule_interval).
Bước 3: Tạo Operator
Ở công đoạn này, có 2 thông tin quan trọng đó là kích hoạt môi trường và bạn chỉ định hình thức nào để Airflow đọc file code, ở đây mình sẻ dùng BashOpertor để cho Airflow biết là nó phải thực thi file python (speech2text_infer_inhouse.py được lưu ở 1 nơi khác) thông qua bash command.
Gỉa sử các bạn có nhiều file trong 1 pipeline thì mình sẻ thêm dòng py_func_1 >> py_func_2… ở cuối file để Airflow biết thứ tự thực thi của từng task và đối với py_func_2 bạn muốn dùng environment khác thì cũng có thể config được luôn. Giả sử bạn chỉ có 1 task như mình thì chỉ cần để py_func_1 là đủ.
Bước 4: Kiểm tra lại thông tin
Sau khi chúng ta thay đổi thông tin của file hay bổ sung những chi tiết khác thì mình và các thành viên trong team nên nhìn tổng thể là những gì mình vừa chỉnh sửa có khớp với yêu cầu dự án hay chưa. Nếu còn sai sót gì thì có thể bổ sung ngay bước này để tiết kiệm thời gian sau này.
Bước 5: Push lên GitLab và kiểm tra thông tin trên UI
Như đã nói ở phần trên, mình sử dụng GitLab làm công cụ giao tiếp với Airflow, sau khi kiểm tra thông tin thì mình sẻ chuyển file dag này vào folder và push lên Git, 1 lưu ý là file python này và file code chính không cần thiết phải save chung 1 folder. Sau khi push thì hệ thống sẻ CI/CD lên giao diện của Airflow và chúng ta chỉ cần vào UI check lại thông tin một lần nữa cho chắc nha.
Bước 6: Hoàn thành
Sau khi chúng ta xong bước 5, thì đã có thể monitor quá trình thực thi của Airflow dựa vào schedule_interval đã được set ở bước 2 hoặc người dùng muốn test xem code của mình có lỗi nào hay không thì có thể chọn nút mũi tên ngay phần Actions để chạy ngay, việc này để giúp bạn đưa ra những test case để xem code của mình có bị sai logic hay lỗi nhỏ nhặt gì để mà còn fix kịp thời.
Lời kết
Trong quá trình làm Data Scientist thì ban đầu mình đã gặp rất nhiều khó khăn với việc setup và phải vào server xem log để monitor kết quả của task và việc này khiến mình đau đầu hơn khi số lượng lên đến hàng chục hay hàng trăm. Từ khi có sự xuất hiện của Airflow thì mọi chuyện trở nên đơn giản hơn với những lợi ích mà nó mang lại và bạn đọc có thể áp dụng phương pháp này để tối ưu hóa quy trình làm việc của mình và đội ngũ nhé.