inflearn logo

Thiết kế hệ thống server chịu được sự gia tăng đột biến của lưu lượng truy cập - Dịch vụ phát hành Coupon

Thông qua việc triển khai hệ thống coupon theo thứ tự ưu tiên (ai đến trước được trước), chúng ta sẽ giải quyết các vấn đề cốt lõi trong backend thực tế như vấn đề đồng thời (concurrency), tính nhất quán của dữ liệu và xử lý lưu lượng truy cập đỉnh điểm (peak traffic). Bạn sẽ trực tiếp viết mã để phát hiện vấn đề, đồng thời lĩnh hội các kỹ thuật thiết yếu trong công việc thực tế như xử lý đồng bộ/bất đồng bộ và quản lý hàng đợi. Đây là khóa học dựa trên dự án giúp các nhà phát triển cấp thấp (Junior) và những người đang chuẩn bị xin việc tích lũy kinh nghiệm thực chiến.

(5.0) 3 đánh giá

319 học viên

Độ khó Cơ bản

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

Java
Java
Kotlin
Kotlin
MySQL
MySQL
Docker
Docker
Spring Boot
Spring Boot
Java
Java
Kotlin
Kotlin
MySQL
MySQL
Docker
Docker
Spring Boot
Spring Boot

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

  • Các kỹ thuật giải quyết vấn đề đồng thời và đảm bảo tính nhất quán của dữ liệu

  • Thiết kế phân tán tải lưu lượng thông qua xử lý đồng bộ/bất đồng bộ

  • Triển khai hệ thống hàng đợi và kiến trúc phòng thủ lưu lượng truy cập đột biến


Máy chủ vốn dĩ vẫn ổn định, nhưng tại sao lại sụp đổ khi sự kiện bắt đầu? 🚦


  • Khi sự kiện tặng phiếu giảm giá theo thứ tự ưu tiên bắt đầu, vô số yêu cầu sẽ cùng lúc tác động vào cùng một lượng hàng tồn kho.

  • Số lượng phát hành có thể nhiều hơn dự kiến, cùng một người dùng có thể nhận được hai phiếu, hoặc hồ sơ giữa các kho lưu trữ có thể không đồng nhất.


Thay vì học thuộc lòng một kiến trúc đã hoàn thiện, khóa học này sẽ trực tiếp phá vỡ và thiết kế lại một dịch vụ phát hành mã giảm giá.


Tái hiện vấn đề, đo lường TPS, P99, tỷ lệ lỗi và độ chính xác phát hành thực tế, sau đó lựa chọn DB Lock, Redis, Kafka, Cache, phòng chờ ảo và kiểm chứng lại với cùng một mức tải.


  • Mã nguồn được viết bằng Kotlin và Spring Boot.

  • Bạn sẽ chạy MySQL, Redis, Kafka bằng Docker Compose, và ngay cả khi mới làm quen với Redis và Kafka, bạn vẫn có thể theo kịp từng bước nếu đã có kiến thức cơ bản về HTTP, RDB và Spring Boot.


Đặc điểm của bài giảng này


📌 Chúng ta sẽ liên tục phát triển một dịch vụ coupon duy nhất, từ việc triển khai cơ bản đến xử lý đồng thời, xử lý bất đồng bộ, bộ nhớ đệm (cache), phục hồi tính nhất quán và kiểm soát lưu lượng truy cập.

📌 Tái hiện vấn đề → Đo lường điểm nghẽn → Lựa chọn thiết kế → Quy trình tái kiểm chứng với cùng điều kiện được lặp lại trong tất cả các phần.

📌 Không chỉ nhìn vào TPS và P99. Chúng ta còn kiểm tra xem chính xác N vé đã được phát hành hay chưa, quy tắc mỗi người một vé có được tuân thủ không, và liệu các sự kiện đã được lưu trữ đầy đủ vào MySQL hay chưa.

📌 So sánh trực tiếp nhiều giải pháp thay thế như Pessimistic Lock trong DB, Redis Lua, In-memory Queue và Kafka để đưa ra quyết định nên chọn cái gì và khi nào.

📌 Không chỉ dừng lại ở lý thuyết. Mã nguồn hoạt động, môi trường thực thi, kịch bản tải k6 và kết quả kiểm chứng trước sau khi thay đổi sẽ được lưu lại thành một bộ hoàn chỉnh.

Khuyên dùng cho những đối tượng sau

Lập trình viên Backend cấp độ Junior lần đầu đối mặt với lưu lượng truy cập cao

Khóa học này rất phù hợp cho những ai đang cảm thấy bối rối, không biết nên bắt đầu xử lý từ đâu giữa DB, Cache hay Queue khi có lượng yêu cầu (request) đổ dồn vào cùng lúc.

Sinh viên chuẩn bị xin việc mảng Backend muốn nâng cao năng lực thiết kế

Dành cho những ai muốn giải thích dự án thông qua vấn đề, sự lựa chọn và kết quả thay vì chỉ liệt kê tên các công nghệ.

Người học phát triển server muốn kiểm chứng hiệu suất bằng con số

Khóa học này sẽ giúp ích cho những ai muốn vượt qua mức CRUD cơ bản để phát triển hệ thống thông qua kiểm thử tải và tái hiện lỗi.

Khóa học này rất phù hợp với những ai đã quen với việc triển khai đơn giản nhưng cảm thấy bối rối không biết nên bắt đầu kiểm tra từ đâu và lựa chọn công nghệ nào trong tình huống lưu lượng truy cập tăng đột biến. Thông qua quá trình trực tiếp tái hiện vấn đề và cải thiện thiết kế dựa trên kết quả đo lường, bạn sẽ xây dựng được các tiêu chí đánh giá có thể áp dụng trực tiếp vào thực tế.


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

✓ 동시 요청에서도 정확한 수량과 1인 1매 규칙을 함께 지키는 발급 로직을 구현할 수 있습니다.

✓ Bạn có thể so sánh ưu nhược điểm của DB Pessimistic Lock, Redis Distributed Lock, Redis Lua Atomic Operation và lựa chọn phương thức phù hợp với từng tình huống.

✓ Kafka로 사용자 응답과 DB 저장을 분리하고, 실패 메시지를 DLT와 재처리 흐름으로 복구합니다.

✓ Có thể phát hiện và ứng phó với hiện tượng Cache Stampede, sự bùng nổ yêu cầu sau khi hết hàng, và sự không nhất quán giữa Redis và MySQL.

✓ Kết nối phòng chờ ảo với Gateway Rate Limit để người dùng bình thường phải chờ đợi, còn những kẻ lạm dụng (abuser) sẽ bị chặn ngay từ cổng vào.

✓ Không chỉ đo lường TPS, P99, tỷ lệ lỗi mà còn đo lường cả lượng phát hành, việc trùng lặp, hay thiếu sót khi lưu trữ để có thể chứng minh việc cải thiện thiết kế bằng kết quả thực tế.


Bạn sẽ học được những nội dung này

Tái hiện vấn đề và tìm nguyên nhân thông qua các con số

Hãy thử cố tình tạo ra tình trạng phát hành quá mức coupon và nghẽn cổ chai. Đọc các chỉ số TPS, P99, tỷ lệ lỗi và độ chính xác, sau đó so sánh trước và sau khi thiết kế trong cùng điều kiện tải k6. Tạo ra căn cứ cho lựa chọn tiếp theo bằng các giá trị đo lường chứ không phải bằng cảm tính.

Phát triển qua 6 giai đoạn từ triển khai cơ bản đến kiểm soát lưu lượng

Quá trình được tiến hành theo thứ tự: triển khai yêu cầu mã giảm giá, kiểm soát đồng thời, xử lý bất đồng bộ, chiến lược bộ nhớ đệm (cache), phục hồi tính nhất quán và kiểm soát lưu lượng. Bằng cách xác định các hạn chế của từng giai đoạn, bạn sẽ hiểu một cách tự nhiên lý do tại sao cần có thiết kế tiếp theo.

Kết nối nhiều công nghệ thành một luồng phát hành mã giảm giá duy nhất

Gateway và phòng chờ ảo kiểm soát tốc độ truy cập, trong khi Redis xử lý tồn kho và cấp phát trùng lặp một cách nguyên tử. Kafka Worker lưu trữ vào MySQL và bộ lập lịch batch sẽ kiểm tra sự không nhất quán giữa hai kho lưu trữ.

Mã nguồn và kết quả kiểm chứng sẽ được lưu lại cùng nhau

Ứng dụng được viết bằng Kotlin và Spring Boot. Chúng tôi sẽ chạy MySQL, Redis, Kafka bằng Docker Compose và sử dụng k6 để tạo tải thực tế nhằm kiểm tra TPS, P99, tỷ lệ lỗi, số lượng phát hành, việc trùng lặp và thiếu sót dữ liệu.

Lý do tôi tạo ra khóa học này

  • Khi nhìn vào một kiến trúc đã hoàn thiện, mọi lựa chọn đều có vẻ hiển nhiên, nhưng trong thực tế, bạn phải tìm ra nguyên nhân và chọn một trong số nhiều phương án thay thế.

  • Thay vì chỉ dạy cách thêm một công nghệ nổi tiếng khác, tôi muốn truyền tải khả năng quyết định xem nên kiểm soát yêu cầu ở đâu, đặt trạng thái nào ở đâu và dựa vào yếu tố gì để đánh giá sự thành công.

Khóa học này không đề cập đến

  • Khóa học không đi sâu vào các lĩnh vực xung quanh phiếu giảm giá như thanh toán và giao hàng, cũng như không bao quát toàn bộ lý thuyết về hệ thống phân tán.

  • Chúng tôi tập trung vào các điều kiện: phát hành số lượng phiếu giảm giá cố định trước, mỗi người một phiếu, thời gian bắt đầu xác định và kết thúc khi hết hàng.

Lưu ý trước khi học

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

• Sử dụng Kotlin, Spring Boot và Gradle.

• MySQL, Redis, Kafka được chạy bằng Docker Compose.

• Chúng ta sử dụng k6 để kiểm thử tải (load test).

• Bạn có thể thực hành trên các môi trường Windows, macOS, Linux có thể chạy được Docker.

• Khuyến nghị bộ nhớ từ 8GB trở lên để thực hành suôn sẻ.

Tài liệu học tập

• Cung cấp slide bài giảng và toàn bộ mã nguồn.

• Cung cấp môi trường thực thi theo từng phần và cấu hình Docker Compose.

• Có sẵn các kịch bản kiểm thử tải k6 mà bạn có thể trực tiếp thực hiện lặp lại.

• Kiểm tra tài liệu thiết kế của từng giai đoạn cùng với kết quả xác minh trước và sau khi thay đổi.

Kiến thức tiên quyết và lưu ý

• Cần có khái niệm cơ bản về HTTP và REST API.

• Sử dụng cơ sở dữ liệu quan hệ và các câu lệnh SQL ở mức độ SELECT, UPDATE.

• Bạn cần phải biết cú pháp Java hoặc Kotlin.

• Khuyến khích có kiến thức cơ bản về Spring Boot.

• Kinh nghiệm về Redis và Kafka không phải là bắt buộc.




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 Junior muốn tích lũy kinh nghiệm thực tế

  • Sinh viên chuẩn bị xin việc ở vị trí backend muốn học về kiểm soát đồng thời và xử lý lưu lượng truy cập lớn

  • Sinh viên đại học chuyên ngành Khoa học máy tính muốn trải nghiệm thiết kế hệ thống backend ở cấp độ thực tế.

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

  • Hiểu các cú pháp cơ bản của ngôn ngữ lập trình backend (Java, Python, v.v.)

  • Kiến thức cơ bản về Cơ sở dữ liệu và SQL

  • Các khái niệm cơ bản về REST API và giao tiếp HTTP

Xin chào
Đây là apiece

Xác minh sự nghiệp

1,029

Học viên

39

Đánh giá

43

Trả lời

4.9

Xếp hạng

5

Các khóa học

Tôi đã từng làm việc tại Kakao, SK với tư cách là nhà phát triển,
từng thiết kế và vận hành nhiều hệ thống backend đa dạng trong môi trường dịch vụ thực tế.

Tôi đang tạo ra các nội dung chia sẻ kiến thức với hy vọng rằng
những sai lầm và trăn trở mà tôi đã trải qua có thể giúp tiết kiệm dù chỉ một chút thời gian và sự lựa chọn của các bạn học viên.

Nếu bạn có bất kỳ ý kiến hoặc điểm nào cần cải thiện về nội dung,
xin vui lòng liên hệ với tôi qua email bên dưới bất cứ lúc nào.
Tôi rất mong nhận được những phản hồi chân thành từ các bạn. Xin cảm ơn.
apiece.dev.ai@gmail.com

Thêm

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

Tất cả

59 bài giảng ∙ (10giờ 17phú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á

Tất cả

3 đánh giá

5.0

3 đánh giá

  • maruhxn님의 프로필 이미지
    maruhxn

    Đánh giá 11

    Đánh giá trung bình 5.0

    5

    61% đã tham gia

    Những vấn đề có thể phát sinh khi có lưu lượng truy cập lớn vốn chưa được sắp xếp rõ ràng trong đầu tôi, nhưng nhờ bài giảng này mà những kiến thức rời rạc dường như đã được kết nối lại làm một.. Tôi rất biết ơn vì có thể được nghe một bài giảng như thế này.

    • apiece
      Giảng viên

      Chào bạn maruhxn, Tôi rất vui khi biết rằng những kiến thức rời rạc đã được kết nối lại thành một, điều đó cho thấy ý định của tôi khi tạo ra bài giảng này đã được truyền tải tốt. Hy vọng bài giảng đã giúp bạn thiết lập được các tiêu chuẩn khi nhìn nhận vấn đề lưu lượng truy cập lớn (large-scale traffic). Cảm ơn bạn đã để lại đánh giá khóa học! 😊

  • jorealbusiness님의 프로필 이미지
    jorealbusiness

    Đánh giá 7

    Đánh giá trung bình 5.0

    5

    31% đã tham gia

    • wlgusqkr116518님의 프로필 이미지
      wlgusqkr116518

      Đánh giá 3

      Đánh giá trung bình 5.0

      5

      80% đã tham gia

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

      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

      16.500 ₫

      70%

      1.155.932 ₫