inflearn logo

Từ đồng bộ sang bất đồng bộ — hướng dẫn thực tiễn chuyển đổi API thương mại điện tử bằng hàng đợi thông điệp, Outbox và công cụ workflow

Chúng tôi thay thế các API cấp coupon và đăng ký sản phẩm đồng bộ vốn bị sập khi lượng truy cập tăng đột biến lúc mở bán bằng queue, outbox, consumer idempotent, DLQ và Temporal; đồng thời tự tái hiện trên Docker ở máy tính của mình các số liệu trước và sau khi thay đổi (độ trễ, tỷ lệ lỗi, số lần commit DB) với cùng mức tải.

1 học viên đang tham gia khóa học này

Độ khó Trung cấp trở lên

Thời gian Không giới hạn

PostgreSQL
PostgreSQL
Kafka
Kafka
MSA
MSA
temporal
temporal
PostgreSQL
PostgreSQL
Kafka
Kafka
MSA
MSA
temporal
temporal

Bạn sẽ nhận được điều này sau khi học.

  • Đo API đồng bộ với tải có tốc độ đến cố định để tìm điểm độ trễ, tỷ lệ lỗi và số lần commit DB bắt đầu chững lại, đồng thời xác định nguyên nhân là CPU hay chờ khóa/commit.

  • Chuyển sang API tiếp nhận đưa yêu cầu cấp phát vào hàng đợi và phản hồi 202, kết hợp với consumer xử lý theo lô; sau đó lập bảng so sánh số liệu trước và sau ở cùng mức tải.

  • Chúng tôi cố tình tạo ra tình trạng mất dữ liệu khi ghi kép, relay gửi trùng, đảo thứ tự và thông điệp độc, rồi ngăn chặn chúng bằng outbox, consumer lũy đẳng, khóa phân vùng và DLQ.

  • Chuyển API đăng ký mất vài giây sang cơ chế tiếp nhận → tra cứu trạng thái, đồng thời quyết định trong ADR phương thức gửi theo lịch và phát hành thay đổi dựa trên số liệu đo được.

  • Chuyển các lỗi âm thầm biến mất trong mô hình kết hợp hàm + hàng đợi sang workflow Temporal, để theo dõi việc thử lại và phát hiện lỗi tại một nơi.

  • Thực hành chuyển đổi giữa chế độ đồng bộ và bất đồng bộ bằng feature flag mà không cần triển khai lại, đồng thời rollback theo trình tự để không làm mất các yêu cầu còn trong hàng đợi.

Chúng tôi thay thế API phát hành coupon/đăng ký sản phẩm đồng bộ vốn sụp đổ dưới tải khi mở đợt sale bằng hàng đợi, outbox, consumer idempotent, DLQ và workflow engine, rồi trực tiếp chứng minh bằng số liệu trước và sau rằng số lần commit DB, độ trễ và tỷ lệ thất bại thay đổi ra sao dưới cùng một mức tải.

Kết quả cuối cùng (đo thực tế trong demo bài 0, cùng tải 800 yêu cầu/giây): Tỷ lệ thất bại khi phát hành đồng bộ 77.29% · thời gian phản hồi p50 9.82 giây · 7,944 lượt commit DB → sau khi chuyển sang xử lý bất đồng bộ, tỷ lệ thất bại 0% · p50 10.62ms · 820 lượt commit DB. Trong đồ án cuối khóa (bài 30), học viên sẽ tự chuyển đổi quy trình phát hành coupon và đăng ký sản phẩm để thu được các số liệu trước và sau này.

Chuyển các API đồng bộ bị quá tải khi mở bán sang Message Queue, Transactional Outbox, consumer có tính lũy đẳng, DLQ và Temporal, rồi tự tái hiện trên Docker máy tính của mình các số liệu trước và sau dưới cùng mức tải (độ trễ, tỷ lệ thất bại, số lần commit DB).

Phần lớn các khóa học về hàng đợi thông điệp chỉ dừng ở cách sử dụng công cụ. Khóa học này tập trung vào chính việc chuyển một API đồng bộ đang hoạt động sang bất đồng bộ. Từ đo đạc trước và sau, hợp đồng tiếp nhận, cách chủ động tạo ra rồi ngăn chặn các lỗi như mất dữ liệu, trùng lặp, sai thứ tự và thông điệp lỗi, cho đến ghi lại quyết định, chuyển đổi bằng feature flag và rollback. Chúng ta sẽ khởi chạy bằng Docker API, PostgreSQL, Redpanda (tương thích với Kafka), Temporal, k6, Prometheus và Grafana của cửa hàng chuyên đồ thể thao và dã ngoại hư cấu Loop Market, đang phát triển với quy mô 10–20 lập trình viên; mọi con số trên màn hình đều là kết quả chạy thực tế.

Sau khi hoàn thành khóa học này

  • Đo API đồng bộ dưới tải có tốc độ gửi yêu cầu cố định để tìm ngưỡng mà độ trễ, tỷ lệ lỗi và số lần commit DB bắt đầu suy giảm, đồng thời xác định nguyên nhân là CPU hay thời gian chờ khóa và commit.

  • Chuyển sang API tiếp nhận đưa yêu cầu cấp phát vào hàng đợi và phản hồi 202, kết hợp với consumer xử lý theo lô, rồi lập bảng so sánh số liệu trước và sau ở cùng mức tải.

  • Cố tình tạo ra lỗi mất dữ liệu khi ghi kép, thông điệp bị relay trùng lặp, đảo thứ tự và thông điệp độc hại, rồi ngăn chặn chúng bằng outbox, consumer idempotent, khóa phân vùng và DLQ.

  • Chuyển API đăng ký mất vài giây thành hợp đồng tiếp nhận → tra cứu trạng thái, đồng thời quyết định cách gửi theo lịch và phát hành thay đổi trong ADR dựa trên số liệu đo được.

  • Chuyển các lỗi âm thầm biến mất trong mô hình kết hợp hàm và hàng đợi sang workflow Temporal để theo dõi việc thử lại và phát hiện lỗi tại một nơi.

  • Thực hành chuyển đổi giữa đồng bộ và bất đồng bộ bằng cờ tính năng mà không cần triển khai, đồng thời luyện tập trình tự khôi phục để không làm mất các yêu cầu còn lại trong hàng đợi.

Khóa học này phù hợp với những ai sau đây.

  • Các lập trình viên backend thương mại điện tử từng gặp sự cố do lượng ghi vào DB tăng đột biến trong các đợt khuyến mãi/sự kiện.

  • Dành cho những người đã dùng Kafka nhưng còn bối rối về cách chuyển đổi API đồng bộ hiện có một cách an toàn.

  • Người chỉ biết về Outbox, tính idempotent và DLQ trên lý thuyết, muốn tự tái hiện các tình huống lỗi.

Chương trình học (8 phần · 32 bài · khoảng 195 phút)

  • Mục 0. Định hướng: xem trước kết quả hoàn chỉnh — Demo kết quả hoàn chỉnh: cùng mức tải, con số khác nhau

  • Phần 1. Khoảnh khắc cấu trúc đồng bộ sụp đổ — Khởi chạy môi trường thực hành, đọc API phát hành coupon đồng bộ của Loop Market, tạo tải lớn bằng k6, quan sát cách phát hành đồng bộ sụp đổ, chẩn đoán nút thắt: khóa một hàng và số lần commit

  • Phần 2. Tạo vùng đệm bằng hàng đợi — Kiến thức cơ bản về broker: topic · partition · consumer group, chuyển sang API tiếp nhận: phản hồi 202, gom các thao tác ghi DB bằng consumer xử lý theo lô, so sánh trước và sau với cùng mức tải, theo dõi độ trễ của consumer bằng chỉ số

  • Phần 3. Đảm bảo thông điệp không bị mất hay trùng lặp — cố ý tạo ra vấn đề ghi kép, transactional outbox, khi relay gặp sự cố: phát thông điệp trùng lặp, khóa idempotency và consumer idempotent, đảm bảo thứ tự và partition key: tích điểm, retry và DLQ, checklist kiểm tra các tình huống trùng lặp và mất thông điệp

  • Mục 4. Chuyển API xử lý lâu sang bất đồng bộ — Đo thời gian API đăng ký sản phẩm mất vài giây, hợp đồng tiếp nhận và tra cứu trạng thái, so sánh các phương án: giữ đồng bộ, luồng, hàng đợi, quy trình làm việc, áp dụng cho miền khác: chỉ thị giao hàng

  • Mục 5. Ghi lại các quyết định thiết kế — Gửi vào thời điểm cụ thể: ADR về lên lịch từng mục so với gửi theo lô, phát hành thay đổi: ảnh chụp toàn bộ so với delta theo từng hàng, chỉ tải dữ liệu trong phạm vi của bên tiêu thụ.

  • Phần 6. Thực thi bền vững: công cụ workflow — Hạn chế khi tự kết hợp hàm và hàng đợi, xây dựng workflow đăng sản phẩm bằng Temporal, phát hiện lỗi ở cấp workflow

  • Phần 7. Triển khai chuyển đổi và đồ án tổng kết — Chuyển đổi giữa đồng bộ và bất đồng bộ bằng feature flag, luyện tập rollback: những gì còn lại sau khi hoàn tác, đồ án tổng kết: hoàn thiện chuyển đổi Loop Market, tổng kết: danh sách kiểm tra chuyển đổi

Môi trường thực hành

Tài liệu thực hành (ZIP): Khởi chạy 9 dịch vụ chỉ với một tệp compose.yml; chạy nguyên trạng scenarios/sNN.sh ở mỗi bài học để tái hiện hiện tượng như trên màn hình bài giảng. Bao gồm các tập lệnh kiểm tra, kịch bản k6, bảng kiểm chuyển đổi, ADR và biểu mẫu hợp đồng tiếp nhận.

Kiến thức tiên quyết

  • Có kinh nghiệm xây dựng REST API (không giới hạn ngôn ngữ, mã thực hành dùng Python)

  • Kiến thức cơ bản về RDB và giao dịch

  • Có kinh nghiệm chạy container bằng Docker (khuyến nghị phân bổ cho Docker 4 CPU và ít nhất 8 GB bộ nhớ)

Những nội dung không được đề cập trong khóa học này

  • Cài đặt và vận hành cụm Kafka

  • Triển khai Kubernetes

  • Cách sử dụng các dịch vụ đám mây được quản lý cụ thể

Hướng dẫn

Lời thuyết minh trong video là giọng nói tổng hợp bằng AI. Các lệnh, chỉ số và kết quả trên màn hình là đầu ra thực tế được tạo ra trong môi trường thực hành. Tất cả dữ liệu đều là dữ liệu ảo phục vụ đào tạo; các con số có thể thay đổi tùy theo môi trường thực thi.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Lập trình viên backend thương mại điện tử từng gặp sự cố do lượng ghi vào DB tăng đột biến trong các đợt khuyến mãi/sự kiện.

  • Dành cho những ai đã dùng Kafka nhưng còn lúng túng, chưa biết cách chuyển đổi an toàn API đồng bộ hiện có.

  • Dành cho những ai chỉ biết về Outbox, tính idempotency và DLQ trên lý thuyết, muốn tự mình tái hiện lỗi.

Cần biết trước khi bắt đầu?

  • Kinh nghiệm xây dựng REST API (không giới hạn ngôn ngữ, mã thực hành bằng Python)

  • RDB và những kiến thức cơ bản về giao dịch

  • Có kinh nghiệm khởi chạy container bằng Docker (khuyến nghị cấp cho Docker 4 CPU và ít nhất 8 GB bộ nhớ)

Xin chào
Đây là dorian05202988

Xác minh sự nghiệp

Tôi là một chuyên gia dữ liệu với hơn 20 năm kinh nghiệm trong lĩnh vực cơ sở dữ liệu và CNTT. Trong vai trò DBA và quản lý nhóm Nền tảng Cơ sở dữ liệu, tôi phụ trách các nền tảng cơ sở dữ liệu, với chuyên môn về MySQL, PostgreSQL, Oracle, MongoDB, tinh chỉnh SQL, AWS, Terraform và Python. Dựa trên kinh nghiệm trong các lĩnh vực trò chơi, tài chính và dịch vụ CNTT, tôi trình bày về cơ sở dữ liệu và kiến trúc đám mây. Tôi đã xuất bản 『Học các mẫu SQL tinh chỉnh thực tế Oracle』 và 『Sổ tay ứng dụng dự án thực tế Oracle Pro*C』, đồng thời thuyết trình về serverless, lựa chọn cơ sở dữ liệu và chiến lược đa cơ sở dữ liệu tại AWS Summit 2018·2019 và sự kiện 데이터야 놀자 2020. Gần đây, tôi tập trung vào phân tích và khuyến nghị tinh chỉnh truy vấn chậm bằng Bedrock LLM, tự động hóa việc tính toán thông số DB, cũng như quy trình tra cứu thông qua máy chủ DB Meta MCP và bot Slack. Tôi giải thích về tự động hóa cơ sở dữ liệu dành cho nhà phát triển và việc ứng dụng AI vào công việc dành cho người không chuyên về phát triển thông qua các bài thực hành phù hợp với đối tượng và mục tiêu của từng khóa học. Thay vì áp dụng nguyên xi các đề xuất của AI, tôi truyền đạt các tiêu chí đánh giá như kiểm tra tính tương đương của kết quả, kế hoạch thực thi và điều kiện quan sát; nếu thiếu căn cứ thì tạm thời chưa áp dụng. Dữ liệu vận hành của công ty và thông tin xác thực không được đưa vào tài liệu giảng dạy.

Thêm

Chương trình giảng dạy

Tất cả

32 bài giảng ∙ (3giờ 15phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Chưa có đủ đánh giá.
Hãy trở thành tác giả của một đánh giá giúp mọi người!

Khóa học khác của dorian05202988

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Ưu đãi có thời hạn

52.800 ₫

20%

1.362.294 ₫