강의

멘토링

커뮤니티

Programming

/

Back-end

Xây dựng server chat thời gian thực cấp độ production: Từ xử lý phân tán đến tối ưu hóa hiệu suất (Kotlin & Spring)

Phát triển máy chủ chat WebSocket thời gian thực mở rộng, xử lý traffic lớn, bằng cụm 3 instance Spring Boot 3.x + Kotlin, tận dụng nhắn tin phân tán Redis Pub/Sub và Nginx load balancer.

(4.8) 23 đánh giá

152 học viên

  • Hong
실습 중심
서버
백엔드
백엔드개발자
아키텍처
Spring
Kotlin
Spring Boot
websocket

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

Dịch cái này sang tiếng Việt

  • Hệ thống nhắn tin phân tán sử dụng Redis Pub/Sub để đồng bộ hóa tin nhắn thời gian thực giữa nhiều phiên bản máy chủ.

  • Cách cấu hình cụm 3 instance bằng Docker Compose và phân tải traffic với Nginx load balancer.

  • Thực hiện giao tiếp thời gian thực hai chiều sử dụng Spring WebSocket.

  • Bằng cấu trúc đa mô-đun, áp dụng Domain-driven Design để thiết kế kiến trúc máy chủ có khả năng mở rộng

  • Kỹ thuật đảm bảo thứ tự tin nhắn ngay cả trong môi trường phân tán, thông qua quản lý trình tự tin nhắn ứng dụng Redis.

  • Vận hành dịch vụ: Triển khai Docker container, Health Check, Giám sát Log.

  • Phương pháp phát triển backend hiện đại tận dụng tính năng mới nhất của Spring Boot 3.x + Kotlin

  • Kỹ thuật lập trình phòng thủ nhằm vận hành dịch vụ ổn định, như ngăn chặn xử lý tin nhắn trùng lặp, dọn dẹp phiên, giải phóng tài nguyên, v.v.

Trong khóa học này, bạn sẽ...

Bạn sẽ thiết kế và xây dựng một kiến trúc máy chủ có khả năng mở rộng , có thể xử lý hàng chục nghìn người dùng trong môi trường dịch vụ thực tế.


🏗 . Không chỉ đơn thuần là triển khai các chức năng, bạn có thể tìm hiểu các nguyên tắc cốt lõi của hệ thống phân tán hoạt động đáng tin cậy ngay cả khi lưu lượng truy cập lớn.

Đầu tiên, bạn sẽ học cách phân phối lưu lượng với bộ cân bằng tải Nginx để nhiều máy chủ có thể hoạt động như một hệ thống duy nhất 🌐 và cách đồng bộ hóa tin nhắn giữa các máy chủ theo thời gian thực bằng Redis Pub/Sub . Trong quá trình này, bạn sẽ tự nhiên có được kiến thức để giải quyết vấn đề C10K (10.000 kết nối đồng thời) .


Bạn cũng sẽ được trải nghiệm việc điều chỉnh nhóm kết nối cơ sở dữ liệu và cải thiện thời gian phản hồi xuống còn mili giây bằng cách triển khai xử lý hàng loạt JPA và phân trang dựa trên con trỏ.

Cuối cùng, bạn sẽ học các kỹ thuật vận hành ổn định để duy trì môi trường nhất quán từ phát triển đến triển khai thông qua các container Docker 🐳 và ngăn ngừa lỗi dịch vụ trước bằng cách xây dựng hệ thống kiểm tra và giám sát tình trạng 🩺 . Tất cả các quy trình này sẽ được triển khai bằng mã nguồn tinh tế và hiệu quả, sử dụng các stack mới nhất : Kotlin, Spring Boot 3.x và websocket .

📦 Sau khi học bài giảng, bạn có thể tạo ra kết quả như thế này

Một ứng dụng trò chuyện hoàn toàn phi tập trung 📦

Bạn sẽ nhận được một gói ứng dụng hoàn chỉnh có thể chạy toàn bộ hệ thống (máy chủ, cơ sở dữ liệu, bộ nhớ đệm, v.v.) cùng một lúc chỉ bằng một lệnh. Đây là một dịch vụ sẵn sàng triển khai, không chỉ là một tập hợp các đoạn mã.

Thiết kế kiến trúc hệ thống cấp độ sản xuất 🗺

Bạn sẽ xây dựng và hiểu rõ bản thiết kế kiến trúc hệ thống bao quát toàn bộ quy trình từ yêu cầu của người dùng đến lưu trữ dữ liệu. Bản thiết kế này sẽ là một tài sản danh mục đầu tư tuyệt vời, thể hiện trình độ chuyên môn của bạn.

Tính năng trò chuyện hai chiều thời gian thực 💬

Bạn sẽ có chức năng trò chuyện cốt lõi được triển khai đầy đủ cho phép người dùng đăng nhập, tạo phòng trò chuyện và trao đổi nhiều tin nhắn khác nhau theo thời gian thực.

Cụm máy chủ có khả năng mở rộng theo chiều ngang

Chúng ta sẽ xây dựng một cụm máy chủ với n máy chủ Spring Boot chạy trên bộ cân bằng tải Nginx. Điều này sẽ hướng dẫn bạn cách dễ dàng mở rộng hệ thống bằng cách chỉ cần thêm các phiên bản máy chủ khi lưu lượng truy cập tăng lên.

Hệ thống nhắn tin có tính khả dụng cao 📡

Chúng tôi xây dựng một hệ thống nhắn tin đáng tin cậy có thể truyền tải mọi tin nhắn mà không bị mất mát thông qua Redis Pub/Sub ngay cả khi một máy chủ bị lỗi hoặc người dùng truy cập vào nhiều máy chủ khác nhau.

Hệ thống quản lý dữ liệu được tối ưu hóa

Chúng tôi sẽ hoàn thiện hệ thống dữ liệu lai đáp ứng cả tính ổn định của dữ liệu và tốc độ phản hồi nhanh bằng cách lưu trữ vĩnh viễn dữ liệu trò chuyện trong PostgreSQL và lưu trữ thông tin phiên và dữ liệu bộ nhớ đệm trong Redis.

📚 Nội dung chính của bài giảng!

Tin nhắn phân tán Redis Pub/Sub

Triển khai mô hình đăng ký-xuất bản của Redis để đồng bộ hóa tin nhắn theo thời gian thực trên nhiều phiên bản máy chủ. Xây dựng một hệ thống nhắn tin phân tán cấp sản xuất, ngăn ngừa tin nhắn trùng lặp, đảm bảo thứ tự tin nhắn và cung cấp khả năng cô lập cho mỗi máy chủ, đặt nền tảng cho giao tiếp thời gian thực có khả năng mở rộng.

Giao tiếp thời gian thực dựa trên WebSocket

Triển khai giao tiếp thời gian thực hai chiều hiệu quả hơn nhiều so với HTTP bằng cách tận dụng Spring WebSocket. Cung cấp chức năng trò chuyện thời gian thực ổn định thông qua quản lý phiên, theo dõi trạng thái kết nối, xử lý lỗi, v.v., đồng thời áp dụng các kỹ thuật tối ưu hóa để giải quyết vấn đề.

Kiến trúc DDD đa mô-đun

Tuân theo nguyên tắc Thiết kế hướng miền (Domain-driven Design), chúng tôi tách các lớp API, Domain, Persistence và WebSocket thành các mô-đun độc lập. Chúng tôi xây dựng một kiến trúc máy chủ có khả năng mở rộng, tối đa hóa khả năng bảo trì và kiểm thử bằng cách phân định rõ ràng trách nhiệm của từng mô-đun và kiểm soát hướng phụ thuộc.

Bộ cân bằng tải Nginx + Proxy WebSocket

Cấu hình bộ cân bằng tải Nginx phân bổ đều lưu lượng trên n phiên bản Spring Boot. Proxy đáng tin cậy các kết nối WebSocket cũng như các yêu cầu HTTP, đồng thời xây dựng môi trường dịch vụ có tính khả dụng cao với các thiết lập proxy ngược cấp sản xuất.

📚 Xem kiến trúc tính năng của dự án

Redis Pub/Sub

Quy trình xử lý tin nhắn

📚 Xem trước bài giảng!

📚 Viết lớp quản lý phiên WebSocket



📚 Triển khai máy chủ bằng các tập lệnh tự động



📚 Docker- Compose để triển khai môi trường



📚 Thiết lập số liệu hiệu suất Nginx



Tại sao tôi nên học Kotlin?

Người ta nói rằng nó tương thích 100% với Spring, và Kotlin, một ngôn ngữ do Jetbrain tạo ra, được tối ưu hóa cho lập trình đồng thời, điều mà Spring không phù hợp.

📚 Ngữ pháp ngắn gọn và trực quan


Kotlin cung cấp cú pháp ngắn gọn và trực quan, cho phép các nhà phát triển làm được nhiều việc hơn với ít mã hơn. Điều này giúp cải thiện khả năng đọc và giúp việc bảo trì dễ dàng hơn.

📚 Năng suất và độ an toàn cao


Kotlin mặc định hỗ trợ tính năng an toàn null, giúp giảm thiểu các ngoại lệ con trỏ null (NullPointerException). Nó cũng hỗ trợ lập trình hàm, cho phép bạn viết mã theo cách hàm tính và khai báo hơn. Những tính năng này giúp tăng năng suất phát triển và giảm khả năng xảy ra lỗi.

📚 Khả năng tương thích cao


Kotlin tương thích 100% với Java, giúp dễ dàng tích hợp vào các dự án Java hiện có. Điều này có nghĩa là các nhà phát triển Java không gặp bất kỳ rào cản đáng kể nào khi học Kotlin và có thể sử dụng các tính năng mới của Kotlin trong khi vẫn duy trì mã hiện có.

Chúng ta không thể triển khai websocket bằng HTTP sao? 🤔

📌 Hoàn toàn có thể. Đây không phải là phương pháp phát triển bất khả thi.

📌 Tuy nhiên, các nhà phát triển máy chủ thường cần tận dụng tối đa tài nguyên máy chủ.

📌 Do đó, trong những trường hợp cần duy trì kết nối liên tục, chẳng hạn như máy chủ trò chuyện, thì việc sử dụng WebSocket là rất phù hợp.

Bốn giá trị quan trọng

1. Bài giảng phải mang tính nhân văn.

Tôi không nghĩ một bài giảng dễ trình bày là một bài giảng, ngay cả khi nó có thể bị coi là thiếu chuyên nghiệp. Gỡ lỗi cũng là một phần của bài giảng.

2. Phải chuyên biệt cho công việc thực tế.

Phát triển không phải là điều bạn chỉ nói suông. Bạn thực sự có thể triển khai và trải qua quá trình để nó hoạt động.

  • Các nhà quy hoạch ơi... hãy cứu tôi với...

3. Nó phải hữu ích cho học sinh.

Tôi muốn kết hợp những khái niệm mà tôi đã áp dụng và thấy hiệu quả trong lĩnh vực của mình. Thông qua quá trình này, bạn có thể gián tiếp trải nghiệm thực tế, hoặc nếu bạn là người thực hành, bạn có thể thể hiện hiệu suất tốt hơn trong môi trường thực tế.

4. Bài giảng vẫn chưa kết thúc.

Tôi hy vọng bạn sẽ để lại nhiều câu hỏi và câu trả lời trong suốt bài giảng. Bài giảng này không chỉ được biên soạn dựa trên kiến thức của tôi. Nó còn bao gồm ý kiến đóng góp từ các nhà phát triển tại nhiều công ty lớn.

  • Sau đây là một số tiểu sử tóm tắt của những người đã giúp hoàn thành bài giảng này:


private val supported_one = "Nhà phát triển nền tảng thanh toán Kakao" private val supported_two = "Nhà phát triển máy chủ API Toss Securities" private val supported_three = "Nhà phát triển máy chủ khởi nghiệp Unicorn muốn giữ bí mật"

Những điều cần lưu ý trước khi tham gia lớp học

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

  • Chụp bằng MacOS M3.

  • Theo mặc định, nó sử dụng Docker.

  • java --version : 17.0.12 2024-07-16 LTS

  • Tôi sử dụng IDE từ nhóm JetBrains.

  • Xây dựng bằng Gradle.

    • Mã nguồn được bao gồm đầy đủ, bao gồm cả các tệp dựng, để ngăn ngừa xung đột phiên bản có thể xảy ra.

😍 Chủ đề hay để cùng nhau xem

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 muốn phát triển từ Junior lên Mid-level

  • Nhà phát triển muốn tích lũy kinh nghiệm phát triển dịch vụ thời gian thực

  • Lập trình viên quan tâm đến kiến trúc hệ thống phân tán

  • Lập trình viên cấp trung muốn trở thành lập trình viên cấp cao.

  • Nhà phát triển có kiến thức Docker cơ bản hoặc muốn tìm hiểu.

  • Lập trình viên Game/Chat/Mạng xã hội

  • Ứng viên muốn củng cố portfolio

  • Lập trình viên đang lên kế hoạch chuyển việc bằng cách mở rộng stack công nghệ.

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

  • Có kiến thức cơ bản về Spring là tốt.

  • Về giao tiếp Web Socket, nếu có kiến thức cơ bản thì tốt.

  • Không cần có tất cả kiến thức này. Vì chúng ta sẽ trực tiếp triển khai dự án nên có thể cùng học hỏi.

Xin chào
Đây là

3,801

Học viên

287

Đánh giá

104

Trả lời

4.6

Xếp hạng

18

Các khóa học

자기 소개

집에서 빈둥대다 개발에 흥미를 느껴 개발 공부를 시작하였고 현재는 판교에서 플랫폼 서버 개발을 담당하여 진행하고 있습니다.

 

제가 공부를 했던 방법과 실무에서 접하실 수 있는 여러가지 문제점들과 해결책을 여러분들에게 제공하고 싶어 지식공유자 활동을 이어나가고 있습니다.

 

강의는 오로지 저만의 지식을 통해 만들어지지 않습니다. 모든 강의는 함께하시는 분들이 계십니다.

 

지식공유자 경력

[前] 샌드박스 블록체인 개발자

[前] 넥슨 자회사 백엔드 개발자

[] 판교에서 고여가는 서버 개발자

 

인터뷰 이력

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

Tất cả

28 bài giảng ∙ (4giờ 55phú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ả

23 đánh giá

4.8

23 đánh giá

  • kju626095386님의 프로필 이미지
    kju626095386

    Đánh giá 8

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    Tôi đã xem bài giảng rất hay với nội dung tốt và thực tế. Cảm ơn bạn.

    • jhong
      Giảng viên

      Xin chào ks ju, cảm ơn bạn đã để lại đánh giá. Trong môi trường vận hành thực tế, có thể thêm vào nhiều tính năng đa dạng hơn và bạn có thể coi đây là cấu trúc dành cho dạng thức như vậy 😊😊 Chúng tôi sẽ cung cấp những bài giảng hữu ích hơn nữa trong tương lai. Chúc bạn có một ngày tốt lành :)

  • youngba8935643님의 프로필 이미지
    youngba8935643

    Đánh giá 6

    Đánh giá trung bình 5.0

    Đã chỉnh sửa

    5

    96% đã tham gia

    Tôi đã chuẩn bị việc làm và trong quá trình làm việc thực tế, tôi đã tham khảo rất nhiều bài giảng của giảng viên và học tập dựa trên đó, thực sự đây là một chủ đề chất lượng cao rất hữu ích. Quá trình cùng nhau viết code cũng rất bổ ích và có cảm giác như đang cùng ngồi bên cạnh coding, nhờ đó mà hiệu quả học tập càng tốt hơn!! Hy vọng sẽ xem thường xuyên hơn và có thêm nhiều bài giảng hay được tạo ra. Cảm ơn!

    • jhong
      Giảng viên

      Xin chào bạn Tenburger! Nghe nói bạn đang chuẩn bị tìm việc!! Mình hy vọng khóa học này sẽ giúp ích rất nhiều cho bạn. Nếu sau này bạn tìm được việc thành công thì hãy chia sẻ tin tức nhé 😊😊 Cảm ơn bạn!

  • kask814587762님의 프로필 이미지
    kask814587762

    Đánh giá 3

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    Tôi đã xem bài giảng rất hay. Không có gì bất tiện khi xem và nội dung cũng rất bổ ích. Mong rằng sẽ có những bài giảng tốt hơn nữa trong tương lai!

    • jhong
      Giảng viên

      Xin chào bạn 우당탕탕, cảm ơn bạn đã để lại đánh giá tốt!! Tôi sẽ cố gắng cung cấp những khóa học phù hợp với thực tế công việc, bổ ích và thú vị hơn nữa! Chúc bạn có một ngày tốt lành!

  • eightee724277님의 프로필 이미지
    eightee724277

    Đánh giá 5

    Đánh giá trung bình 5.0

    5

    93% đã tham gia

    Tôi đã học rất tốt. Tôi nghĩ đây là một khóa học hay. Tôi dự định sẽ tham gia các khóa học khác nữa.

    • jhong
      Giảng viên

      Xin chào, tôi thích số 8!! Hy vọng sẽ gặp lại bạn ở các khóa học khác nữa 😊😊 Cảm ơn bạn đã đánh giá tốt!

  • tasdo4797187님의 프로필 이미지
    tasdo4797187

    Đánh giá 5

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    Là một lập trình viên backend.. thực sự đã giúp ích rất nhiều. Cảm ơn bạn.

    • jhong
      Giảng viên

      Xin chào tasd os, chúng ta cùng làm công việc giống nhau mà có thể giúp đỡ được nhiều như vậy nên tôi cảm thấy rất tự hào. Cảm ơn bạn!

1.729.855 ₫

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!