0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

NestJS: Hướng Dẫn Xây Dựng Microservices với gRPC, API Gateway và Xác Thực — Phần 1/2

Đăng vào 3 tuần trước

• 4 phút đọc

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:

  1. 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.
  2. 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.
  3. 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:

Copy
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:

Copy
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:

Copy
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:

Copy
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:

Copy
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:

Copy
    "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:

Copy
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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào