NestJS: Hướng Dẫn Xây Dựng Microservices với gRPC, API Gateway và Xác Thực — Phần 1/2
Trong bài viết này, chúng ta sẽ khám phá cách xây dựng một ứng dụng Microservice đơn giản bằng cách sử dụng NestJS (TypeScript) kết hợp với framework gRPC của Google. Chúng ta sẽ tạo ra một API Gateway để xử lý các yêu cầu HTTP và triển khai xác thực bằng JWT.
Bài viết sẽ được chia thành hai phần:
- Giới thiệu, chuẩn bị, cơ sở dữ liệu và dự án Proto chia sẻ
- Microservice xác thực, microservice sản phẩm và microservice đơn hàng
Hạ Tầng Ứng Dụng
Chúng ta sẽ phát triển một ứng dụng thương mại điện tử với ba microservices:
- Microservice xác thực: Xử lý việc đăng ký và đăng nhập người dùng, xác thực quyền truy cập của các yêu cầu.
- Microservice sản phẩm: Quản lý các sản phẩm, cho phép tạo sản phẩm mới và tìm kiếm sản phẩm theo ID.
- Microservice đơn hàng: Xử lý các đơn hàng trong ứng dụng thương mại điện tử.
Mỗi microservice sẽ được xây dựng đơn giản để giúp bạn dễ dàng tiếp cận với các khái niệm cơ bản về microservices trong NestJS và TypeScript.
NestJS là gì?
NestJS là một framework mạnh mẽ cho phép bạn tạo ra các ứng dụng web trên nền tảng Node.js. Framework này được viết bằng TypeScript, giúp đảm bảo tính mở rộng và hiệu suất. NestJS được thiết kế dựa trên cảm hứng từ Spring và Angular, phù hợp cho việc phát triển API với TypeScript.
gRPC là gì?
gRPC là một framework mã nguồn mở, hiệu suất cao cho phép thực hiện gọi thủ tục từ xa (RPC) giữa các dịch vụ. Nó hỗ trợ kết nối hiệu quả giữa các dịch vụ trong và giữa các trung tâm dữ liệu, giúp tối ưu hóa việc truyền tải dữ liệu và đảm bảo tính ổn định.
API Gateway là gì?
API Gateway hoạt động như một điểm đầu vào duy nhất cho tất cả các yêu cầu HTTP từ khách hàng. Nó sẽ tiếp nhận yêu cầu và định tuyến chúng đến dịch vụ phù hợp, đảm bảo rằng các yêu cầu được xử lý chính xác và hiệu quả.
Yêu Cầu Tiên Quyết
Trước khi bắt đầu, bạn nên có kiến thức cơ bản về TypeScript, RPC, Git (kèm theo Github) và PostgreSQL đã được cài đặt trên máy. Chúng ta sẽ sử dụng Visual Studio Code hoặc bất kỳ trình soạn thảo mã nguồn nào bạn ưa thích.
Cơ Sở Dữ Liệu
Đầu tiên, hãy tạo ba cơ sở dữ liệu trong PostgreSQL cho mỗi microservice:
psql postgres
CREATE DATABASE micro_auth;
CREATE DATABASE micro_product;
CREATE DATABASE micro_order;
Tạo Dự Án
Tiếp theo, chúng ta sẽ cài đặt NestJS CLI và khởi tạo bốn dự án NestJS mới cho API Gateway và ba microservices:
npm i -g @nestjs/cli
mkdir grpc-nest-proto
est new grpc-nest-api-gateway -p npm
est new grpc-nest-auth-svc -p npm
est new grpc-nest-product-svc -p npm
est new grpc-nest-order-svc -p npm
Dự Án Proto Chia Sẻ
Chúng ta cần khởi tạo một dự án cho các tệp Proto:
cd grpc-nest-proto
npm init --y
git init
mkdir proto
touch proto/auth.proto && touch proto/product.proto && touch proto/order.proto
code .
Cài đặt và Cấu Trúc Dự Án
Cài đặt các package cần thiết:
npm i @nestjs/microservices @grpc/grpc-js @grpc/proto-loader
npm i -D @types/node ts-proto
Tiếp theo, tạo các module và controller cần thiết cho từng microservice:
nest g mo auth && nest g co auth --no-spec && nest g s auth --no-spec
nest g mo product && nest g co product --no-spec
nest g mo order && nest g co order --no-spec
touch src/auth/auth.guard.ts
Cấu Hình Thư Viện Proto
Thêm các đường dẫn và thuộc tính cần thiết vào package.json để tạo và sử dụng các tệp protobuf:
"proto:install": "npm i {{link_git_proto}}",
"proto:auth": "protoc --plugin=node_modules/.bin/protoc-gen-ts_proto -I=./node_modules/grpc-nest-proto/proto --ts_proto_out=src/auth/ node_modules/grpc-nest-proto/proto/auth.proto --ts_proto_opt=nestJs=true --ts_proto_opt=fileSuffix=.pb",
"proto:order": "protoc --plugin=node_modules/.bin/protoc-gen-ts_proto -I=./node_modules/grpc-nest-proto/proto --ts_proto_out=src/order/ node_modules/grpc-nest-proto/proto/order.proto --ts_proto_opt=nestJs=true --ts_proto_opt=fileSuffix=.pb",
"proto:product": "protoc --plugin=node_modules/.bin/protoc-gen-ts_proto -I=./node_modules/grpc-nest-proto/proto --ts_proto_out=src/product/ node_modules/grpc-nest-proto/proto/product.proto --ts_proto_opt=nestJs=true --ts_proto_opt=fileSuffix=.pb",
"proto:all": "npm run proto:auth && npm run proto:order && npm run proto:product"
Chạy script để cài đặt và tạo tệp protobuf:
npm run proto:install && npm run proto:all
Phát Triển Microservices
Thực hiện các bước để phát triển microservice xác thực, đơn hàng và sản phẩm với các controller và service tương ứng. Mỗi service sẽ sử dụng gRPC để giao tiếp với nhau qua API Gateway.
Kết Luận
Sau khi hoàn thành các bước này, bạn đã có một hệ thống microservices cơ bản với NestJS hoạt động trên nền tảng gRPC. Bài viết tiếp theo sẽ đề cập cụ thể hơn về cách triển khai và cấu hình từng microservice để hoàn thiện ứng dụng thương mại điện tử của chúng ta.
source: viblo