Quản lý hệ thống và triển khai tự động cho ứng dụng Microservice

System management and automated deployment for Microservice applications

Đề tài “Quản lý hệ thống và triển khai tự động cho Microservice” nhằm mục đích nghiên cứu và áp dụng các nguyên lý của kiến trúc microservice và các kỹ thuật DevOps trong việc phát triển và triển khai một ứng dụng chia sẻ video. Qua đề tài này, nhóm chúng em sẽ tìm hiểu cách tổ chức, thiết kế và quản lý các dịch vụ độc lập, áp dụng các công cụ CI/CD để tự động hóa quy trình triển khai và đảm bảo hiệu suất cũng như bảo mật cho hệ thống. Bên cạnh đó, chúng em tích hợp thêm Google Kubernetes Engine (GKE) để quản lý và điều phối các container, đảm bảo tính linh hoạt và khả năng mở rộng của hệ thống. Đề tài không chỉ giúp nâng cao kỹ năng kỹ thuật mà còn phát triển khả năng làm việc nhóm và quản lý dự án, hướng tới mục tiêu hoàn thiện một sản phẩm ứng dụng trong môi trường thực tế.

TÁC GIẢ

Trịnh Tấn Đạt, Tạ Đức Bảo

GIẢNG VIÊN HƯỚNG DẪN

NGÀNH

Năm:

Tổng quan

Đề tài “Quản lý hệ thống và triển khai tự động cho Microservice” nhằm mục đích nghiên cứu và áp dụng các nguyên lý của kiến trúc microservice và các kỹ thuật DevOps trong việc phát triển và triển khai một ứng dụng chia sẻ video. Qua đề tài này, nhóm chúng em sẽ tìm hiểu cách tổ chức, thiết kế và quản lý các dịch vụ độc lập, áp dụng các công cụ CI/CD để tự động hóa quy trình triển khai và đảm bảo hiệu suất cũng như bảo mật cho hệ thống. Bên cạnh đó, chúng em tích hợp thêm Google Kubernetes Engine (GKE) để quản lý và điều phối các container, đảm bảo tính linh hoạt và khả năng mở rộng của hệ thống. Đề tài không chỉ giúp nâng cao kỹ năng kỹ thuật mà còn phát triển khả năng làm việc nhóm và quản lý dự án, hướng tới mục tiêu hoàn thiện một sản phẩm ứng dụng trong môi trường thực tế.

Phân tích và thiết kế đề tài

Giai đoạn Phát triển (Dev) trong quy trình CI/CD bao gồm các bước chính từ việc phát triển mã nguồn, kiểm thử tự động, xây dựng và đẩy image Docker lên Docker Hub, và gửi thông báo đến Slack. Quy trình chi tiết như sau:

  • Phát triển mã nguồn: Developer sẽ thực hiện công việc phát triển tính năng mới hoặc sửa lỗi trong mã nguồn của ứng dụng trên môi trường làm việc cá nhân.
  • Commit mã nguồn: Khi hoàn thành việc phát triển developer sẽ commit mã nguồn mới lên kho lưu trữ mã nguồn trên GitHub. Đây là bước đầu tiên để bắt đầu quy trình tích hợp liên tục (CI).
  • GitHub Actions: Sau khi mã nguồn được commit, GitHub Actions sẽ tự động được kích hoạt. GitHub Actions là một dịch vụ CI/CD của GitHub cho phép tự động hóa quy trình xây dựng, kiểm thử và triển khai ứng dụng.
  • GitHub Actions sẽ chạy các pipeline được định nghĩa trong tệp cấu hình (workflow file). Trong pipeline này, các bước thực hiện bao gồm việc kiểm thử và xây dựng image Docker.
  • Kiểm thử tự động: Trong pipeline, bước đầu tiên là thực hiện các test case. Các test case được viết sẵn sẽ kiểm tra mã nguồn để đảm bảo rằng không có lỗi phát sinh và các tính năng mới hoạt động đúng như mong đợi.
  • Nếu bất kỳ test case nào không thành công, pipeline sẽ dừng lại và thông báo lỗi sẽ được gửi đến nhà phát triển.
  • Xây dựng và đẩy image Docker: Nếu tất cả các test case đều thành công, bước tiếp theo là xây dựng image Docker của ứng dụng.
  • Image Docker sau đó sẽ được đẩy lên Docker Hub. Docker Hub là một kho lưu trữ công cộng cho phép lưu trữ và phân phối các image Docker.
  • Gửi thông báo đến Slack: Sau khi hoàn thành quá trình xây dựng và đẩy image Docker, một thông báo sẽ được gửi đến workspace trên Slack để thông báo cho nhóm phát triển về trạng thái của pipeline.
  • Thông báo này bao gồm thông tin về việc kiểm thử và xây dựng image Docker có thành công hay không, giúp nhóm phát triển theo dõi quá trình CI/CD một cách dễ dàng.
image 23

Hình 1. Ứng dụng microservice

Kiến trúc hệ thống

image 57

Hình 2. Mô hình triển khai tổng quan

image 24

Hình 3. Mô hình kiến trúc ứng dụng

Mô hình cơ bản được triển khai dựa trên 3 phần chính: Front-end (ReactJS), APIGateway(8080) và hệ thống Microservice bao gồm User-Service, Comment-Service và VideoService.

Phân tích mô hình hoạt động:

  • Tại front-end của ứng dụng sẽ là nơi tiếp nhận yêu cầu từ người dùng, qua đó, yêu cầu sẽ được gửi qua API-Gateway (nơi kết nối giữa back-end và front-end).
  • API-Gateway sẽ gửi yêu cầu tùy thuộc vào port khác nhau tương ứng với 3 service khác nhau (8081, 8082, 8083).
  • Sau khi nhận được yêu cầu gửi được từ API-Gateway, các service sẽ tiến hành phân tích yêu cầu, từ đó lấy dữ liệu được lưu trữ vào MongoDB và tiến hành xử lý hiển thị cho người dùng.
image 25

Hình 4. Mô hình triển khai đầy đủ

Mô hình tổng quan biểu hiện khái quát các pod và kết nối sẽ sử dụng trong việc triển khai ứng dụng qua các container được đẩy lên Google Kubernetes Engine.

Mô hình tài nguyên triển khai đầy đủ sẽ bao gồm 8 pod. Trong đó, 2 pod sử dụng Load Balancer là API-Gateway và Front-end (để người dùng có thể truy cập qua trình duyệt), 3 pod sử dụng NodePort (tương ứng với 3 service của ứng dụng) và 3 pod sử dụng ClusterIP (tương ứng với 3 database của 3 service).

Kết luận

Việc triển khai CICD cho ứng dụng microservice đã giúp tự động hóa quá trình xây dựng, kiểm thử và triển khai, giảm thiểu sự can thiệp của con người và tăng tốc độ phát triển. Điều này cho phép các nhóm phát triển tích hợp và kiểm thử mã nhanh chóng, từ đó rút ngắn thời gian đưa sản phẩm ra thị trường.

Quy trình CICD còn cải thiện chất lượng mã nguồn thông qua kiểm thử tự động, giúp phát hiện lỗi sớm và cung cấp phản hồi nhanh chóng. Điều này không chỉ nâng cao chất lượng mã mà còn đảm bảo tính ổn định và đáng tin cậy của ứng dụng khi triển khai, nhờ vào việc quản lý phiên bản hiệu quả và khả năng khôi phục nhanh chóng khi gặp sự cố.

Tổng kết lại, triển khai CICD đã mang lại nhiều lợi ích, từ việc tăng tốc độ phát triển, nâng cao chất lượng mã nguồn, đảm bảo tính ổn định đến việc tiết kiệm chi phí. Đây là một bước tiến quan trọng trong việc nâng cao hiệu quả và năng suất của quá trình phát triển phần mềm. Duy trì và mở rộng việc triển khai CICD cho các dự án khác để đạt được những lợi ích tương tự.