Lập trình Reactive cho xử lý song song hơn 20,000+ RPS được chia sẻ bởi người phỏng vấn Naver

Đây là khóa học dành cho những nhà phát triển đang tìm kiếm giải pháp căn bản trong môi trường mà phản hồi chậm dần khi lưu lượng truy cập tăng lên, thread pool nhanh chóng bị cạn kiệt và tình trạng nghẽn cổ chai trở nên nghiêm trọng khi các lượt gọi API bên ngoài tăng cao. Khóa học giúp bạn nhìn nhận vấn đề từ góc độ thay đổi cấu trúc thay vì chỉ đơn thuần là mở rộng máy chủ. Thông qua khóa học này, trước tiên bạn sẽ hiểu được những hạn chế của mô hình Thread per Request truyền thống trong Spring MVC. Bạn sẽ xác định ở cấp độ mã nguồn lý do tại sao CPU vẫn còn trống nhưng hiệu suất xử lý không tăng lên, và cách thức Blocking I/O thực sự chiếm dụng tài nguyên hệ thống như thế nào. Tiếp theo, bạn sẽ học về khái niệm và đặc tả chuẩn của Reactive Streams, đồng thời nắm vững cách xử lý luồng dữ liệu bằng Mono và Flux của Reactor. Không chỉ dừng lại ở cách sử dụng đơn thuần, bạn sẽ được trải nghiệm thực tế cách luồng dữ liệu bắt đầu, được tiêu thụ và cách điều chỉnh lưu lượng xử lý. Đặc biệt, bạn cũng sẽ trực tiếp triển khai phương thức thiết kế sử dụng Back Pressure để ngăn ngừa lỗi OOM (Out Of Memory) hoặc quá tải. Ngoài ra, bạn sẽ hiểu về cấu trúc xử lý dựa trên Event Loop của Spring WebFlux và tiến hành thực hành so sánh cách Non-Blocking I/O hoạt động trong quá trình xử lý yêu cầu thực tế. Bằng cách đặt MVC và WebFlux cạnh nhau để xác nhận sự khác biệt về cấu trúc, bạn cũng sẽ đúc kết được tiêu chí đánh giá khi nào nên lựa chọn Reactive. Khóa học không chỉ dừng lại ở mức độ "học về bất đồng bộ". Bạn sẽ học được cách xử lý nhiều yêu cầu hơn với ít thread hơn, cách duy trì luồng ổn định trong môi trường phụ thuộc nhiều vào API bên ngoài, và tư duy thiết kế để đảm bảo hiệu suất xử lý trong môi trường có tính đồng thời cao.

(5.0) 4 đánh giá

76 học viên

Độ khó Nhập môn

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

Java
Java
Spring
Spring
Spring Boot
Spring Boot
Parallel Processing
Parallel Processing
webflux
webflux
Java
Java
Spring
Spring
Spring Boot
Spring Boot
Parallel Processing
Parallel Processing
webflux
webflux

Đánh giá từ những học viên đầu tiên

Đánh giá từ những học viên đầu tiên

5.0

5.0

텐버거!

88% đã tham gia

Tôi đã xem rất hiệu quả vì nội dung được chọn lọc kỹ lưỡng, chỉ tập trung vào những phần cốt lõi!

5.0

letes ky

88% đã tham gia

Tôi đã xem và rất ấn tượng.. Dù đang làm lập trình viên được 6 năm rồi nhưng bài giảng này vẫn khiến tôi cảm thấy mình còn nhiều thiếu sót.. Tuy là một chủ đề đơn giản nhưng nội dung rất hay và đi sâu vào trọng tâm. Xin cảm ơn bạn.

5.0

keny

100% đã tham gia

Cảm ơn bạn, nội dung rất hay.

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

  • Cách thiết kế và triển khai trực tiếp máy chủ Non-Blocking dựa trên Spring WebFlux

  • Khả năng thiết kế và kiểm soát luồng dữ liệu (data stream) bằng cách sử dụng Mono và Flux

  • Năng lực thiết kế cấu trúc áp dụng Back Pressure để ngăn ngừa quá tải

  • Khả năng giải thích sự khác biệt về cấu trúc giữa MVC và WebFlux và đưa ra tiêu chí lựa chọn

  • Kỹ thuật thiết kế kiến trúc xử lý tính đồng thời cao với ít luồng (thread)

  • Khả năng nhận diện và giải quyết các vấn đề phát sinh khi sử dụng kết hợp mã chặn (blocking code) và mã phản ứng (reactive code)

⚡ Lập trình Reactive được chia sẻ bởi người phỏng vấn Naver, người trực tiếp xử lý traffic thời gian thực

  • Nội dung dưới đây là nội dung cuộc hội thoại thực tế.

😁Nhà phát triển Toss : Dạo này traffic cứ bùng nổ liên tục... CPU thì vẫn ổn nhưng thread không chịu nổi nên bị nghẽn hết rồi ㅠㅠ

😄 Hong : Toss đang sử dụng cấu trúc nào vậy?? Đang xử lý theo cấu trúc Thread per Request à?

😁 Nhà phát triển Toss : Ừ… Hầu hết dựa trên MVC nên khi các cuộc gọi API bên ngoài tăng lên, hiện tượng nghẽn cổ chai sẽ xảy ra do các đoạn bị chặn (blocking). Cảm giác như dù có tăng cường cơ sở hạ tầng thì cũng không giải quyết được tận gốc vấn đề.

😄 Người phỏng vấn Naver(Nhà phát triển) : Thật ra vì vậy mà tôi hơi ghét điều đó. Dù ưu nhược điểm rất rõ ràng... nhưng tôi nghĩ xét về khía cạnh thông lượng thì không gì có thể theo kịp lập trình phản ứng (reactive programming), dẫu biết là sẽ có rào cản về việc học tập (learning curve) một chút ㅠ

😁 Nhà phát triển Toss: Haiz.. đúng vậy nên tôi mới đang suy nghĩ đây. Tôi cũng định đưa Webflux vào luôn nhưng việc áp dụng cho toàn bộ hệ thống legacy hiện tại cũng thấy áp lực quá ㅠㅠ

😄 Người phỏng vấn Naver (Nhà phát triển) : kkk Vì vậy, tôi đã chuyển đổi một số dịch vụ sang cấu trúc Reactive dựa trên WebFlux. Mặc dù không thực hiện cho tất cả, nhưng vì xử lý non-blocking dù chỉ một phần, nên thông lượng vẫn đáp ứng tốt ngay cả với cùng một lượng tài nguyên.

😄 Hong : Nhưng mà nếu chỉ nghe qua khái niệm rồi áp dụng Reactive ngay thì chẳng phải có khi còn trở nên phức tạp hơn sao?

😄 Người phỏng vấn Naver (Nhà phát triển) : Đúng vậy, thực ra chỉ biết Mono và Flux thôi thì không giải quyết được hết mọi vấn đề đâu. Vì có rất nhiều vấn đề thực tế như lỗi mạng, nên tôi nghĩ ít nhất phải cân nhắc đến các yếu tố như Event Loop, Back Pressure, hay việc sử dụng lẫn lộn với mã Blocking.

😄 Người phỏng vấn Naver (Nhà phát triển) : Nhân tiện nhớ ra, tôi muốn thử làm cái này, bạn thấy thế nào?? ㅋㅋㅋㅋ

😄 Hong : A.... tiêu rồi kkkkkkk không phải mình cố ý làm vậy đâu;;

😁 Nhà phát triển Toss: Tôi thì thích quá luôn ㅋㅋㅋㅋ Cực kỳ đề xuất!!! Tôi cũng sẽ nghe thử... Cứ mãi làm theo kiểu MVC nên dạo này cảm thấy phong độ?? hơi bị giảm sút ㅋㅋㅋㅋ

🌊 Liệu lập trình viên Backend chỉ cần giỏi phương thức đồng bộ là đủ?

Các bạn hiện đang vận hành máy chủ theo cấu trúc nào? Các bạn có đang hài lòng và vận hành tốt dựa trên Spring MVC truyền thống không?? Thế nhưng, các bạn có đang trải nghiệm lượng truy cập lớn và xử lý nó một cách thỏa đáng không?? Chúng ta hãy cùng giả định tình huống như thế này nhé.

  • Vấn đề phản hồi chậm do số lượng cuộc gọi API bên ngoài tăng lên

  • Tình trạng thread pool nhanh chóng bị cạn kiệt

  • Cấu trúc mà lưu lượng truy cập tăng lên kéo theo chi phí hạ tầng cũng tăng theo

  • Kinh nghiệm khi mã nguồn ngày càng trở nên phức tạp dù phải xử lý bất đồng bộ

Trong môi trường backend hiện đại, chúng ta không chỉ hướng tới việc viết mã hoạt động tốt. Vượt qua quan điểm này, khả năng thiết kế cấu trúc có thể xử lý lưu lượng truy cập một cách hiệu quả đang ngày càng trở nên quan trọng hơn. Các bạn đang suy ngẫm và hiện thực hóa những phần này như thế nào?

Câu trả lời cho câu hỏi này nằm ngay trong khóa học này. Hãy cùng học về Spring WebFlux thông qua việc tìm hiểu cách xử lý hiệu quả nhiều yêu cầu với ít luồng (thread), phương pháp tối đa hóa tài nguyên hệ thống dựa trên Non-Blocking I/O, cho đến cách thiết kế luồng dữ liệu ổn định bằng cách tận dụng Back Pressure.

Đây không chỉ đơn thuần là một bài giảng về lý thuyết. Tôi hy vọng bạn sẽ dành thời gian để học cách trực tiếp sử dụng và triển khai kỹ năng Webflux thông qua nhiều mã nguồn thực tế khác nhau. 🚀

🔥 Tại sao lại là Spring WebFlux!!

Spring WebFlux là một framework web Reactive dựa trên cơ chế non-blocking. Trong khi Spring MVC truyền thống theo mô hình Thread per Request, thì WebFlux sử dụng kiến trúc non-blocking dựa trên vòng lặp sự kiện (event loop).

Spring WebFlux có các đặc điểm sau đây.

  • Non-Blocking I/O

    • Nó không chiếm dụng luồng (thread) trong khi xử lý yêu cầu mà sử dụng tài nguyên một cách hiệu quả cho đến khi các tác vụ I/O hoàn tất. Nhờ đó, nó có thể xử lý mức độ đồng thời cao ngay cả với ít luồng.

  • Reactive Streams & Back Pressure

    • Hoạt động dựa trên tiêu chuẩn Reactive Streams, và thông qua Back Pressure có thể điều chỉnh tốc độ xử lý giữa bên sản xuất và bên tiêu thụ dữ liệu. Điều này giúp ngăn ngừa tình trạng quá tải hệ thống do lượng dữ liệu đầu vào quá lớn.

  • Xử lý dựa trên Event Loop

    • Thay vì mô hình Thread per Request truyền thống, nó hoạt động dựa trên cấu trúc vòng lặp sự kiện (event loop), cung cấp cấu trúc xử lý hiệu quả ngay cả trong môi trường có lượng yêu cầu đồng thời lớn.

  • Khả năng xử lý đồng thời cao

    • Nó có thế mạnh trong môi trường lưu lượng truy cập cao bằng cách xử lý các tác vụ có thời gian chờ đợi lâu như gọi API bên ngoài hoặc I/O DB mà không gây nghẽn luồng (thread blocking).

  • Functional & Annotation

    • Không chỉ hỗ trợ phát triển dựa trên Annotation tương tự như Spring MVC, nó còn hỗ trợ cấu hình API theo phong cách lập trình hàm (functional style) sử dụng RouterFunction.

Trong tài liệu chính thức, Spring Webflux được mô tả như sau.

Spring Web MVC, khung web gốc đi kèm trong Spring Framework, được xây dựng chuyên biệt cho Servlet API và các Servlet container. Khung web ngăn xếp phản ứng (reactive-stack), Spring WebFlux, đã được thêm vào sau đó trong phiên bản 5.0. Nó hoàn toàn không chặn (non-blocking), hỗ trợ áp suất ngược (back pressure) của Reactive Streams, và chạy trên các máy chủ như Netty cũng như các Servlet container.

Cả hai khung web đều phản ánh tên của các mô-đun nguồn tương ứng (spring-webmvcspring-webflux) và cùng tồn tại song song trong Spring Framework. Mỗi mô-đun là tùy chọn. Các ứng dụng có thể sử dụng một trong hai mô-đun hoặc trong một số trường hợp là cả hai — ví dụ: các bộ điều khiển Spring MVC với WebClient phản ứng.


( Spring Web MVC, khung web đầu tiên được bao gồm trong Spring Framework, được thiết kế dựa trên Servlet API và Servlet container. Sau đó, trong phiên bản 5.0, Spring WebFlux, một khung web dựa trên Reactive stack, đã được thêm vào.

Spring WebFlux hoạt động hoàn toàn theo cơ chế không chặn (Non-Blocking) và hỗ trợ Back Pressure của Reactive Streams. Ngoài ra, nó không chỉ có thể chạy trên các máy chủ như Netty mà còn có thể hoạt động trên các Servlet container truyền thống.

Hai khung chương trình web này lấy tên theo tên mô-đun nguồn tương ứng (spring-webmvc, spring-webflux) và cùng tồn tại song song trong Spring Framework. Mỗi mô-đun có thể được sử dụng một cách tùy chọn. Một ứng dụng có thể chỉ sử dụng một trong hai, hoặc trong một số trường hợp, có thể sử dụng cả hai mô-đun cùng nhau. Ví dụ, có thể sử dụng bộ điều khiển Spring MVC kết hợp với WebClient dựa trên Reactive. )

Các bạn không nên chỉ hiểu đơn giản Spring WebFlux là bất đồng bộ. Bạn cần phải hiểu về xử lý dựa trên Non-Blocking I/O, khả năng xử lý đồng thời cao với ít tài nguyên, Back Pressure, v.v. Đặc biệt, trong môi trường MSA với cấu trúc có nhiều sự giao tiếp giữa các dịch vụ, phương thức Reactive đang trở thành một lựa chọn bắt buộc chứ không còn là tùy chọn nữa.

Thông qua khóa học này, tôi khuyên bạn nên hiểu về lập trình Reactive không chỉ đơn thuần là bất đồng bộ mà còn là kỹ thuật để đảm bảo thông lượng thực tế, đồng thời tích lũy kinh nghiệm để có thể áp dụng ngay thông qua việc thực hành kiểm thử thực tế. 🚀

🚀 Các thông báo tuyển dụng thực tế yêu cầu những gì??

JD nhà phát triển máy chủ của Toss

JD cho vị trí nhà phát triển máy chủ (Server Developer) tại Toss Payments

JD nhà phát triển server của các công ty con thuộc tập đoàn Daou Kiwoom

JD nhà phát triển máy chủ của Hecto Group

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

📌 Khóa học dựa trên kinh nghiệm thiết kế Reactive trong môi trường nền tảng Naver

  • Khóa học này không chỉ đơn thuần giải thích về cú pháp WebFlux. Chúng tôi sẽ giải thích từ bối cảnh thực tế: những vấn đề gặp phải trong môi trường có lưu lượng truy cập lớn và phụ thuộc nhiều vào API bên ngoài, và lý do tại sao cấu trúc Reactive lại được lựa chọn.

    “Tại sao lại là WebFlux?” Đây là bài giảng đưa ra câu trả lời thực tế cho câu hỏi đó.


📌 Chương trình học với hơn 90% là thực hành

  • Reactive rất khó để hiểu chỉ qua lý thuyết. Bạn chỉ có thể thực sự nắm bắt được nó khi trực tiếp kiểm tra luồng hoạt động của Mono và Flux, phương thức xử lý Non-Blocking và cấu trúc dựa trên Event Loop thông qua mã code thực tế.

    Khóa học này được thiết kế để bạn có thể hiểu thông qua việc trực tiếp trải nghiệm và quan sát luồng Reactive bằng cách dành phần lớn thời gian cho việc thực hành.


📌 Nâng tầm kỹ năng thông qua việc xác nhận sự khác biệt về cấu trúc giữa MVC và WebFlux

  • Chỉ một từ “bất đồng bộ” là không đủ để giải thích. Bạn có thể chuẩn bị cho sự nghiệp lập trình viên khác biệt của mình thông qua việc hiểu về những hạn chế của mô hình Thread per Request, các điểm nghẽn do phân đoạn blocking tạo ra, và cách thức hoạt động của kiến trúc non-blocking.


📌 Mang đến tầm nhìn cao hơn cho các lập trình viên cấp Junior

  • Đối với cấp quản lý (senior), cung cấp tiêu chuẩn lựa chọn kiến trúc

    Vượt xa giới hạn của một nhà phát triển chỉ biết tạo máy chủ CRUD đơn giản, bạn có thể nuôi dưỡng năng lực thiết kế có tính đến lưu lượng truy cập và hiệu quả tài nguyên.

    WebFlux không phải là “một công nghệ theo xu hướng, mà là quá trình thấu hiểu tường tận về một trong những lựa chọn trong môi trường có độ đồng thời cao.”

🤭 Vị giám khảo phỏng vấn Naver đã cùng chuẩn bị bài giảng này!

Ande (Naver)

Nhà phát triển Backend Server 10 năm kinh nghiệm

Hãy nhấp vào tên của các giảng viên để xem hồ sơ chi tiết hơn!

Tôi tạo ra khóa học này vì muốn chia sẻ và thảo luận với mọi người về những kỹ năng và công nghệ đa dạng mà tôi biết. Hy vọng mọi người có thể tiếp thu những bí quyết của tôi để không mắc phải những sai lầm tương tự như tôi đã từng.

Tôi tham gia cùng mọi người thông qua sự giới thiệu của người quen (người phỏng vấn tại Kakao) và thực hiện việc ghi hình dưới sự dẫn dắt của Hong. Tôi đã cố gắng lồng ghép nhiều nội dung nhất có thể, vì vậy rất mong nhận được sự quan tâm của các bạn. Ngoài ra, xin vui lòng đặt câu hỏi một cách thoải mái. Tôi sẽ cố gắng kiểm tra và trả lời sớm nhất có thể. Xin cảm ơn.

[Hiện tại] Nhà phát triển Server tại Naver (trụ sở chính)

[Trước đây] Nhà phát triển Backend thuộc Tập đoàn Shinsegae

[Trước đây] Nhà phát triển máy chủ tại startup chăm sóc sức khỏe

[Trước đây] Tốt nghiệp chuyên ngành Khoa học Máy tính hệ 4 năm tại Seoul

Lưu ý

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

  • Hệ điều hành

    • Apple M3 Air

    • Docker version 28.0.0, build f9ced58158

    • java 17.0.12 2024-07-16 LTS

Tôi đang vận hành một phòng chat mở để giúp các bạn chuẩn bị cho sự nghiệp của mình. Rất mong nhận được sự quan tâm của các bạn!

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

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

  • Nhà phát triển backend luôn cảm thấy bất an về vấn đề cạn kiệt thread pool khi lưu lượng truy cập tăng lên.

  • Nhà phát triển Spring cảm thấy những hạn chế của cấu trúc MVC nhưng vẫn chưa tìm được giải pháp thay thế

  • Những nhà phát triển muốn áp dụng Reactive nhưng chưa thể bắt đầu vì khái niệm còn mơ hồ.

  • Nhà phát triển trong một nhóm đang gặp gánh nặng về chi phí do chỉ giải quyết vấn đề bằng cách mở rộng cơ sở hạ tầng.

  • Nhà phát triển nền tảng đang lo lắng về vấn đề trễ giao tiếp giữa các dịch vụ trong môi trường MSA

  • Nhà phát triển đang khao khát phát triển sự nghiệp do thiếu kinh nghiệm thiết kế môi trường có tính đồng thời cao (high concurrency).

Xin chào
Đây là Hong

8,088

Học viên

521

Đánh giá

147

Trả lời

4.7

Xếp hạng

27

Các khóa học

Giới thiệu bản thân

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ó, và hiện tại tôi đang đảm nhận vai trò phát triển server nền tảng 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 học tập của bản thân, cùng với những vấn đề và giải pháp thực tế mà các bạn có thể gặp phải trong công việc.

 

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ự.

 

Kinh nghiệm của người chia sẻ kiến thức

[Cựu] Nhà phát triển Blockchain liên quan đến IP Sandbox

[Cựu] Nhà phát triển Backend Metaverse

[Hiện tại] Nhà phát triển máy chủ dày dặn kinh nghiệm tại Pangyo

 

Lịch sử phỏng vấn

Các thắc mắc khác

  • unduck2022@gmail.com

Thêm

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

Tất cả

25 bài giảng ∙ (6giờ 0phú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ả

4 đánh giá

5.0

4 đánh giá

  • youngba8935643님의 프로필 이미지
    youngba8935643

    Đánh giá 10

    Đánh giá trung bình 5.0

    5

    88% đã tham gia

    Tôi đã xem rất hiệu quả vì nội dung được chọn lọc kỹ lưỡng, chỉ tập trung vào những phần cốt lõi!

    • jhong
      Giảng viên

      Chào bạn Tenburger, cảm ơn bạn đã để lại đánh giá tốt nhé!!

  • kyletes6021420님의 프로필 이미지
    kyletes6021420

    Đánh giá 2

    Đánh giá trung bình 5.0

    5

    88% đã tham gia

    Tôi đã xem và rất ấn tượng.. Dù đang làm lập trình viên được 6 năm rồi nhưng bài giảng này vẫn khiến tôi cảm thấy mình còn nhiều thiếu sót.. Tuy là một chủ đề đơn giản nhưng nội dung rất hay và đi sâu vào trọng tâm. Xin cảm ơn bạn.

    • jhong
      Giảng viên

      Xin chào bạn letes ky, cảm ơn bạn đã để lại đánh giá tốt nhé!!

  • sdl1355126님의 프로필 이미지
    sdl1355126

    Đánh giá 19

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    Cảm ơn bạn, nội dung rất hay.

    • gjsu540607534님의 프로필 이미지
      gjsu540607534

      Đánh giá 10

      Đánh giá trung bình 5.0

      5

      92% đã tham gia

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

      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

      39 ₫

      50%

      2.089.263 ₫