강의

멘토링

로드맵

Inflearn brand logo image
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.7) 15 đánh giá

107 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à

2,724

Học viên

185

Đánh giá

76

Trả lời

4.5

Xếp hạng

14

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ả

15 đánh giá

4.7

15 đánh giá

  • ks ju님의 프로필 이미지
    ks ju

    Đánh giá 7

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    현실적인 좋은 내용으로 강의 잘 봤습니다. 감사합니다.

    • Hong
      Giảng viên

      안녕하세요 ks ju님 평 남겨주셔서 감사합니다. 실제 운영환겅에서는 더 다양한 기능이 들어갈 수 있는 형태고 이런형태를 위한 구조라고 봐주시면 될꺼같아요 ㅎㅎ 앞으로 더 유익한 강의를 제공해드리겠습니다. 좋은 하루 보내세요 :)

  • 텐버거!님의 프로필 이미지
    텐버거!

    Đánh giá 4

    Đánh giá trung bình 5.0

    Đã chỉnh sửa

    5

    96% đã tham gia

    취업을 준비하고, 실무에서 일을 하면서 강사분 강의를 많이 참고하고 토대로 학습을 진행하였는데, 정말 너무 많은 도움이 되는 양질의 주제인거 같습니다. 함께 코드를 작성하는 과정도 너무 유익하고 옆에서 같이 코딩을 하는 느낌이 들다보니 그만큼 더 학습 효과가 좋아지는거 같아요!! 앞으로 더 자주보고 좋은 강의가 만들어지면 좋겠습니다. 감사합니다!

    • Hong
      Giảng viên

      안녕하세요 텐버거님! 취업을 준비하시다니!! 이 강의가 많은 도움이 되었으면 좋겠습니다 추후에 취업도 성공하신다면 소식 전해주세요 ㅎㅎ 감사합니다!

  • 우당탕탕님의 프로필 이미지
    우당탕탕

    Đánh giá 3

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    강의 잘 보았습니다. 딱히 보는데에 큰 불편함도 없었고 내용 자체도 너무 유익하네요 앞으로 좋은 강의 부탁드립니다!

    • Hong
      Giảng viên

      안녕하세요 우당탕탕님 좋은 평 남겨주셔서 감사합니다!! 앞으로 더 유익하고 재미있는 실무에 접합한 강의를 제공해 드리기 위해서 노력하겠습니다! 좋은 하루 보내세요!

  • 8번이 좋아님의 프로필 이미지
    8번이 좋아

    Đánh giá 4

    Đánh giá trung bình 5.0

    5

    93% đã tham gia

    너무 잘 배웠습니다. 좋은 강의라고 생각하네요. 다른 강의도 수강 예정입니다.

    • Hong
      Giảng viên

      안녕하세요 8번이 좋아님!! 다른강의에서도 뵙으면 좋겠네요 ㅎㅎ 좋은 평 감사합니다!

  • tasd os님의 프로필 이미지
    tasd os

    Đánh giá 4

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    백엔드 개발자로써.. 진짜 많은 도움 되었습니다. 감사합니다.

    • Hong
      Giảng viên

      안녕하세요 tasd os님 같은 직무인데 도움이 많이 된거같아서 너무 뿌듯하네요 감사합니다!

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

66.000 ₫

20%

1.733.864 ₫

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!