Inflearn brand logo image
Inflearn brand logo image
NEW
Programming

/

Back-end

Triển khai chức năng cốt lõi máy chủ ngân hàng với kiến trúc đa module [ Kotlin & Spring ]

Khóa học này sẽ trình bày cách xây dựng một dự án đa module từ đầu, sử dụng Kotlin và Spring Boot. Từ các khái niệm cơ bản về module hóa, cấu hình Gradle, quản lý sự phụ thuộc giữa các module, cho đến phát triển ứng dụng thực tế, tất cả sẽ được thực hành trọng tâm. Từ người mới bắt đầu đến nhà phát triển trung cấp, khi bạn muốn học các kiến thức cơ bản và ứng dụng thực tế của đa module, hãy tham khảo khóa học này.

(5.0) 2 đánh giá

42 học viên

Java
Spring
Kotlin
MySQL
Spring Boot

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

  • Kiến trúc CQRS phân tách Lệnh (Command) và Truy vấn (Query)

  • Xử lý bất đồng bộ dựa trên sự kiện sử dụng Spring

  • Đồng bộ hóa dữ liệu giữa Write/Read Model

  • Giám sát metric hệ thống với Prometheus + Grafana

  • Thiết kế Multi Module cho dự án lớn

  • Chiến lược phân tách trách nhiệm và quản lý phụ thuộc với Multi Module

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

Bạn sẽ thiết kế và xây dựng các hệ thống phụ trợ thông minh có khả năng giải quyết rõ ràng các yêu cầu kinh doanh phức tạp và tự phục hồi trong trường hợp xảy ra lỗi.


🏛 . Không chỉ đơn giản là tạo một API CRUD, bạn sẽ học được các nguyên tắc cốt lõi của một kiến ​​trúc dễ bảo trì theo thời gian và có thể mở rộng khi doanh nghiệp của bạn phát triển. Trước tiên, bạn sẽ học cách mô hình hóa rõ ràng một miền tài chính phức tạp dưới dạng mã thông qua Thiết kế theo miền (DDD) 📝 và áp dụng mẫu CQRS (Phân tách trách nhiệm truy vấn lệnh) để phân tách các thay đổi dữ liệu và truy vấn. Theo cách này, bạn sẽ học cách giết hai con chim bằng một hòn đá: độ tin cậy của các hoạt động ghi và tối ưu hóa hiệu suất truy vấn.


Toàn bộ hệ thống sẽ có khả năng phục hồi mạnh mẽ, không bị sụp đổ chỉ vì một lỗi duy nhất. 📨 Tìm hiểu cách giảm sự kết hợp giữa từng mô-đun và giao tiếp không đồng bộ bằng cách giới thiệu Kiến trúc hướng sự kiện (EDA)🔑 Sử dụng Khóa phân tán để đảm bảo hoàn toàn tính toàn vẹn của dữ liệu ngay cả trong môi trường nhiều máy chủ.

Tại đây, bạn sẽ học cách xây dựng tường lửa để ngăn chặn lỗi của một dịch vụ cụ thể lan truyền khắp hệ thống bằng cách thêm mô hình 🛡 Circuit Breaker .


Cuối cùng, chúng ta sẽ đạt được 'Khả năng quan sát', điều hành hệ thống dựa trên dữ liệu, không phải 'cảm xúc'. Chúng ta sẽ học cách thu thập các số liệu cốt lõi của ứng dụng theo thời gian thực bằng cách liên kết PrometheusGrafana 📊 và trực quan hóa chúng để phát hiện các vấn đề tiềm ẩn trước và tìm chính xác các điểm nghẽn hiệu suất 🩺 .


Đừng chỉ dừng lại ở lý thuyết, mà hãy biến công nghệ có thể áp dụng trực tiếp vào các dịch vụ thực tế thành của riêng bạn. Đây sẽ là thời gian để cùng nhau suy nghĩ và phát triển.

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 Boot 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 mà Spring không phù hợp.

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


Kotlin 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 vì nó cung cấp cú pháp ngắn gọn và trực quan. Điều này có tác dụng cải thiện khả năng đọc và giúp bảo trì dễ dàng hơn.

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


Kotlin hỗ trợ null safety theo mặc định, có thể giảm các ngoại lệ con trỏ null (NullPointerException). Nó cũng hỗ trợ lập trình chức năng, cho phép bạn viết mã theo cách chức năng và khai báo hơn. Các tính năng này làm 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 rào cản đáng kể nào khi học Kotlin và có thể sử dụng các tính năng Kotlin mới trong khi vẫn duy trì mã hiện có.

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

Kiến trúc mô-đun và thiết kế theo miền (DDD)

Tìm hiểu về phương pháp thiết kế mô-đun và thiết kế theo miền là nền tảng của MSA (kiến trúc vi dịch vụ). Tìm hiểu cách tổ chức các yêu cầu kinh doanh phức tạp thành mã rõ ràng và có thể bảo trì. Tìm hiểu cách mỗi mô-đun (api, lõi, miền, sự kiện) phân chia vai trò và thiết kế ứng dụng xung quanh mô hình miền.

Mẫu CQRS (Phân tách trách nhiệm truy vấn lệnh)

Tìm hiểu mô hình CQRS phân tách logic thay đổi dữ liệu (Command) và truy vấn (Query) để cải thiện hiệu suất và khả năng mở rộng của hệ thống. Hiểu cách tối ưu hóa các mô hình chỉ ghi và chỉ đọc tương ứng, triển khai chúng bằng mã thực tế và tìm hiểu cách giảm các vấn đề đồng thời và chọn cơ sở dữ liệu phù hợp cho từng mô hình.

Kiến trúc hướng sự kiện (EDA)

Tìm hiểu cách biến từng phần của hệ thống thành một dịch vụ độc lập và giao tiếp với nhau thông qua các sự kiện. Tìm hiểu các nguyên tắc giảm sự kết hợp giữa các mô-đun và cải thiện khả năng phản hồi và độ đàn hồi của toàn bộ hệ thống thông qua xử lý không đồng bộ.

Đảm bảo tính ổn định của hệ thống phân tán (máy cắt mạch)

Tìm hiểu mô hình cầu dao để ngăn chặn lỗi hệ thống bên ngoài lan truyền đến toàn bộ hệ thống. Tìm hiểu cách bảo vệ hệ thống khỏi lỗi tạm thời và vận hành dịch vụ ổn định ngay cả khi xảy ra lỗi. Thông qua đó, bạn sẽ hiểu cách tăng khả năng phục hồi của hệ thống.

Kiểm soát đồng thời và khóa phân tán

Tìm hiểu các nguyên tắc khóa phân tán để giải quyết các vấn đề phát sinh khi truy cập cùng một dữ liệu đồng thời từ nhiều máy chủ. Tìm hiểu và triển khai các phương pháp để đảm bảo tính nhất quán của dữ liệu bằng cách sử dụng bộ lưu trữ ngoài như Redis. Thông qua đó, bạn sẽ phát triển khả năng xử lý dữ liệu an toàn trong môi trường đồng thời.

Giám sát và khả năng quan sát hệ thống

Tìm hiểu cách có được khả năng hiển thị theo thời gian thực về tình trạng sức khỏe của các ứng dụng của bạn và nhanh chóng chẩn đoán các vấn đề. Xây dựng và tìm hiểu một đường ống giám sát đầy đủ thu thập số liệu bằng Prometheus và trực quan hóa chúng bằng Grafana. Tìm hiểu cách tối đa hóa hiệu quả hoạt động bằng cách tăng tính minh bạch trong hệ thống của bạn.

Một hương vị của kiến ​​trúc

Sự phụ thuộc giữa các mô-đun

Nguồn sự kiện

Giám sát số liệu

Xem trước nội dung bài giảng

📚 Trong lớp ' Bảng điều khiển giám sát sử dụng Grafana '


📚 Trong lớp ' Gradle cho nhiều mô-đun '


📚 Trong lớp ' Lập trình hàm để khắc phục các hạn chế về @Giao dịch '


Công nghệ được đề cập trong bài giảng

MySQL

MySQL, một cơ sở dữ liệu quan hệ, được sử dụng để xử lý dữ liệu có mối quan hệ.

Bạn sẽ có một cấu trúc linh hoạt để phát triển dịch vụ thông qua phương pháp mã hóa để cấu hình JPA, viết các thực thể và chỉ định mối quan hệ giữa dữ liệu.

  • Chúng tôi không kết nối với Cơ sở dữ liệu MySQL thực. Mục tiêu của chúng tôi chỉ là viết các truy vấn SQL và chạy thử nghiệm bằng H2.

Cầu dao điện

Nó được triển khai theo cách chức năng bằng cách sử dụng Resilience4j và quản lý hiệu quả việc cô lập và phục hồi sau các tình huống lỗi bằng cách tạo một phiên bản CircuitBreaker độc lập cho mỗi dịch vụ. Điều này làm tăng độ tin cậy của dịch vụ và ngăn chặn sự lan truyền lỗi.

Đỏ lại

Nó sử dụng tính năng khóa phân tán của Redis và đảm bảo tính nhất quán của dữ liệu trong nhiều tình huống.

Kiến trúc CQRS

Mẫu CQRS được áp dụng để phân tách trách nhiệm của lệnh và truy vấn.

Các lệnh và truy vấn được cấu trúc thành các mô-đun riêng biệt, mỗi mô-đun sử dụng mô hình dữ liệu và lưu trữ được tối ưu hóa riêng. Điều này cho phép mở rộng độc lập và tối ưu hóa hiệu suất của các hoạt động đọc và ghi.

Kiến trúc hướng sự kiện

Kiến trúc hướng sự kiện được triển khai để đạt được sự kết hợp lỏng lẻo giữa các dịch vụ. Nó tận dụng mô hình sự kiện publish-subscribe và triển khai lỏng lẻo các mối quan hệ kết hợp vô nghĩa giữa các giao dịch.

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

Kiến trúc đa mô-đun được áp dụng để đảm bảo tách biệt các mối quan tâm và mô-đun hóa.

Sử dụng Gradle để tách các module như bank-api, bank-core, bank-domain, v.v. và xác định rõ ràng trách nhiệm và sự phụ thuộc của từng module. Điều này cải thiện khả năng tái sử dụng và khả năng bảo trì của code.

Mẫu giao dịch theo sau

Mô hình theo dõi giao dịch được triển khai để đảm bảo tính nhất quán và khả năng truy xuất của giao dịch.

Sử dụng AOP để theo dõi thời điểm bắt đầu và kết thúc giao dịch và ghi lại trạng thái và kết quả của mỗi giao dịch. Điều này giúp theo dõi và gỡ lỗi giao dịch dễ dàng hơn.

API mở (Swagger)

OpenAPI (Swagger) được áp dụng cho việc ghi chép và thử nghiệm API.

Tự động ghi lại các điểm cuối API, lược đồ yêu cầu/phản hồi và phương thức xác thực của bạn bằng SpringDoc OpenAPI. Điều này làm tăng khả năng đọc và khả năng kiểm tra API của bạn và tạo điều kiện thuận lợi cho việc cộng tác với các nhà phát triển khách hàng.

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 dụng cho công việc thực tế.

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

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

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

Tôi muốn kết hợp các 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 lĩnh vực này hoặc nếu bạn là người hành nghề, bạn có thể chứng minh hiệu suất tốt hơn trong môi trường thực tế.

4. Bài giảng 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 khi bạn xem bài giảng. Bài giảng này không được tạo ra chỉ dựa trên kiến ​​thức của tôi. Nó cũng bao gồm ý kiến ​​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.

  • Không bao gồm cơ sở hạ tầng.

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 muốn học kỹ thuật xử lý logic nghiệp vụ phức tạp, thoát khỏi CRUD cơ bản.

  • Lập trình viên muốn trau dồi năng lực thiết kế

  • Người nhập môn kiến trúc MSA

  • Nhà phát triển muốn học kiến trúc hướng sự kiện và chiến lược tách dịch vụ

  • Lập trình viên muốn học dự án thực tế sử dụng Spring + Kotlin

Xin chào
Đây là

1,331

Học viên

90

Đánh giá

55

Trả lời

4.3

Xếp hạng

10

Các khóa học

자기 소개

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

 

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

 

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

  • 카카오에서 서버 개발하고 계시는 초이

  • 토스에서 개발하고 계시는 서버 개발자

  • 유니콘 스타트업에서 개발도 하고, DB도 관리하시는 능력자

 

지식공유자 경력

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

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

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

 

인터뷰 이력

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

Tất cả

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

2 đánh giá

5.0

2 đánh giá

  • devHand님의 프로필 이미지
    devHand

    Đánh giá 6

    Đánh giá trung bình 5.0

    5

    62% đã tham gia

    실제 기능 구현과 서버 관리에 대한 영양가 있는 강의라고 생각하고 디버깅하는 모습도 리스크가 많으셨을텐데 현실적으로 보여주시는게 너무 도움이 되었습니다. 내용 자체도 좋은데 여러모로 배워갈 수 있는 부분이 많은거 같네요. 강의 잘 들었습니다.

    • Hong
      Giảng viên

      좋은 평 남겨주셔서 감사합니다. devHand님!! 이 강의가 devHand님에게 좋은 주제로써 접근이 된거같아 기분이 좋네요!! 다음 강의도 더 알찬 강의로 찾아뵙도록 하겠습니다. 감사합니다!

  • 우왕 개발자다님의 프로필 이미지
    우왕 개발자다

    Đánh giá 4

    Đánh giá trung bình 5.0

    5

    32% đã tham gia

    같이 강의를 촬영하는데 코드와 아키텍처를 고민하고 참여한 카카오에서 개발하고 있는 서버 개발자 입니다!! 이번에는 좀 더 아키텍처 부분에 집중을 하여 프로젝트를 준비해 보았고 동시성 처리에 대한 부분과 애플리케이션 회복 패턴에 대해서도 포함을 시켜보았습니다. 이 강의가 여러분들의 견문을 넓혀주고 큰 그림을 볼 수 있는 좋은 강의가 되었으면 좋겠습니다!! 많은 관심 부탁드립니다! 🩷

    • Hong
      Giảng viên

      항상 도움 주셔서 감사합니다!! 다음 강의도 함께 만들어서 많은 분들에게 좋은 지식 공유드려봐요 ㅎㅎ

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

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!