Lập trình Reactive cho xử lý song song 20,000+ RPS do chuyên gia phỏng vấn của Naver chia sẻ
Đây là khóa học dành cho các nhà phát triển muốn tìm ra giải pháp căn bản trong môi trường mà lưu lượng truy cập càng tăng thì phản hồi càng chậm, thread pool nhanh chóng cạn kiệt và tình trạng nghẽn cổ chai càng nghiêm trọng khi số lượng lời gọi API bên ngoài tăng lên. Khóa học không chỉ tập trung vào việc mở rộng máy chủ một cách đơn thuần, mà còn giúp bạn nhìn nhận vấn đề từ góc độ thay đổi chính cấu trúc hệ thống.
Thông qua khóa học này, trước tiên bạn sẽ hiểu những giới hạn của mô hình Thread per Request truyền thống trong Spring MVC. Bạn sẽ kiểm tra ở cấp độ mã nguồn lý do vì sao CPU vẫn còn dư nhưng thông lượng không tăng, cũng như cách Blocking I/O thực sự chiếm dụng tài nguyên hệ thống.
Tiếp theo, bạn sẽ tìm hiểu khái niệm và đặc tả tiêu chuẩn của Reactive Streams, đồng thời học cách xử lý luồng dữ liệu bằng Mono và Flux của Reactor. Không dừng lại ở việc sử dụng đơn giản, bạn sẽ thực hành để nắm được cách luồng dữ liệu bắt đầu, được tiêu thụ và điều tiết thông lượng như thế nào. Đặc biệt, bạn cũng sẽ trực tiếp triển khai phương pháp thiết kế sử dụng Back Pressure để ngăn ngừa OOM hoặc tình trạng quá tải.
Ngoài ra, bạn sẽ hiểu cấu trúc xử lý dựa trên event loop của Spring WebFlux và 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 để kiểm tra sự khác biệt về mặt cấu trúc, khóa học cũng giúp bạn hệ thống hóa các tiêu chí quyết định 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ách xử lý nhiều yêu cầu hơn với ít thread hơn, duy trì luồng hoạt động ổn định trong môi trường phụ thuộc nhiều vào API bên ngoài, đồng thời phát triển tư duy thiết kế để đảm bảo thông lượng trong môi trường có mức độ đồng thời cao.
Khóa học Lập trình Reactive do người phỏng vấn Naver hướng dẫn nhằm xử lý song song hơn 20,000 RPS là khóa học mà tôi đã tham gia để mở rộng hiểu biết về cấu trúc máy chủ và phương thức xử lý thời gian thực trong khi thực hiện dự án liên kết doanh nghiệp SSAFY.
Trong dự án hiện tại, có nhiều tình huống cần phải cân nhắc về cấu trúc xử lý phản hồi và tính đồng thời như liên kết máy chủ AI, xử lý dữ liệu thời gian thực, giao tiếp API bên ngoài, v.v. Đúng vào thời điểm tôi đang thắc mắc về những hạn chế của cấu trúc dựa trên Spring MVC truyền thống, khóa học này đã giúp ích rất nhiều trong việc thấu hiểu luồng tổng quát về Lập trình Reactive và WebFlux.
Đặc biệt, tôi rất thích cách giải thích đi kèm với thực hành thay vì chỉ là lý thuyết suông về các khái niệm như sự khác biệt giữa cấu trúc Thread per Request và cấu trúc dựa trên Event Loop, phương thức xử lý luồng dữ liệu (data stream) sử dụng Mono và Flux, hay khái niệm kiểm soát quá tải thông qua Back Pressure. Trước đây, tôi chỉ đơn thuần nghĩ WebFlux là một "framework bất đồng bộ", nhưng qua khóa học này, tôi đã cảm nhận được rằng đây là một cách tiếp cận mang tính cấu trúc để xử lý tính đồng thời cao với ít tài nguyên.
Mặc dù tôi chưa áp dụng WebFlux ngay lập tức vào dự án liên kết doanh nghiệp đang thực hiện, nhưng những khái niệm học được từ khóa học này đã giúp ích rất nhiều trong quá trình cân nhắc cấu trúc tính năng thời gian thực hoặc giao tiếp với máy chủ AI. Đặc biệt, tầm nhìn của tôi về sự khác biệt giữa Blocking I/O và Non-blocking, cũng như các vấn đề nghẽn cổ chai có thể xảy ra khi có nhiều lượt gọi API bên ngoài, đã được mở rộng hơn trước.
Ngoài ra, việc khóa học đề cập đến cả những nội dung cần cân nhắc trong thực tế như SSE, WebSocket, Retry pattern, luồng xử lý lỗi, v.v., đã mang lại cho tôi những trải nghiệm vượt xa việc chỉ học cú pháp đơn thuần.
Tôi nghĩ rằng trong tương lai, khi quy mô dự án lớn hơn hoặc trong môi trường đòi hỏi xử lý tính đồng thời cao và liên kết bên ngoài nhiều hơn, tôi chắc chắn muốn cân nhắc việc thực sự áp dụng WebFlux và cấu trúc Reactive. Đây là một khóa học giúp tôi có được tiêu chí đánh giá để lựa chọn công nghệ phù hợp trong từng tình huống, thay vì chỉ tiếp cận Reactive như một xu hướng công nghệ đơn thuần.
5.0
goldrex123
100% đã tham gia
Đây là khóa học giúp bạn có thể tìm hiểu tổng quan về WebFlux :)
Bạn sẽ nhận được điều này sau khi học.
Cách tự thiết kế và triển khai 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 bằ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
Khả năng xác định và giải quyết các vấn đề phát sinh khi sử dụng kết hợp mã blocking và mã reactive
Phát triển · Lập trình · Backend
Thay vì tăng số lượng máy chủ, hãy thay đổi cấu trúc Lập trình Reactive không làm tắc nghẽn luồng**
Khóa học này không chỉ gói gọn Reactive trong một từ “bất đồng bộ”, mà là khóa học thực hành về cấu trúc giúp xử lý nhiều yêu cầu hơn với cùng một lượng tài nguyên. Mục tiêu là xây dựng cấu trúc có thể tiếp nhận hơn 20,000 yêu cầu mỗi giây mà không cần tăng số lượng luồng. Bắt đầu từ Reactive Streams và Back Pressure, bạn sẽ trực tiếp sử dụng Mono và Flux của Reactor, sau đó tiếp tục tìm hiểu các mẫu triển khai thực tế dựa trên Spring WebFlux.
Độ khó: Nhập môn
Tập trung thực hành
Java 17 · Spring Boot
Thời hạn học không giới hạn
Thread per Request → vòng lặp sự kiệnGóc nhìn thay đổi chính cấu trúc
Từ khái niệm đến các mẫu hình thực tếgần như toàn bộ thời lượng đều được dành cho thực hành
Mono · Flux · Back PressureXác nhận bằng code thay vì khái niệm
Giáo trình được xây dựng cùng lập trình viên máy chủ hiện đang làm việc tại Naver với 10 năm kinh nghiệm Mức độ khó dành cho người mới bắt đầu, nhưng các mẫu hình thực tế trong phần 5·6 cũng là những nội dung mới mẻ ngay cả với những người đang sử dụng WebFlux Môi trường thực hành: macOS (Apple M3) · Java 17 · Docker
Lý do khóa học này bắt đầu
Bắt đầu từ lời than phiền rằng tất cả các thread đều bị chặn.
Dưới đây là nội dung cuộc trò chuyện thực tế. Đây là cuộc trò chuyện giữa một nhà phát triển của Toss, người than phiền rằng lưu lượng truy cập tăng đột biến, và một nhà phát triển của Naver, người đã thử chuyển đổi một số dịch vụ sang WebFlux.
Lập trình viên TossDạo này traffic cứ tăng vọt liên tục... CPU thì vẫn ổn, nhưng các thread không chịu nổi, bị nghẽn hết rồi ㅠㅠ
HongToss đang sử dụng kiến trúc nào vậy? Có đang xử lý theo kiến trúc Thread per Request không?
Lập trình viên TossỪ… Phần lớn đều dựa trên MVC, nên khi số lượng lệnh gọi API bên ngoài tăng lên, các đoạn bị chặn sẽ gây ra nghẽn. Dù tăng cường hạ tầng thì cảm giác vẫn không giải quyết được vấn đề cốt lõi.
Ande (Naver)Vì vậy, thật ra tôi hơi không thích cách đó. Đúng là ưu và nhược điểm khá rõ ràng... nhưng xét về thông lượng thì tôi nghĩ không thể sánh với reactive. Tất nhiên, đường cong học tập cũng hơi dốc một chút ㅠ
Ande (Naver)Vì vậy, tôi đã chuyển một số dịch vụ sang cấu trúc Reactive dựa trên WebFlux.
Không phải tất cả, chỉ chuyển một phần sang non-blocking thôi mà thông lượng vẫn theo kịp khá tốt trên cùng một lượng tài nguyên
Ande (Naver)Chỉ biết Mono và Flux thì không thể giải quyết được mọi vấn đề. Tôi nghĩ ít nhất cũng nên cân nhắc đến event loop, back pressure và việc dùng lẫn mã blocking
Hongà.... bị bắt nhầm rồi ㅋㅋㅋㅋㅋ Mình không định làm chuyện này đâu;;
Nhà phát triển Tossthì tuyệt vời quá còn gì haha... Tôi cũng sẽ thử học một lần
Và thế là khóa học này được ra đời. Những nội dung mà người đã trực tiếp thực hiện việc chuyển đổi chỉ ra rằng “cần phải biết đến mức này” đã được đưa nguyên vẹn vào chương trình học.
“
Xét về thông lượng không thể sánh kịp với Reactive.
Kỹ sư phát triển máy chủ hiện đang làm việc tại trụ sở Naver · 10 năm kinh nghiệm · trực tiếp chuyển đổi một số dịch vụ sang WebFlux
Những gì bạn đang trải qua hiện nay
Lập trình viên backend chỉ cần thành thạo phương thức đồng bộ là đủ sao?
Nếu hệ thống đang vận hành ổn định dựa trên Spring MVC truyền thống thì đó là điều đáng mừng. Tuy nhiên, khi lưu lượng truy cập bắt đầu tăng, những vấn đề dưới đây sẽ lần lượt xuất hiện.
Khi số lần gọi API bên ngoài tăng lên, phản hồi ngày càng chậm hơn.
CPU vẫn còn dư nhưng pool luồng nhanh chóng cạn kiệt.
Lưu lượng truy cập tăng lên, nhưng chi phí hạ tầng cũng tăng theo.
Khi thử chuyển sang bất đồng bộ, mã nguồn ngày càng trở nên phức tạp.
Mở rộng số lượng máy chủ để chống đỡ và xử lý được nhiều yêu cầu hơn với cùng một lượng tài nguyên là hai chuyện khác nhau.
Tại sao chọn Spring WebFlux
Spring WebFlux có gì khác biệt?
Spring WebFlux là một framework web reactive dựa trên cơ chế non-blocking. Nếu Spring MVC truyền thống hoạt động theo mô hình Thread per Request, tức là gán một thread cho mỗi yêu cầu, thì WebFlux vận hành dựa trên cấu trúc event loop. Bạn vẫn có thể sử dụng nó nguyên vẹn trên Java và Spring Boot.
I/O không chặn
WebFlux는 요청을 처리하는 동안 스레드를 붙잡지 않아, 적은 스레드로도 높은
동시성을 감당합니다.
Back Pressure
WebFlux는 리액티브 스트림 표준을 따라, 데이터를 만드는 쪽과 쓰는 쪽의 속도를 맞춰
과부하를 막습니다.
Vòng lặp sự kiện
WebFlux는 요청마다 스레드를 배정하지 않고 이벤트 루프로 처리해, 동시 요청이 많은 환경에서
유리합니다.
Tính đồng thời cao
WebFlux는 외부 API 호출이나 DB I/O처럼 기다리는 시간이 긴 작업에서
스레드를 막지 않아 고트래픽에 강합니다.
Mono · Flux
Reactor의 Mono는 0~1개, Flux는 0개 이상의 데이터를 발행하는 타입입니다. 병렬
처리의 출발점이 이 둘입니다.
Chức năng
WebFlux는 Spring MVC와 비슷한 애노테이션 방식은 물론, RouterFunction을
활용한 함수형 구성도 지원합니다.
Tài liệu chính thức mô tả Spring WebFlux như sau.
Spring WebFlux, một framework web thuộc ngăn xếp reactive, được bổ sung ở phiên bản 5.0. Framework này hoạt động hoàn toàn non-blocking, hỗ trợ back pressure của Reactive Streams và chạy trên các máy chủ như Netty cũng như các container Servlet.
Spring WebFlux, một framework web thuộc ngăn xếp Reactive, được bổ sung từ phiên bản 5.0. Framework này hoạt động hoàn toàn theo cơ chế non-blocking, hỗ trợ Back Pressure của Reactive Streams và có thể chạy trên các máy chủ như Netty cũng như các container Servlet hiện có. spring-webmvc và spring-webflux cùng tồn tại song song trong Spring Framework và cũng có thể được sử dụng cùng nhau khi cần.
Có một điều cần kiểm tra trước khi mở rộng hạ tầng
Bắt đầu từ việc reactive là gì, nội dung sẽ tiếp nối đến các mẫu triển khai WebFlux trong thực tế.
Thực tế của thị trường tuyển dụng
Các tin tuyển dụng thực tế yêu cầu những gì?
Tôi đã đưa nguyên văn các tin tuyển dụng vị trí lập trình viên server. Kinh nghiệm xử lý lưu lượng truy cập lớn và xử lý bất đồng bộ, không chặn nằm trong các yêu cầu.
TossJD nhà phát triển máy chủ
Toss PaymentsJD nhà phát triển máy chủ
Công ty thành viên của Daou KiwoomJD nhà phát triển máy chủ
Tập đoàn HectoJD nhà phát triển máy chủ
Đặc điểm của khóa học này
Tại sao lại là khóa học lập trình Reactive này?
Dựa trên kinh nghiệm chuyển đổi trong môi trường nền tảng Naver.
Đây không phải là khóa học chỉ liệt kê cú pháp WebFlux. Khóa học giải thích từ bối cảnh: đã gặp phải những vấn đề gì 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, cũng như lý do chọn cấu trúc Reactive.
Gần như toàn bộ thời gian đều được dành cho thực hành.
Reactive không thể hiểu được chỉ bằng lý thuyết. Bạn cần trực tiếp kiểm tra bằng code luồng hoạt động của Mono và Flux, cách xử lý non-blocking và cấu trúc event loop thì mới thực sự nắm được.
Giải thích thông qua sự khác biệt về cấu trúc so với MVC
Chỉ một từ “bất đồng bộ” là chưa đủ. Chúng tôi đặt cạnh nhau để so sánh những hạn chế của mô hình Thread per Request, điểm nghẽn do các đoạn blocking gây ra và cách thức hoạt động của kiến trúc non-blocking.
Mở rộng góc nhìn cho Junior, tiêu chí lựa chọn cho Senior
WebFlux không phải là công nghệ theo trào lưu, mà là một lựa chọn trong môi trường có tính đồng thời cao. Khóa học cũng đề cập đến việc khi nào nên chọn và khi nào không nên chọn nó.
Những thay đổi sau khi học xong
Sau khi hoàn thành khóa học này, bạn có thể làm được gì?
Năm điều dưới đây là những thứ bạn có thể tạo ra bằng code sau khi hoàn thành khóa học, hoặc có thể giải thích trong buổi phỏng vấn với những căn cứ rõ ràng.
Đánh giá
지금 겪는 병목이 스레드 대기 때문인지 CPU 때문인지 구분하고, WebFlux가 답인 상황인지 아닌지 고를 수
있습니다.
Triển khai
Mono와 Flux로 단건·다건 흐름을 표현하고, 연산자를 조합해 여러 외부 호출을 병렬로 묶을 수
있습니다.
Điều khiển luồng
생산 속도가 소비 속도를 앞지를 때 Back Pressure로 조절해 메모리가 터지는 상황을 막을 수
있습니다.
Tránh rủi ro
리액티브 체인 안에 블로킹 코드가 섞였을 때 왜 위험한지 설명하고, 그 지점을 찾아낼 수
있습니다.
Chuyển đổi
기존 MVC 프로젝트 전체를 갈아엎지 않고 필요한 구간만 논블로킹으로 바꾸는 방식을 설계할 수
있습니다.
Khuyến nghị dành cho những người như sau
Khóa học lập trình Reactive này dành cho ai?
Các lập trình viên backend lo lắng về tình trạng cạn kiệt thread pool khi lưu lượng truy cập tăng lên
Các lập trình viên Spring cảm nhận được những hạn chế của cấu trúc MVC nhưng chưa tìm ra giải pháp thay thế
Reactiveを導入したいが、概念が漠然としていて試すことさえできなかった開発者
Lập trình viên trong đội ngũ chỉ giải quyết vấn đề bằng cách mở rộng hạ tầng, khiến gánh nặng chi phí ngày càng tăng.
MSA 환경에서 dịch vụ giữa các nhà phát triển nền tảng đang trăn trở vì độ trễ giao tiếp giữa các dịch vụ
Nhà phát triển cảm thấy khao khát phát triển sự nghiệp vì thiếu kinh nghiệm thiết kế trong môi trường có tính đồng thời cao.
Ngược lại, nếu bạn có thể giải thích ngay Back Pressure hoạt động ở đâu, tại sao việc trộn lẫn mã blocking lại nguy hiểm, và nên chọn MVC hay WebFlux, thì bạn không cần khóa học này.
Chương trình học
Lộ trình khóa học lập trình Reactive
Được xây dựng theo trình tự dành cho các nhà phát triển mới bắt đầu học Reactive. Nội dung bắt đầu từ các khái niệm và đặc tả, sau đó tiếp nối với những kiến thức cơ bản về Reactor, các toán tử, các mẫu hình thực tiễn và cách ứng dụng dựa trên Spring Boot.
Phần 2. Tất tần tật về lập trình Reactive
Lập trình reactive rốt cuộc là gì
Đặc tả Reactive Streams được tiêu chuẩn hóa và sử dụng trong hệ sinh thái Java
Hiệu quả của backpressure (Back Pressure) để ngăn OOM trong cấu trúc luồng dữ liệu
Sự khác biệt và những điều cần lưu ý giữa Spring MVC và Spring WebFlux
Phần 3. Kiến thức cơ bản để sử dụng WebFlux Reactor
Giới thiệu và thực hành Reactor do đội ngũ Spring Framework phát triển
Cơ bản và cách sử dụng cốt lõi của Reactor Mono phát hành từ 0~1 dữ liệu
Các kiến thức cơ bản còn lại như Flux phát hành từ 0 dữ liệu trở lên
Phần 4. Các toán tử đa dạng của WebFlux Reactor
Thực hành các toán tử chuyển đổi, hợp nhất và lọc dữ liệu.
Phần 5. Các mẫu thực tiễn tùy chọn trong WebFlux
Tìm hiểu các tình huống ngoại lệ thường gặp trong thực tế và các mẫu ứng phó.
Phần 6. Các mẫu 활용 WebFlux dựa trên Spring Boot
Kết thúc với các mẫu cấu hình WebFlux thực tế trên nền tảng Spring Boot.
Công nghệ được đề cập · Môi trường thực hành
Thực hành với công nghệ nào?
webflux
Reactor
Mono · Flux
Kiểm soát áp suất ngược
Reactive Streams
Vòng lặp sự kiện
Xử lý song song
Java
Spring
Spring Boot
Docker
macOS (Apple M3)
Được thực hiện trong môi trường Apple M3 Air với Java 17.0.12 LTS, và khi cần thiết sẽ khởi chạy các môi trường phụ trợ bằng Docker(28.0.0).
Nếu bạn đã xem hết cả chương trình học,
Thời hạn học là không giới hạn. Bạn cũng có thể xem lại những phần cần thiết bất cứ lúc nào.
Ai đã tạo ra khóa học này?
Được cùng xây dựng bởi các nhà phát triển máy chủ đang làm việc trong ngành
Khóa học này được xây dựng bởi Hong, nhà phát triển máy chủ nền tảng tại Pangyo, cùng Ande, nhà phát triển máy chủ với 10 năm kinh nghiệm tại trụ sở Naver.
Người chia sẻ kiến thức · Phát triển máy chủ nền tảng tại Pangyo
Hong
Tôi đang phụ trách phát triển máy chủ nền tảng tại Pangyo. Tôi tiếp tục hoạt động với vai trò người chia sẻ kiến thức vì muốn chia sẻ những phương pháp tự học cũng như các vấn đề và giải pháp gặp phải trong thực tế công việc. Các khóa học không được xây dựng một mình mà được thực hiện cùng nhiều nhà phát triển đang làm việc trong ngành.
[Hiện tại] Lập trình viên máy chủ nền tảng tại Pangyo
Người chia sẻ kiến thức trên Inflearn · Đang vận hành nhiều khóa học backend
[前] Phát triển backend blockchain · metaverse
Naver · Lập trình viên máy chủ 10 năm kinh nghiệm
Ande
Tôi là một lập trình viên backend và server với 10 năm kinh nghiệm. Tôi tạo các khóa học vì muốn chia sẻ những công nghệ và stack mình biết với mọi người, đồng thời hy vọng những người khác sẽ không mắc phải những sai lầm mà tôi từng mắc. Tôi tham gia theo lời giới thiệu của một nhà phỏng vấn tại Kakao và cùng quay nội dung dưới sự chủ trì của Hong. Nếu có câu hỏi, bạn cứ thoải mái gửi, tôi sẽ cố gắng kiểm tra và giải đáp hết sức có thể.
[Hiện tại] Lập trình viên phát triển máy chủ tại trụ sở chính của Naver
[Trước đây] Lập trình viên backend thuộc Tập đoàn Shinsegae
[Trước đây] Lập trình viên máy chủ tại một startup về 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 tại một trường đại học hệ 4 năm ở Seoul
Câu hỏi thường gặp
Câu hỏi thường gặp về khóa học lập trình Reactive
Lập trình Reactive là gì?
Xem dữ liệu như một luồng (stream) và xử lý luồng đó mà không chiếm giữ thread khi dữ liệu tràn vào. Trong hệ sinh thái Java có một đặc tả tiêu chuẩn mang tên Reactive Streams, triển khai của hệ sinh thái Spring là Reactor, còn framework web được xây dựng trên đó là Spring WebFlux. Trong phần 2, trước tiên chúng ta sẽ hệ thống hóa các khái niệm và đặc tả.
Lập trình reactive có giống với lập trình bất đồng bộ không?
Không giống nhau. Bất đồng bộ là một khái niệm rộng, trong đó bạn tiến hành công việc khác mà không chờ kết quả, còn lập trình reactive là mô hình lập trình xử lý luồng bất đồng bộ dưới dạng các dòng dữ liệu, đồng thời điều chỉnh cả tốc độ sản xuất cho phù hợp với tốc độ tiêu thụ. Lý do khóa học này nói rằng chỉ từ "bất đồng bộ" là chưa đủ chính là phần Back Pressure này.
Spring MVC và Spring WebFlux khác nhau như thế nào?
MVC sử dụng mô hình Thread per Request, gắn một luồng cho mỗi yêu cầu, nên khi có khoảng thời gian chờ dài như lúc gọi API bên ngoài, luồng bị giữ lại và gây ra điểm nghẽn. WebFlux là mô hình non-blocking dựa trên event loop, nên giải phóng luồng trong khi chờ. Những điểm khác biệt và lưu ý sẽ được trình bày cùng nhau trong bài giảng cuối của phần 2.
Mono và Flux lần lượt là gì?
Cả hai đều là các kiểu phát hành dữ liệu do Reactor cung cấp. Mono phát hành 0 hoặc 1 phần tử, còn Flux phát hành từ 0 phần tử trở lên. Truy vấn một bản ghi được biểu diễn bằng Mono, còn danh sách hoặc luồng dữ liệu được biểu diễn bằng Flux. Trong phần 3, chúng ta sẽ thực hành những kiến thức cơ bản và cách sử dụng cốt lõi của từng loại.
Tại sao cần Back Pressure (áp suất ngược)?
Nếu bên tạo dữ liệu nhanh hơn bên tiêu thụ, dữ liệu chưa được xử lý có thể tích tụ trong bộ nhớ và dẫn đến OOM. Back Pressure là cơ chế điều chỉnh luồng để chỉ yêu cầu lượng dữ liệu mà bên tiêu thụ có thể xử lý. Nội dung này được đề cập ở phần 2 dưới góc độ phòng tránh OOM.
Dùng WebFlux thì có phải lúc nào cũng nhanh hơn không?
Không. WebFlux phát huy thế mạnh trong những tình huống có nhiều lệnh gọi API bên ngoài hoặc phải chờ I/O khiến các thread bị giữ lại. Nếu nút thắt cổ chai nằm ở các phép tính sử dụng CPU trong thời gian dài thì dù thay đổi cấu trúc cũng không khác biệt đáng kể, và nếu có lẫn mã blocking ở giữa thì thậm chí còn gây bất lợi. Khóa học này cũng trình bày cả những tiêu chí để đưa ra quyết định đó.
Có cần chuyển toàn bộ dự án MVC hiện tại sang WebFlux không?
Không cần phải thay đổi toàn bộ.
spring-webmvc và spring-webflux cùng tồn tại song song trong Spring Framework, và bạn cũng có thể chỉ chuyển đổi những dịch vụ cần thiết sang mô hình non-blocking.
Trên thực tế, giảng viên đã đưa vào khóa học kinh nghiệm nâng cao thông lượng trên cùng một nguồn tài nguyên bằng cách chỉ chuyển đổi một số dịch vụ.
Người mới bắt đầu với Reactive có thể theo kịp không?
Có. Đây là khóa học nhập môn, bắt đầu từ việc reactive là gì và đặc tả stream, sau đó lần lượt đi qua kiến thức cơ bản về Reactor, các toán tử và các mẫu thực tiễn. Chỉ cần có kinh nghiệm sử dụng Java và Spring Boot là đủ, còn phần mẫu thực tiễn ở phía sau cũng có những nội dung mới mẻ ngay cả với những người đang sử dụng WebFlux.
Môi trường thực hành được thiết lập như thế nào?
Thực hiện trên Apple M3 Air với Java
17.0.12 LTS, và khi cần sẽ khởi chạy môi trường xung quanh bằng Docker 28.0.0. Bạn có thể thực hành toàn bộ trên máy cục bộ mà không cần thanh toán cho dịch vụ đám mây trả phí riêng.
Lộ trình khóa học lập trình Reactive được sắp xếp theo thứ tự nào?
Bắt đầu từ các khái niệm reactive và đặc tả Reactive Streams, Back Pressure, sự khác biệt so với MVC, sau đó lần lượt tìm hiểu những kiến thức cơ bản về Reactor (Mono·Flux), nhiều toán tử khác nhau, các mẫu hình thực tiễn và cách sử dụng WebFlux trên nền tảng Spring Boot. Thời hạn học là không giới hạn.
Thay vì tăng số lượng thread, chúng ta thiết kế luồng xử lý.
Bắt đầu từ việc tìm hiểu Reactive là gì, bạn sẽ thực hành toàn bộ nội dung từ Mono·Flux đến các mô hình thực tiễn.
Cùng nhau phát triển nhé
Phòng trò chuyện mở dành cho các nhà phát triển
Chúng tôi đang vận hành một phòng trò chuyện mở dành cho các nhà phát triển, nơi chia sẻ về sự nghiệp, tình hình công việc thực tế và công nghệ. Hãy thoải mái chia sẻ những điều bạn thắc mắc khi học khóa học hoặc những trăn trở trong công việc thực tế.
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ự.
Chào bạn Jang Jaehoon, cảm ơn bạn vì những đánh giá tốt!! Mình sẽ cung cấp thêm nhiều bài giảng bổ ích hơn nữa trong tương lai!! Chúc bạn một ngày tốt lành nhé!
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.
Khóa học Lập trình Reactive do người phỏng vấn Naver hướng dẫn nhằm xử lý song song hơn 20,000 RPS là khóa học mà tôi đã tham gia để mở rộng hiểu biết về cấu trúc máy chủ và phương thức xử lý thời gian thực trong khi thực hiện dự án liên kết doanh nghiệp SSAFY.
Trong dự án hiện tại, có nhiều tình huống cần phải cân nhắc về cấu trúc xử lý phản hồi và tính đồng thời như liên kết máy chủ AI, xử lý dữ liệu thời gian thực, giao tiếp API bên ngoài, v.v. Đúng vào thời điểm tôi đang thắc mắc về những hạn chế của cấu trúc dựa trên Spring MVC truyền thống, khóa học này đã giúp ích rất nhiều trong việc thấu hiểu luồng tổng quát về Lập trình Reactive và WebFlux.
Đặc biệt, tôi rất thích cách giải thích đi kèm với thực hành thay vì chỉ là lý thuyết suông về các khái niệm như sự khác biệt giữa cấu trúc Thread per Request và cấu trúc dựa trên Event Loop, phương thức xử lý luồng dữ liệu (data stream) sử dụng Mono và Flux, hay khái niệm kiểm soát quá tải thông qua Back Pressure. Trước đây, tôi chỉ đơn thuần nghĩ WebFlux là một "framework bất đồng bộ", nhưng qua khóa học này, tôi đã cảm nhận được rằng đây là một cách tiếp cận mang tính cấu trúc để xử lý tính đồng thời cao với ít tài nguyên.
Mặc dù tôi chưa áp dụng WebFlux ngay lập tức vào dự án liên kết doanh nghiệp đang thực hiện, nhưng những khái niệm học được từ khóa học này đã giúp ích rất nhiều trong quá trình cân nhắc cấu trúc tính năng thời gian thực hoặc giao tiếp với máy chủ AI. Đặc biệt, tầm nhìn của tôi về sự khác biệt giữa Blocking I/O và Non-blocking, cũng như các vấn đề nghẽn cổ chai có thể xảy ra khi có nhiều lượt gọi API bên ngoài, đã được mở rộng hơn trước.
Ngoài ra, việc khóa học đề cập đến cả những nội dung cần cân nhắc trong thực tế như SSE, WebSocket, Retry pattern, luồng xử lý lỗi, v.v., đã mang lại cho tôi những trải nghiệm vượt xa việc chỉ học cú pháp đơn thuần.
Tôi nghĩ rằng trong tương lai, khi quy mô dự án lớn hơn hoặc trong môi trường đòi hỏi xử lý tính đồng thời cao và liên kết bên ngoài nhiều hơn, tôi chắc chắn muốn cân nhắc việc thực sự áp dụng WebFlux và cấu trúc Reactive. Đây là một khóa học giúp tôi có được tiêu chí đánh giá để lựa chọn công nghệ phù hợp trong từng tình huống, thay vì chỉ tiếp cận Reactive như một xu hướng công nghệ đơn thuần.
Chào bạn Seong-hun, mình thực sự rất cảm động ạ ㅠㅠㅠㅠ Đọc những dòng này mình đã được tiếp thêm rất nhiều sức mạnh và đây chính là động lực để mình tiến xa hơn nữa ㅠㅠ Trong thời gian tới, mình sẽ cố gắng cung cấp những bài giảng bổ ích hơn nữa để có thể làm hài lòng bạn trong các bài học tiếp theo.
Chúc bạn một ngày tốt lành nhé!!!