Công nghệ sử dụng cho dự án MSEC
1. Phát triển app
Mô hình microservices
1.1 Services
Các services sẽ được xây dựng dựa trên NestJS (base trên nền ExpressJS - một NodeJS framework)
1. Basic setup
- Triển khai một service theo doc cơ bản của NestJS
- Sử dụng MongoDB làm database (setup theo mongo doc của NestJS)
- Sử dụng Swagger làm api documentation (setup theo swagger doc của NestJS)
- Sau khi setup Swagger thì mình dùng thêm express-basic-auth npm để security cho swagger doc link (xem thêm ở bài viết này)
- Sử dụng config npm để quản lý các configs trong service thay vì hướng dẫn trong NestJS (lý do tại sao thì mình sẽ cập nhật thêm sau, do hiện tại chỉ thấy rằng các project trong dự án mình tham gia sử dụng theo cách này)
- Setup validation theo NestJS doc (xem thêm ở bài viết này)
2. Security
- Sử dụng
helmetđể bảo vệ ứng dụng khỏi một số lỗ hổng web bảo mật (xem thêm tại NestJS doc helmet )
3. Heath check
- Sử dụng
@nestjs/terminustrong NestJS để kiểm tra tình trạng sức khỏe của ứng dụng, có 2 bước cần thực hiện ở đây:- Step 1: Kiểm tra sức khỏe của các thành phần liên quan (ví dụ: database ( mongodb ), microservices, memory, disk,...)
- Step 2: Cung cấp một url cho các dịch vụ của cơ sở hạ tầng (ví dụ: kubenetes) dùng để ping tới liên tục để kiểm tra sức khỏe hệ thống và xử lý các bước tiếp theo tùy vào trạng thái trả về là
healthyorunhealthy.
4. Hybrid app (http + microservice)
Đối với mỗi một services chúng ta có thể thiết lập nó chỉ để phục vụ:
- http(s) request / response
- microservice app (sử dụng TCP / MQTT hoặc Topic,...)
- hybrid (http + microservice)
Thì đối với hệ thống của chúng ta, chúng ta sẽ phải kết hợp cả 2 loại dịch vụ nên sẽ lựa chọn loại app là hybrid
Để thiết lập hybrid app trong NestJS ta làm như hướng dẫn trong doc của NestJS
1.2 Web UI
Giao diện web sẽ được xây dựng dựa trên ReactJS library
2. Triển khai app
Các services sẽ triển khai dưới dạng Docker container và được quản lý bởi Kubenetes
3. Cơ sở hạ tầng để run app
Sử dụng các dịch vụ của AWS
4. Repository / Image registry
Sử dụng Gitlab để lưu trữ source code, Docker images
