Course Overview
Khóa học hướng dẫn bạn xây dựng hệ thống Hóa đơn điện tử (E-Invoice) chuẩn doanh nghiệp với NestJS Microservices. Bạn sẽ học kiến trúc microservices, giao tiếp qua TCP, gRPC, Kafka, tích hợp Keycloak, Docker, Redis, Stripe, và triển khai production-ready, đảm bảo hiệu năng và khả năng mở rộng cao.
Trong dự án thực tế, bạn sẽ phát triển các service: Invoice, Media, PDF Generator, Mail, Payment, Authorizer, và BFF. Hệ thống áp dụng các pattern hiện đại như API Gateway, Event-Driven Architecture, Saga Pattern, kèm theo logging & monitoring bằng Grafana, Loki, Promtail để đảm bảo tính ổn định.
Bạn sẽ học:
Tổ chức Nx Monorepo trong NestJS Microservices
Authentication & Authorization với Keycloak
Tích hợp Redis cache tối ưu hiệu năng
Thanh toán trực tuyến với Stripe
CI/CD với Docker & GitHub Actions
Async comunication với Apache Kafka
Sync comunication với TCP, gRPC, REST
Áp dụng Testing Strategy như Unit test, Integration test, E2E test
Xử lý Distributed Transaction với SAGA Pattern
Monitoring vs Observability hệ thống với Grafana, Loki, Promtail, Prometheus, Tempo, pentelemetry
Khóa học phù hợp cho backend developer muốn nâng cấp kỹ năng, Node.js developer muốn ứng dụng NestJS vào dự án thực tế, và bất kỳ ai quan tâm microservices production-ready. Hoàn thành khóa học, bạn sẽ đủ năng lực triển khai hệ thống doanh nghiệp thực thụ, sẵn sàng cho môi trường làm việc chuyên nghiệp.
FAQ
FAQ area empty
Course curriculum
-
Giới thiệu khoá học
Xem trước -
Mua khoá học với giá ưu đãi như nào ?
Xem trước -
Lời cảm ơn
Xem trước -
About me
Xem trước -
Đối tượng học viên & điều kiện cần để tham gia khoá học
Xem trước -
Tương tác với giảng viên như thế nào
Xem trước -
Truy cập tài nguyên khoá học như thế nào ? (QUAN TRỌNG)
Xem trước -
Lưu ý cho các bạn học viên (QUAN TRỌNG)
-
Giới thiệu khoá học
Xem trước -
Mua khoá học với giá ưu đãi như nào ?
Xem trước -
Lời cảm ơn
Xem trước -
About me
-
Đối tượng học viên & điều kiện cần để tham gia khoá học
Xem trước -
Tương tác với giảng viên như thế nào
-
Truy cập tài nguyên khoá học như thế nào ? (QUAN TRỌNG)
-
Lưu ý cho các bạn học viên (QUAN TRỌNG)
-
Microservice là gì? Khi nào không nên dùng
-
Những hiểu lầm phổ biến về Microservices
-
Chi phí thật sự của Microservices
-
Giới thiệu tổng quan về NestJS
-
Truy cập NestJS Document
-
Làm quen với NestJS Syntax thông qua CRUD APIs
-
Microservice là gì? Khi nào không nên dùng
-
Những hiểu lầm phổ biến về Microservices
-
Chi phí thật sự của Microservices
-
Giới thiệu tổng quan về NestJS
Xem trước -
Truy cập NestJS Document
Xem trước -
Làm quen với NestJS Syntax thông qua CRUD APIs
-
Chuẩn bị môi trường phát triển dự án thực chiến
-
Monorepo trong Microservices: Ưu nhược điểm & So sánh với Multirepo
-
Nx Monorepo
-
Khởi tạo dự án với Nx CLI
-
Làm quen với Nx task - serve, build, test, lint...
-
Review cấu trúc dự án - app, libs, docker...
-
Tạo NestJS app với Nx console
-
Tạo NestJS libs với Nx console
-
Chuẩn bị môi trường phát triển dự án thực chiến
Xem trước -
Monorepo trong Microservices: Ưu nhược điểm & So sánh với Multirepo
-
Nx Monorepo
-
Khởi tạo dự án với Nx CLI
-
Làm quen với Nx task - serve, build, test, lint...
-
Review cấu trúc dự án - app, libs, docker...
-
Tạo NestJS app với Nx console
-
Tạo NestJS libs với Nx console
-
Vấn đề thường gặp trong teamwork: Lỗi format, lint và commit message
-
Giới thiệu Git Hooks & Husky
-
Tự động lint và format code trước commit với lint-staged
-
Commitlint & Conventional Commits: Giữ commit message chuẩn
-
Thực hành setup vào dự án
-
Vấn đề thường gặp trong teamwork: Lỗi format, lint và commit message
-
Giới thiệu Git Hooks & Husky
-
Tự động lint và format code trước commit với lint-staged
-
Commitlint & Conventional Commits: Giữ commit message chuẩn
-
Thực hành setup vào dự án
-
Tổng quan về kiến trúc - Application & Infrastructure Layer
-
Tìm hiểu về kiến trúc Bff
-
Load Env file với NestJs Config
-
Cài đặt Lib Configuration
-
Validate config với NestJS Validation
-
Cấu hình Swagger - API Documentation cho dự án
-
Cấu hình Prettierrc format
-
Setup một số script cơ bản trong package.json
-
Cài đặt Lib Middlewares
-
Xây dựng hoàn chỉnh LoggerMiddleware
-
Xây dựng ResponseDto để Chuẩn Hóa API Response
-
Xây dựng ExceptionInterceptor: Chuẩn Hóa Error Response
-
Tổng quan về kiến trúc - Application & Infrastructure Layer
-
Tìm hiểu về kiến trúc Bff
-
Load Env file với NestJs Config
-
Cài đặt Lib Configuration
-
Validate config với NestJS Validation
-
Cấu hình Swagger - API Documentation cho dự án
-
Cấu hình Prettierrc format
-
Setup một số script cơ bản trong package.json
-
Cài đặt Lib Middlewares
-
Xây dựng hoàn chỉnh LoggerMiddleware
-
Xây dựng ResponseDto để Chuẩn Hóa API Response
-
Xây dựng ExceptionInterceptor: Chuẩn Hóa Error Response
-
Giao tiếp trong Microservices như thế nào ?
-
Service Communication Matrix: Các Cách Giao Tiếp Trong Microservices
-
TCP Transport trong Microservices: Communication Hiệu Năng Cao
-
NestJs Microservice với TCP Transporter
-
Tìm hiểu cách config TCP comunication
-
Giới thiệu RxJS - Reactive programming
-
Cấu hình kết nối TCP trong dự án
-
Khởi tạo TcpProvider - Chuẩn hoá TCP Config
-
Xây dựng TCP Logging Interceptor để ghi log request/response
-
Chuẩn hóa Request/Response Type trong giao tiếp TCP
-
Decorators trong NestJS: Cách hoạt động và ví dụ thực tế
-
Xây dựng Custom Decorator trong NestJS: ProcessId & Request Param
-
Giao tiếp trong Microservices như thế nào ?
-
Service Communication Matrix: Các Cách Giao Tiếp Trong Microservices
-
TCP Transport trong Microservices: Communication Hiệu Năng Cao
-
NestJs Microservice với TCP Transporter
-
Tìm hiểu cách config TCP comunication
-
Giới thiệu RxJS - Reactive programming
-
Cấu hình kết nối TCP trong dự án
-
Khởi tạo TcpProvider - Chuẩn hoá TCP Config
-
Xây dựng TCP Logging Interceptor để ghi log request/response
-
Chuẩn hóa Request/Response Type trong giao tiếp TCP
-
Decorators trong NestJS: Cách hoạt động và ví dụ thực tế
-
Xây dựng Custom Decorator trong NestJS: ProcessId & Request Param
-
Thiết kế Database trong Microservice: SQL, NoSQL & Patterns
-
Review thiết kế database trong project - MongoDB, Postgres, Redis
-
Cài đặt MongoDB với Docker compose
-
Kết nối NestJS app tới MongoDB
-
Khởi tạo MongoProvider - Chuẩn hoá Mongo Config
-
Khởi tạo Invoice Schema
-
Đăng ký Schema với NestJs và khởi tạo Repository
-
Review Diagram - chi tiết từng Phase của Project
-
Thực hiện Phase 1 - Create Invoice API
-
Khởi tạo Product Service
-
Cài đặt Postgres & pgAdmin với Docker compose
-
Khởi tạo TypeORM provider - Connect Postgres DB
-
Đăng Ký Entity với NestJs và tạo Repository
-
Implement Product APIs - Create & GetAll
-
NestJs microservices exception handling
-
Recap: database trong microservice architecture
-
Thiết kế Database trong Microservice: SQL, NoSQL & Patterns
-
Review thiết kế database trong project - MongoDB, Postgres, Redis
-
Cài đặt MongoDB với Docker compose
-
Kết nối NestJS app tới MongoDB
-
Khởi tạo MongoProvider - Chuẩn hoá Mongo Config
-
Khởi tạo Invoice Schema
-
Đăng ký Schema với NestJs và khởi tạo Repository
-
Review Diagram - chi tiết từng Phase của Project
-
Thực hiện Phase 1 - Create Invoice API
-
Khởi tạo Product Service
-
Cài đặt Postgres & pgAdmin với Docker compose
-
Khởi tạo TypeORM provider - Connect Postgres DB
-
Đăng Ký Entity với NestJs và tạo Repository
-
Implement Product APIs - Create & GetAll
-
NestJs microservices exception handling
-
Recap: database trong microservice architecture
-
Section overview
-
Security trong Microservices
-
Khởi tạo User Access Service và build Role Module
-
Seeding Role Data: Importing JSON Files with Nx Task
-
Xây dựng User Management APIs
-
Thách thức về Authentication & Authorization trong Microservices
-
Giới thiệu Keycloak: Identity & Access Management cho Microservices
-
Cài đặt & Cấu hình Keycloak với Docker
-
Thực hành với Keycloak Admin Console: Tạo Realm, Client & User
-
Tổng quan các Authentication Standards: OAuth 2.0, OIDC và SAML 2.0
-
Authentication Flow trong Keycloak: Giải thích và demo trực quan
-
Thêm Google Identity Provider vào Keycloak (Login with Google)
-
Tìm hiểu Keycloak Admin REST API và tạo User bằng API
-
Integrate Keycloak Admin REST API vào Project để quản lý User
-
Build Api Login với Username và Password để lấy AccessToken
-
Giới thiệu về NestJS Guard cho Authentication & Authorization
-
Review về flow Authentication & Authorization của Project
-
Xây dựng User Guard trong project để kiểm tra Authentication
-
Cơ chế Verify JWT trong NestJS sử dụng JWKS từ Keycloak
-
Triển khai verify Token với Keycloak
-
Set User Info vào Request sau khi Verify Token
-
Xây dựng Permission Guard - Authorization
-
Section overview
-
Security trong Microservices
-
Khởi tạo User Access Service và build Role Module
-
Seeding Role Data: Importing JSON Files with Nx Task
-
Xây dựng User Management APIs
-
Thách thức về Authentication & Authorization trong Microservices
-
Giới thiệu Keycloak: Identity & Access Management cho Microservices
-
Cài đặt & Cấu hình Keycloak với Docker
-
Thực hành với Keycloak Admin Console: Tạo Realm, Client & User
-
Tổng quan các Authentication Standards: OAuth 2.0, OIDC và SAML 2.0
-
Authentication Flow trong Keycloak: Giải thích và demo trực quan
-
Thêm Google Identity Provider vào Keycloak (Login with Google)
-
Tìm hiểu Keycloak Admin REST API và tạo User bằng API
-
Integrate Keycloak Admin REST API vào Project để quản lý User
-
Build Api Login với Username và Password để lấy AccessToken
-
Giới thiệu về NestJS Guard cho Authentication & Authorization
-
Review về flow Authentication & Authorization của Project
-
Xây dựng User Guard trong project để kiểm tra Authentication
-
Cơ chế Verify JWT trong NestJS sử dụng JWKS từ Keycloak
-
Triển khai verify Token với Keycloak
-
Set User Info vào Request sau khi Verify Token
-
Xây dựng Permission Guard - Authorization
-
Giới thiệu Redis và ứng dụng trong hệ thống Microservice
-
Review Cache Flow Diagram trong hệ thống
-
Cài đặt Redis & Redis Insight với Docker
-
Caching trong NestJS với Redis – Cách hoạt động & cấu hình
-
Tích hợp Redis vào project – Cấu hình & Kết nối thực tế
-
Caching User Data trong Redis – Giúp hệ thống chạy nhanh hơn
-
Rate Limiting - Bảo vệ API trong hệ thống
-
Cấu hình Rate Limiting với NestJS Throttler + Redis
-
Giới thiệu Redis và ứng dụng trong hệ thống Microservice
-
Review Cache Flow Diagram trong hệ thống
-
Cài đặt Redis & Redis Insight với Docker
-
Caching trong NestJS với Redis – Cách hoạt động & cấu hình
-
Tích hợp Redis vào project – Cấu hình & Kết nối thực tế
-
Caching User Data trong Redis – Giúp hệ thống chạy nhanh hơn
-
Rate Limiting - Bảo vệ API trong hệ thống
-
Cấu hình Rate Limiting với NestJS Throttler + Redis
-
GRPC Transport trong Microservices: Communication Hiệu Năng Cao
-
NestJS Microservice với gRPC Transporter
-
Config gRPC Server cho Authorizer service
-
Config gRPC Client cho Bff service
-
Giao tiếp gRPC giữa 2 service - BFF -> Authorizer
-
Giao tiếp gRPC giữa 2 service - Authorizer -> UserAccess
-
GRPC Transport trong Microservices: Communication Hiệu Năng Cao
-
NestJS Microservice với gRPC Transporter
-
Config gRPC Server cho Authorizer service
-
Config gRPC Client cho Bff service
-
Giao tiếp gRPC giữa 2 service - BFF -> Authorizer
-
Giao tiếp gRPC giữa 2 service - Authorizer -> UserAccess
-
Review phase 2
-
Khởi tạo Pdf Generator TCP Microservice
-
Giới thiệu về Puppeteer & EJS (Embedded JavaScript templating)
-
Render HTML template với EJS
-
Tạo Invoice PDF với Puppeteer
-
Khởi tạo Media TCP Microservice
-
Upload file PDF với Cloudinary
-
Giới thiệu Stripe và các mô hình thanh toán phổ biến
-
Tạo link thanh toán Invoice với Stripe Checkout Session
-
Xử lý Stripe Webhook - Cập nhật Invoice khi thanh toán thành công
-
Review phase 2
-
Khởi tạo Pdf Generator TCP Microservice
-
Giới thiệu về Puppeteer & EJS (Embedded JavaScript templating)
-
Render HTML template với EJS
-
Tạo Invoice PDF với Puppeteer
-
Khởi tạo Media TCP Microservice
-
Upload file PDF với Cloudinary
-
Giới thiệu Stripe và các mô hình thanh toán phổ biến
-
Tạo link thanh toán Invoice với Stripe Checkout Session
-
Xử lý Stripe Webhook - Cập nhật Invoice khi thanh toán thành công
-
Review phase 3 - Email processing
-
Message Queue là gì và tại sao cần trong hệ thống Microservice
-
Apache Kafka là gì? Tại sao mọi hệ thống lớn đều sử dụng Kafka
-
Cài đặt Apache Kafka với Docker compose
-
NestJs Microservice với Kafka Transporter
-
Khởi tạo Mail service - Kafka Consumer
-
Cấu hình Invoice là Producer và Demo Emit Event
-
Tái sử dụng Kafka Producer Config với Dynamic Module
-
Gửi Email với Nodemailer qua Gmail SMTP
-
Tạo Invoice Email Template và gửi Email đính kèm file
-
Review phase 3 - Email processing
-
Message Queue là gì và tại sao cần trong hệ thống Microservice
-
Apache Kafka là gì? Tại sao mọi hệ thống lớn đều sử dụng Kafka
-
Cài đặt Apache Kafka với Docker compose
-
NestJs Microservice với Kafka Transporter
-
Khởi tạo Mail service - Kafka Consumer
-
Cấu hình Invoice là Producer và Demo Emit Event
-
Tái sử dụng Kafka Producer Config với Dynamic Module
-
Gửi Email với Nodemailer qua Gmail SMTP
-
Tạo Invoice Email Template và gửi Email đính kèm file
-
Distributed transaction là gì ?
-
Saga Pattern trong Microservices
-
Review Saga Orchestration Flow của dự án
-
Build Saga Orchestration Library
-
Khởi tạo Saga Steps và Execute
-
Implement Compensation Flow - rollback
-
Distributed transaction là gì ?
-
Saga Pattern trong Microservices
-
Review Saga Orchestration Flow của dự án
-
Build Saga Orchestration Library
-
Khởi tạo Saga Steps và Execute
-
Implement Compensation Flow - rollback
-
Tại sao testing microservices phức tạp?
-
Các chiến lược Testing trong Microservices
-
Tìm hiểu về Testing trong NestJS
-
Viết Unit test với Jest
-
Viết Integration test với Testcontainers
-
Triển khai End-to-End (e2e) testing
-
Tại sao testing microservices phức tạp?
-
Các chiến lược Testing trong Microservices
-
Tìm hiểu về Testing trong NestJS
-
Viết Unit test với Jest
-
Viết Integration test với Testcontainers
-
Triển khai End-to-End (e2e) testing
-
Giới thiệu về Monitoring & Observability
-
Health Check trong Microservices - Phát hiện lỗi, tự phục hồi & ổn định cao
-
Thực hiện Health Check cho project (TCP, gRPC, Redis, Memory)
-
Centralize Logging trong Microservices - Ghi log tập trung
-
PLG Stack (Promtail, Loki, Grafana)
-
Cài đặt PLG Stack với Docker compose
-
NestJs Pino là gì? Vì sao nên log JSON format?
-
Cấu hình Pino logger và push log lên Loki server
-
Tạo Logs panel trên Grafana Dashboard
-
Monitoring Metrics Trong Microservices
-
Tạo Metrics dashboard với Prometheus trên Grafana
-
Distributed Tracing trong Microservices
-
Thiết kế hệ thống Tracing với Grafana Tempo & OpenTelemetry
-
Cài đặt và cấu hình Grafana Tempo
-
Setup OpenTelemetry và auto instrumentation
-
Context propagation traces data giữa các TCP Microservices
-
Giới thiệu về Monitoring & Observability
-
Health Check trong Microservices - Phát hiện lỗi, tự phục hồi & ổn định cao
-
Thực hiện Health Check cho project (TCP, gRPC, Redis, Memory)
-
Centralize Logging trong Microservices - Ghi log tập trung
-
PLG Stack (Promtail, Loki, Grafana)
-
Cài đặt PLG Stack với Docker compose
-
NestJs Pino là gì? Vì sao nên log JSON format?
-
Cấu hình Pino logger và push log lên Loki server
-
Tạo Logs panel trên Grafana Dashboard
-
Monitoring Metrics Trong Microservices
-
Tạo Metrics dashboard với Prometheus trên Grafana
-
Distributed Tracing trong Microservices
-
Thiết kế hệ thống Tracing với Grafana Tempo & OpenTelemetry
-
Cài đặt và cấu hình Grafana Tempo
-
Setup OpenTelemetry và auto instrumentation
-
Context propagation traces data giữa các TCP Microservices
-
Containerization là gì? Vì sao Microservice không thể thiếu Docker?
-
Hiểu bản chất Docker: từ Containerization đến Multi-stage build trong thực tế
-
Containerization là gì? Vì sao Microservice không thể thiếu Docker?
-
Hiểu bản chất Docker: từ Containerization đến Multi-stage build trong thực tế
-
Hướng Dẫn Viết Dockerfile và Build Docker Image cho Application
-
Hoàn Tất Quy Trình Deploy Docker và Run Container
Requirment
-
Kiến thức cơ bản về JavaScript hoặc TypeScript
-
Hiểu các khái niệm REST API và HTTP
-
Có kinh nghiệm với Node.js (Express.js hoặc NestJS cơ bản là một lợi thế)
-
Kiến thức cơ bản về MongoDB hoặc cơ sở dữ liệu bất kỳ
-
Biết sử dụng Docker ở mức cơ bản (pull, run container)
-
Môi trường phát triển đã cài đặt: Node.js, npm hoặc yarn, Docker Desktop
-
Tinh thần sẵn sàng học các công nghệ mới và thực hành trên dự án thực tế
Outcomes
-
Thiết kế và triển khai Microservices Architecture quy mô enterprise
-
Nắm vững cách thiết kế và implement API Gateway Pattern
-
Implement Event-Driven Architecture với Kafka
-
Xây dựng RESTful APIs và gRPC, TCP services với NestJS
-
Xử lý Distributed Transactions với Saga Pattern
-
Setup Observability Stack hoàn chỉnh (Logging, Metrics, Tracing)
-
Implement Authentication & Authorization với Keycloak
-
Áp dụng Testing Strategy như Unit test, Integration test, E2E test
-
Container hóa và triển khai hệ thống với Docker và Docker Compose
-
Setup CI/CD pipeline với GitHub Actions & Deploy lên VPS/Cloud
-
Thiết kế database với MongoDB và PostgreSQL
-
Tích hợp Stripe để xử lý thanh toán trực tuyến an toàn
-
Tổ chức mã nguồn theo kiến trúc monorepo với Nx
-
Áp dụng Rate limiting với Throttler
-
Áp dụng caching tối ưu performance với Redis
-
Chuẩn hóa commit và code style với Husky, Lint-Staged, Commitlint
-
Seeding Data: Importing JSON Files with Nx Task
Instructor
Nguyễn Đình Cường
1.2
-
1 Student
-
330 Courses
-
1253 reviews
Xin chào các bạn, tôi là Nguyễn Đình Cường, một lập trình viên và giảng viên đam mê công nghệ với hơn 15 năm kinh nghiệm trong ngành công nghiệp phần mềm. Tôi tốt nghiệp từ Bưu Chính Viễn Thông và đã từng làm việc cho một số công ty công nghệ hàng đầu như FPT Software và VinGroup. Với chuyên môn chính là phát triển ứng dụng web, tôi đã làm việc với nhiều công nghệ như HTML, CSS, JavaScript, React cho front-end và Node.js, Express, MongoDB cho back-end. Không chỉ dừng lại ở việc viết mã, tôi còn yêu thích tìm hiểu sâu về thiết kế hệ thống và kiến trúc phần mềm. Tôi tin rằng quá trình học lập trình không chỉ đơn thuần là lý thuyết, mà còn là sự trải nghiệm thực tế và giải quyết vấn đề. Trong các khóa học của mình, tôi cố gắng cung cấp cho học viên những bài giảng thú vị và dễ hiểu, cùng với các bài tập thực hành giúp củng cố kiến thức. Tôi hy vọng rằng qua các khóa học của mình, bạn sẽ không chỉ học được cách viết mã, mà còn phát triển tư duy lập trình và kỹ năng giải quyết vấn đề. Hãy cùng nhau khám phá thế giới lập trình và biến ý tưởng của bạn thành hiện thực! Nếu bạn có bất kỳ câu hỏi nào, đừng ngần ngại liên hệ với tôi. Tôi rất vui được hỗ trợ bạn trong hành trình học tập của mình!
View Details