Mô hình thiết kế xử lý dữ liệu lớn dựa trên Data Workflow Management cùng với các nhà phát triển Toss
Học tập quy trình xây dựng đường ống dữ liệu (data pipeline) sử dụng Apache Airflow từ cơ bản đến thực tế. Hiểu rõ các khái niệm cốt lõi và kiến trúc của Airflow, đồng thời thông qua thực hành để nắm vững các mẫu thiết kế nâng cao thường được sử dụng trong thực tế như DAG động, xử lý song song, xử lý phân tán và Custom Operator. Xây dựng môi trường thực hành với Python và Docker, từ đó nuôi dưỡng năng lực thực chiến để thiết kế và vận hành các luồng công việc (workflow) thực tế.
Lần này tôi là một developer đang phát triển tại Toss, cùng chuẩn bị khóa học với chủ đề về Airflow - có thể nói là bông hoa của batch processing.
Dù dịch vụ Airflow có thể khá xa lạ với nhiều người, nhưng khi dịch vụ trở nên lớn mạnh thì những workflow service như thế này sẽ cực kỳ hữu ích. Bởi vì đây là dịch vụ được ưu tiên xem xét hàng đầu trong việc xử lý batch processing quy mô lớn.
Ngay cả khi các bạn hiện tại chưa cần thiết phải học Airflow, thì những quan điểm và khái niệm đa dạng mà khóa học này truyền đạt chắc chắn sẽ hữu ích cho môi trường phát triển và học tập của các bạn. Vì tôi không nghĩ đây chỉ đơn thuần là một khóa học chỉ dạy về Airflow.
Mong các bạn quan tâm nhiều và cũng mong các bạn hãy chờ đợi khóa học tiếp theo.
Cảm ơn các bạn!!
5.0
dellahong
62% đã tham gia
Tôi đã sử dụng Airflow được 3 năm rồi, nhưng khi quy mô xử lý dữ liệu ngày càng lớn thì bắt đầu xảy ra lỗi thường xuyên, nên tôi tò mò không biết các công ty khác sử dụng theo cách nào mà đăng ký khóa học này. Thực sự rất hữu ích! Có cả khái niệm và thực hành Airflow theo hướng thực tế nên rất giúp ích cho việc hiểu và áp dụng :)
5.0
텐버거!
100% đã tham gia
Tôi nghĩ đây là một bài giảng ý nghĩa đã giới thiệu cho tôi nhiều khái niệm đa dạng từ những góc nhìn mà lần đầu tiên tôi được thấy và trước đây không thể nhìn thấy. Nội dung bản thân nó thì... làm sao nhỉ, có vẻ như là nội dung đã mở rộng tầm nhìn của tôi. Cảm ơn rất nhiều vì bài giảng hay.
Tenbagger!
Bạn sẽ nhận được điều này sau khi học.
Hiểu về khái niệm và sự cần thiết của Apache Airflow
Tìm hiểu cấu trúc các thành phần cốt lõi của Airflow
Phương pháp thiết kế DAG động (Dynamic DAG)
TaskGroup và các mô hình quản lý phụ thuộc
Chiến lược xử lý song song và xử lý lại dữ liệu lớn
Custom Operator và việc ứng dụng đóng gói (encapsulation), decorator tương ứng
Xây dựng môi trường thực hành dựa trên Python & Docker
DATA WORKFLOW MANAGEMENT
Nó vẫn có thể chạy bằng cron job
Việc liên kết các công đoạn trích xuất, xử lý và lưu trữ bằng Cron thường thì vẫn sẽ hoạt động ổn định. Vấn đề chỉ phát sinh khi bước thứ ba bị lỗi. Khi đó, bạn phải đối mặt với việc: nó đã dừng lại ở đâu, liệu có phải chạy lại hai bước trước đó không, và làm thế nào để bù đắp dữ liệu cho ngày hôm qua.
Mức độ Nhập môn
Python · Docker
Hai phần thực hành
Câu đố theo từng phần
Thời hạn khóa học vô hạn
DAG · daily_sales_pipeline1 thất bại · 4 đang chờ
extract_orders
clean_payload
load_warehouse
aggregate_daily
notify_slack
thành côngthất bạiđang chờkhông có trạng thái
Màn hình này gần như là tất cả những gì Airflow mang lại cho bạn. Việc tác vụ nào theo sau tác vụ nào, dừng lại ở đâu, và cái gì vẫn đang chờ xử lý sẽ được lưu lại trong hệ thống chứ không phải trong trí nhớ của con người.
01 / Vấn đề
Bước thứ ba đã thất bại
Nếu một đường ống (pipeline) được liên kết bằng cronjob bị lỗi ở giữa chừng, thì tất cả các bước sau đó đều phải do con người phán đoán và xử lý.
CÂU HỎI 1
Dừng lại ở đâu
Mở nhật ký tập lệnh (script log) và tìm dòng cuối cùng được ghi lại. Nếu chúng nằm rải rác trên nhiều máy chủ, công việc sẽ tăng lên tương ứng.
QUESTION 2
Hai câu đầu thì làm thế nào
Kiểm tra mã nguồn để xác nhận xem có thể chạy lại các bước đã thành công hay không, và liệu việc chạy hai lần có làm trùng lặp dữ liệu hay không.
CÂU HỎI 3
Ai sẽ bù đắp cho phần của ngày hôm qua đây
Tính toán thủ công các đoạn chưa chạy được rồi thực hiện lại từng cái một. Nếu xác định sai phạm vi, nó sẽ trở thành sự cố ngay lập tức.
Sự khác biệt không lộ ra khi mọi thứ chạy tốt, mà là khi thất bại xảy ra. Nếu phạm vi xử lý lại đang được con người tính toán bằng tay, thì đó chính là nơi cần đến workflow.
02 / Bắt đầu
Đây là cuộc đối thoại đã diễn ra trên thực tế
Hong lúc đầu cũng hỏi rằng: "Nó khác gì so với CronJob?". Câu hỏi đó đã trở thành phần đầu tiên của bài giảng này.
TNhân viên phát triển TossHong à, cậu có biết về Airflow không?
HHongMình có biết nhưng chưa dùng thử bao giờ. Có chuyện gì vậy?
TNhà phát triển TossVề bài giảng workflow mà chúng ta đã làm lần trước ấy, mình đang nghĩ xem sẽ thế nào nếu chúng ta cũng đề cập đến Airflow nữa. Vì mình chỉ mới sử dụng Airflow thôi.
HHongNhưng mà tôi chưa dùng Airflow bao giờ. Phải làm thế nào đây?
TNhà phát triển TossKhông sao đâu. Vì mình đang sử dụng nó trong thực tế nên mình có thể chủ động hướng dẫn cho bạn.
HHongĐược rồi. Nhưng cái này có nhất thiết phải dùng không? Tôi thấy nó không khác gì mấy so với xử lý batch thông thường hay cron job?
TNhà phát triển TossViệc bạn suy nghĩ như vậy chính là lý do tại sao cần phải sử dụng Airflow đấy. Nó có sự khác biệt so với Cronjob. Điều này cũng giống như câu chuyện tại sao chúng ta nên sử dụng workflow vậy.
03 / Cấu trúc
Nó bao gồm bốn phần chính.
Khi bật Airflow, nhiều quy trình sẽ cùng chạy. Bạn cần biết mỗi quy trình làm nhiệm vụ gì để khi có vấn đề xảy ra, bạn biết phải kiểm tra ở đâu.
WebServer
Đây là nơi vẽ ra màn hình lưới mà bạn thấy ở trên. Là nơi để kiểm tra danh sách DAG và lịch sử thực thi bằng mắt.
Bộ lập lịch (Scheduler)
Tìm các công việc đã đến lúc thực hiện và đưa chúng vào hàng đợi. Đây được coi là trái tim của hệ thống, và hầu hết các câu hỏi "tại sao nó không chạy" đều bắt nguồn từ đây.
Executor
Thực sự thực hiện công việc. Tùy thuộc vào việc sử dụng Executor nào mà công việc sẽ được chạy trên một máy hay chia ra chạy trên nhiều máy.
MetaDataDB
Tất cả trạng thái của DAG và task đều được lưu lại tại đây. Mỗi màu sắc trên lưới phía trên tương ứng với một hàng trong cơ sở dữ liệu này.
Phần 3 sẽ là nơi chúng ta đi sâu vào cả bốn nội dung này. Nếu nắm vững cấu trúc trước, các phần về xử lý song song và Celery Executor ở phía sau sẽ trở nên dễ hiểu hơn nhiều.
04 / Lộ trình học tập
Nội dung được đề cập theo thứ tự nào
Ở phần trước, chúng ta sẽ tìm hiểu lý do tại sao nên sử dụng và nắm bắt cấu trúc, sau đó ở phần sau, chúng ta sẽ tạo lập môi trường và trực tiếp chạy các pattern.
01
Giới thiệu khóa học và tài liệu bài giảng
Giới thiệu bài giảng
Tài liệu mã nguồn thực hành
Tài liệu tóm tắt nội dung bài giảng
Lưu ý về bài giảng
02
Tại sao chúng ta muốn xây dựng một Data Pipeline?
Airflow란 무엇인가?
Batch Job & Cron Job Vs Airflow
Nhược điểm của Apache Airflow và các anti-pattern khi áp dụng
Câu đố phần 2
03
Các thành phần cốt lõi và kiến trúc của Airflow
Giới thiệu tổng quan về kiến trúc các thành phần cốt lõi (Core Components Architecture)
WebServer Components Deep Dive
Tìm hiểu sâu về các thành phần của Scheduler
Tìm hiểu sâu về các thành phần của Executor
Tìm hiểu sâu về các thành phần của MetaDataDB
Câu đố Phần 3
04
Các mẫu thiết kế nâng cao cho DAG & Task
Mô hình tạo DAG động [ Dynamic DAG ]
Sự phụ thuộc giữa các DAG (Cross-DAG Dependencies) và sự phụ thuộc dữ liệu
Thiết kế workflow phức tạp sử dụng TaskGroup
Custom Operator có thể tái sử dụng
Trắc nghiệm Phần 4
05
Xử lý song song, xử lý phân tán và xử lý lại dữ liệu lớn trong Airflow
Chiến lược xử lý song song và xử lý phân tán của Airflow
Chiến lược Backfill và xử lý lại dữ liệu lớn
06
Xây dựng môi trường nhẹ nhàng sử dụng Python & Docker
Xây dựng môi trường nhẹ nhàng tận dụng Docker
Cấu hình môi trường thực hành cơ bản sử dụng Python
07
Thực chiến!! Vừa thực hành vừa làm chủ Airflow
Mẫu tạo DAG động
Thực hành quan hệ phụ thuộc TriggerDagRun & TaskSensor
Mô hình EDA trong Airflow và mô hình ứng dụng Dataset Dependencies
Mô hình nhóm áp dụng TaskGroup
Decorator trừu tượng hóa đóng gói của Airflow & Mẫu Custom Operator
Mẫu cải thiện thông lượng bằng cách áp dụng mẫu xử lý song song trong xử lý theo lô (batch processing)
Câu đố Phần 7
08
Các bài thực hành bổ sung về Airflow mà tôi muốn các bạn biết
Triển khai thông báo (Notification) sử dụng Slack
Xử lý phân tán các tác vụ batch dung lượng lớn sử dụng Celery Executor
Thực hành xử lý batch sử dụng xử lý phân tán Celery Executor và Redis
Trắc nghiệm Phần 8
05 / Thực hành
Chạy bằng cái gì
Chỉ cần có Python và Docker là đủ. Trong phần cuối cùng, chúng ta sẽ kết nối Celery Executor và Redis để thực hiện xử lý phân tán.
Python 3
Docker Compose
Apache Airflow
Celery Executor
Redis
Thông báo Slack
Mã nguồn thực hành và tài liệu tóm tắt bài giảng nằm ở phần 1. Ngay cả khi không biết sâu về Python, bạn vẫn có thể nắm bắt được cách thức hoạt động của Airflow mà không gặp khó khăn gì.
Khóa học không chỉ dừng lại ở lý thuyết. Có nguyên hai phần hoàn toàn là thực hành và cuối cùng sẽ đi đến cả xử lý phân tán.
Nhà phát triển backend đang kết nối các pipeline bằng cron và phải tự tay xử lý bù dữ liệu mỗi khi có lỗi xảy ra.
Đang sử dụng nhưng không nắm rõ cấu trúc
Những người đã và đang vận hành Airflow nhưng không hiểu rõ nguyên lý hoạt động nên thường lúng túng mỗi khi phát sinh vấn đề.
Tính toán việc xử lý lại dữ liệu bằng tay
Nhà phát triển đang làm việc thực tế phải tự đếm các đoạn chưa chạy để thực thi lại thủ công.
Muốn mở rộng sang lĩnh vực dữ liệu
Lập trình viên đang muốn mở rộng phạm vi từ phát triển server sang lĩnh vực kỹ thuật dữ liệu (data engineering).
07 / Thị trường hiện tại
Câu chuyện về việc AI thay thế lập trình viên
Tuyển dụng mới đang giảm dần, và các doanh nghiệp chỉ muốn chọn những người đã được kiểm chứng. Đây là những bài báo xuất hiện trong vài tháng gần đây.
2025Krafton, công ty vừa đạt được kết quả kinh doanh cao kỷ lục, đã bắt đầu cắt giảm nhân sự. Lý do được đưa ra là để chuyển đổi thành một doanh nghiệp 'ưu tiên AI' (AI First).
2025Các doanh nghiệp chuyên về phần mềm đang ngừng tuyển dụng lập trình viên mới. Cũng có dự báo cho rằng việc tuyển dụng lập trình viên sơ cấp sẽ giảm mạnh tới 77%.
2025 có 53% nhà thiết kế trò chơi đã trả lời rằng "AI sẽ thay thế công việc của tôi". Các trường hợp khuyến khích thôi việc cũng đã được báo cáo.
Khi doanh nghiệp càng bất an, phía người ứng tuyển càng phải thể hiện sự khác biệt rõ rệt hơn. Việc học cuối cùng vẫn là do bản thân tự thực hiện, nhưng tùy vào việc bạn nhìn nhận cái gì và dưới góc độ nào mà chiều sâu giải thích sẽ khác nhau dù cùng bỏ ra một lượng thời gian như nhau.
08 / Đánh giá khóa học
Chia sẻ từ những người đã học trước đó
Tôi đã trích dẫn nguyên văn từ đánh giá khóa học trên Inflearn.
Tôi đã sử dụng Airflow được 3 năm, nhưng khi quy mô xử lý dữ liệu ngày càng lớn và các lỗi bắt đầu xảy ra thường xuyên hơn, tôi đã quyết định tham gia khóa học này vì muốn biết các công ty khác đang sử dụng nó như thế nào. Khóa học thực sự giúp ích cho tôi rất nhiều. Việc kết hợp giữa khái niệm thực tế và thực hành Airflow đã hỗ trợ tôi rất nhiều trong việc thấu hiểu và áp dụng vào công việc.
dellahong · Viết sau khi hoàn thành 62% khóa học
Có vẻ như đây là lần đầu tiên tôi thấy người chia sẻ sử dụng ngôn ngữ khác ngoài Spring và Java trong bài giảng. Tuy nhiên, tôi vẫn xem rất tốt mà không gặp bất kỳ sự bất tiện lớn nào. Nếu biết Python thì sẽ tốt hơn, nhưng nếu bạn muốn học cách vận dụng và thử nghiệm Airflow thì đây là một bài giảng mà dù không biết Python vẫn có thể theo học được.
Jlos Ho · Viết sau khi hoàn thành 90% khóa học
Tôi đã tham gia khóa học này để tranh thủ học nhanh trong kỳ nghỉ lễ Chuseok. Dù không kỳ vọng quá nhiều khi bắt đầu, nhưng tôi nghĩ nó thực sự đã giúp ích cho tôi rất nhiều. Tôi đã học được nhiều điều không chỉ về Airflow mà còn ở khía cạnh lập trình nói chung và góc nhìn của một nhà phát triển.
Lilboy_! · Viết sau khi hoàn thành 100% khóa học
09 / Người tạo ra nội dung này
Được dẫn dắt bởi nhà phát triển hiện đang làm việc tại Toss
Người làm việc thực tế và sử dụng nó hàng ngày đã chuẩn bị tài liệu, còn Hong đóng vai trò là người mới bắt đầu học để đặt câu hỏi và cả hai đã cùng nhau ghi hình.
TOSS · KỸ SƯ BACKEND
Nhà phát triển tại Toss
Tôi tốt nghiệp chuyên ngành Khoa học máy tính tại một trường đại học ở tỉnh, từng làm việc tại Naver và hiện đang phát triển backend tại Toss. Chủ đề của bài giảng này là những kiến thức mà tôi đang sử dụng hàng ngày trong công việc thực tế.
"Bản thân câu hỏi Airflow khác gì so với Cron job chính là câu trả lời cho lý do tại sao phải sử dụng nó."
Người chia sẻ kiến thức · Phát triển máy chủ nền tảng tại Pangyo
Hong
Xuất thân là một người không chuyên về ngành kỹ thuật, hiện tại tôi đang phát triển backend cho nền tảng tại Pangyo. Tôi đặt ra nguyên tắc là không làm việc một mình mà sẽ cùng với những người quen có năng lực trong ngành để tạo ra các bài giảng.
"Lúc đầu tôi cũng không biết nó khác gì với CronJob. Chúng ta sẽ bắt đầu từ điểm đó."
10 / Câu hỏi
Các câu hỏi thường gặp về bài giảng Airflow
Hỏi:Tại sao nên dùng Airflow khi có thể dùng CronJob?
⌄
Bài giảng thứ hai của Phần 2 chính là sự so sánh đó. Cronjob chỉ thực thi khi đến thời điểm đã định nên không biết được tác vụ trước đó có thành công hay không. Trong khi đó, Airflow quản lý mối quan hệ phụ thuộc và trạng thái thực thi giữa các tác vụ, vì vậy hệ thống sẽ lưu lại thông tin thất bại ở đâu và cần phải chạy lại từ bước nào. Ngược lại, những trường hợp không nên sử dụng Airflow cũng được đề cập trong cùng phần này.
Q.Tôi không giỏi Python thì có học được không?
⌄
Vì DAG được viết bằng Python nên nếu biết ngôn ngữ này chắc chắn sẽ thuận tiện hơn. Tuy nhiên, khóa học này không dạy cú pháp Python mà tập trung vào cách hoạt động và các mô hình thiết kế của Airflow. Mã nguồn thực hành được cung cấp sẵn dưới dạng tài liệu, và trong phần đánh giá khóa học cũng có ý kiến cho rằng "Dù không biết Python vẫn có thể vận dụng và kiểm thử Airflow mà không gặp trở ngại nào".
Hỏi:Làm thế nào để tạo môi trường thực hành?
⌄
Trong phần 6, chúng ta sẽ xây dựng môi trường nhẹ bằng Docker và thiết lập môi trường thực hành Python. Trên đó, chúng ta sẽ lần lượt chạy thử các nội dung như Dynamic DAG, quan hệ phụ thuộc sử dụng TriggerDagRun và Sensor, Dataset Dependencies, TaskGroup, Custom Operator và các mô hình xử lý song song.
Q.Có đề cập đến xử lý phân tán không?
⌄
Trong phần 5, chúng ta sẽ tìm hiểu về chiến lược xử lý song song và xử lý phân tán, cũng như cách chạy lại lượng lớn dữ liệu bằng Backfill. Ở phần cuối cùng, chúng ta sẽ thực hành xử lý phân tán các tác vụ batch bằng cách kết nối Celery Executor và Redis.
Hỏi: Tôi đang sử dụng Airflow rồi thì có nên nghe không?
⌄
Những điểm mà người đang sử dụng thường gặp vướng mắc chủ yếu nằm ở phần cấu trúc và thiết kế. Các phần đi sâu vào từng thành phần cốt lõi (core component) và các phần xử lý DAG động (dynamic DAG), phụ thuộc chéo DAG (Cross-DAG dependency), Custom Operator chính là để giải quyết những vấn đề đó. Trong số các đánh giá khóa học, cũng có chia sẻ rằng: "Tôi đã dùng được 3 năm nhưng khi quy mô lớn dần, lỗi xảy ra thường xuyên hơn nên tôi đã học vì tò mò về những phương pháp khác".
Chạy lại từ vị trí bị lỗi
Nếu lưu lại trình tự và mối quan hệ phụ thuộc bằng mã nguồn (code), việc ứng phó với sự cố sẽ chuyển từ trí nhớ của con người sang hệ thống.
Có một không gian riêng để chia sẻ về những phần bạn còn thắc mắc khi nghe bài giảng, những câu hỏi nảy sinh khi áp dụng vào dịch vụ của chính mình, cho đến cả những câu chuyện về sự nghiệp. Những chỗ bạn gặp khó khăn thường cũng là nơi mà người khác cũng gặp vướng mắc.
Tôi bắt đầu học lập trình sau một thời gian dài lười biếng ở nhà và cảm thấy hứng thú với nó, hiện tại tôi đang đảm nhận việc phát triển máy chủ nền tảng (platform server) tại Pangyo. Tôi tiếp tục hoạt động với tư cách là người chia sẻ kiến thức vì muốn cung cấp cho các bạn phương pháp tôi đã học cũng như những vấn đề và giải pháp khác nhau mà các bạn có thể gặp phải trong thực tế.
Bài giảng không chỉ được tạo ra từ kiến thức của riêng tôi. Mọi bài giảng đều có sự đồng hành của những người cộng sự.
Cảm ơn bạn về khóa học tuyệt vời. Tôi nghĩ đây là lần đầu tiên tôi thấy người chia sẻ sử dụng ngôn ngữ khác ngoài Spring, Java trong các khóa học của mình. Dù vậy tôi đã xem rất tốt mà không có phần nào khó chịu, và tôi nghĩ nếu biết ngôn ngữ python thì sẽ tốt hơn để xem, nhưng nếu đơn giản chỉ muốn sử dụng và test Airflow và nói nhanh là muốn nếm thử thì có vẻ như là khóa học không nhất thiết phải biết cũng được.
Lần này cũng thực sự cảm ơn rất nhiều về khóa học quá tuyệt vời và người chia sẻ cũng ngày càng phát triển kỹ năng giảng dạy và theo đó tôi cũng cảm thấy mình cùng phát triển nên rất tự hào 😊😊 Lần sau cũng xin nhờ chủ đề hay và tốt nhé!
Xin chào Jios Ho, cảm ơn bạn đã để lại đánh giá. Gần đây có vẻ như các rào cản về ngôn ngữ đang giảm dần. Vì vậy lần này tôi đã chuẩn bị một khóa học có đặc điểm riêng biệt. Cảm ơn bạn!
Tôi đã sử dụng Airflow được 3 năm rồi, nhưng khi quy mô xử lý dữ liệu ngày càng lớn thì bắt đầu xảy ra lỗi thường xuyên, nên tôi tò mò không biết các công ty khác sử dụng theo cách nào mà đăng ký khóa học này. Thực sự rất hữu ích! Có cả khái niệm và thực hành Airflow theo hướng thực tế nên rất giúp ích cho việc hiểu và áp dụng :)
Tôi nghĩ đây là một bài giảng ý nghĩa đã giới thiệu cho tôi nhiều khái niệm đa dạng từ những góc nhìn mà lần đầu tiên tôi được thấy và trước đây không thể nhìn thấy. Nội dung bản thân nó thì... làm sao nhỉ, có vẻ như là nội dung đã mở rộng tầm nhìn của tôi. Cảm ơn rất nhiều vì bài giảng hay.
Tenbagger!
Lần này tôi là một developer đang phát triển tại Toss, cùng chuẩn bị khóa học với chủ đề về Airflow - có thể nói là bông hoa của batch processing.
Dù dịch vụ Airflow có thể khá xa lạ với nhiều người, nhưng khi dịch vụ trở nên lớn mạnh thì những workflow service như thế này sẽ cực kỳ hữu ích. Bởi vì đây là dịch vụ được ưu tiên xem xét hàng đầu trong việc xử lý batch processing quy mô lớn.
Ngay cả khi các bạn hiện tại chưa cần thiết phải học Airflow, thì những quan điểm và khái niệm đa dạng mà khóa học này truyền đạt chắc chắn sẽ hữu ích cho môi trường phát triển và học tập của các bạn. Vì tôi không nghĩ đây chỉ đơn thuần là một khóa học chỉ dạy về Airflow.
Mong các bạn quan tâm nhiều và cũng mong các bạn hãy chờ đợi khóa học tiếp theo.
Cảm ơn các bạn!!
Xin chào a mi, cảm ơn bạn đã để lại đánh giá tốt!! Tôi sẽ cố gắng để có thể cung cấp những bài giảng tốt hơn nữa trong tương lai. Chúc bạn có một ngày tốt lành!