# ChabuLab Learn > Free lessons on system design, technology and AI with live simulations, decision tables, working code and prompts you can hand to an AI. Every page is also available as Markdown: add `.md` to the address or send `Accept: text/markdown`. ## English - [Build batch pipelines with Spark and stream with Kafka, Flink](https://learn.chabulab.com/system-design/batch-and-stream-with-spark-and-flink.md): The steps to build a batch pipeline with PySpark and Airflow and a stream pipeline with Kafka and Flink SQL, with samples, safe re-runs and what to learn next. - [Batch vs stream processing, explained with a simulation](https://learn.chabulab.com/system-design/batch-vs-stream-explained.md): Batch collects data and processes it at once, stream handles it as it arrives. Run a live simulation to see what each costs, with a comparison table. - [Build a cheap data pipeline with TypeScript on Cloudflare or AWS](https://learn.chabulab.com/system-design/build-cheap-data-pipelines-typescript.md): Take orders, process small batches and total them nightly in one Worker. With a price table by tier, an AWS version and a prompt to hand the job to an AI. - [Batch or stream: which one fits your problem?](https://learn.chabulab.com/system-design/choosing-batch-or-stream.md): Pick a real problem to see whether batch, stream or both fits it, and why. With a quick rule for choosing and the Lambda and Kappa architectures. - [Data processing tools: what to choose by language and cloud](https://learn.chabulab.com/system-design/data-processing-technologies.md): What Spark, Flink, Kafka, Airflow and the services on Cloudflare, AWS, Google Cloud and Azure do. Choose in three layers: industry standard, cloud, language. - [Rate limiting explained: fixed window, sliding window and token bucket](https://learn.chabulab.com/system-design/rate-limiting-explained.md): Three ways to say no to too many requests. Run all three on the same traffic, see which lets a burst through, then return 429 the right way. - [Stream windows, event time and late data, explained](https://learn.chabulab.com/system-design/stream-windows-and-late-data.md): An endless flow cannot be summed once. Watch fixed, sliding and session windows in a live demo, then learn event time, watermarks and how to avoid duplicates. ## Tiếng Việt - [Batch và stream là gì? Hiểu nhanh qua một mô phỏng](https://learn.chabulab.com/vi/system-design/batch-va-stream-la-gi.md): Batch gom dữ liệu rồi xử lý một lần, stream xử lý ngay khi dữ liệu đến. Tự chạy mô phỏng để thấy cái giá của mỗi cách, kèm bảng so sánh và ví dụ thực tế. - [Nên chọn batch hay stream cho bài toán của bạn?](https://learn.chabulab.com/vi/system-design/chon-batch-hay-stream.md): Chọn một bài toán thực tế để xem nên dùng batch, stream hay kết hợp cả hai và vì sao. Kèm quy tắc chọn nhanh và hai kiến trúc Lambda, Kappa. - [Công nghệ xử lý dữ liệu: chọn gì theo ngôn ngữ và cloud](https://learn.chabulab.com/vi/system-design/cong-nghe-xu-ly-du-lieu.md): Spark, Flink, Kafka, Airflow và các dịch vụ trên Cloudflare, AWS, Google Cloud, Azure làm gì. Chọn theo ba lớp: tiêu chuẩn ngành, cloud, ngôn ngữ. - [Cửa sổ thời gian, event time và dữ liệu đến trễ trong stream](https://learn.chabulab.com/vi/system-design/cua-so-thoi-gian-va-du-lieu-den-tre.md): Dòng dữ liệu vô hạn không thể cộng tổng một lần. Xem demo cửa sổ cố định, trượt và phiên, rồi hiểu event time, watermark và cách tránh xử lý trùng. - [Dựng pipeline xử lý dữ liệu rẻ bằng TypeScript trên Cloudflare, AWS](https://learn.chabulab.com/vi/system-design/dung-nhanh-re-xu-ly-du-lieu-bang-typescript.md): Nhận đơn, xử lý theo lô nhỏ và tổng hợp mỗi đêm chỉ trong một Worker. Kèm bảng giá theo cấp, mẫu cho AWS và prompt để giao việc này cho AI. - [Dựng pipeline batch bằng Spark và stream bằng Kafka, Flink](https://learn.chabulab.com/vi/system-design/dung-pipeline-spark-flink.md): Các bước dựng một pipeline batch với PySpark, Airflow và một pipeline stream với Kafka, Flink SQL, kèm code mẫu, cách chạy lại an toàn và lộ trình học tiếp. - [Rate limiting là gì? Cửa sổ cố định, cửa sổ trượt và xô token](https://learn.chabulab.com/vi/system-design/gioi-han-toc-do-rate-limiting.md): Ba cách từ chối request khi khách gửi quá nhiều. Chạy cả ba trên cùng một luồng request, xem cách nào để lọt cú dồn, rồi trả mã 429 cho đúng. ## Optional - [Full text of every lesson](https://learn.chabulab.com/llms-full.txt) - [RSS feed](https://learn.chabulab.com/rss.xml)