Xây dựng và triển khai quy trình CI/CD mẫu cho các ứng dụng web Java dựa trên kiến trúc microservices trên Kubernetes và AWS EKS

Building and deploying CI/CD pipeline templates for microservices-based Java web applications on Kubernetes and AWS EKS

Đề tài đã thiết kế và triển khai một kiến trúc hệ thống Microservices mẫu rõ ràng và có cấu trúc, bao gồm các dịch vụ độc lập về chức năng, một API Gateway đóng vai trò điểm truy cập duy nhất, cùng với các thành phần cơ sở dữ liệu phân tán được tối ưu hóa để hoạt động hiệu quả trên Kubernetes. Từ đó, một pipeline CI/CD end-toend tự động đã được thiết lập hoàn chỉnh. Quy trình này bao gồm các giai đoạn Tích hợp liên tục (CI) tự động nhận diện thay đổi mã nguồn từ GitHub, biên dịch (Maven), thực hiện kiểm thử đơn vị và tích hợp, đồng thời tích hợp các công cụ phân tích mã tĩnh (SonarQube) và quét lỗ hổng phụ thuộc (Snyk). Giai đoạn Triển khai liên tục (CD) tự động đóng gói ứng dụng thành Docker Image, quét lỗ hổng Image (Trivy), đẩy Image lên Amazon ECR, và triển khai tự động lên Kubernetes cluster thông qua phương pháp GitOps với Argo CD. Việc triển khai các hệ thống trên Amazon Elastic Kubernetes Service (AWS EKS) đã được thực hiện thành công và vận hành ổn định, chứng minh tính khả thi và hiệu quả của giải pháp trong môi trường điện toán đám mây công nghiệp. Đề tài cũng đặc biệt nhấn mạnh vào tích hợp hiệu quả DevSecOps và ứng dụng phương pháp GitOps để đảm bảo chất lượng, bảo mật và tính nhất quán của hệ thống.

TÁC GIẢ

VÕ ĐỨC ANH, LƯƠNG VÕ PHƯƠNG DUNG

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

NGÀNH

Năm:

Tổng quan

Ngay thời điểm hiện tại, các tổ chức, doanh nghiệp đang phải đối mặt với nhiều thách thức trong việc triển khai và vận hành các ứng dụng với kiến trúc Microservices, bao gồm:

  • Độ phức tạp tăng cao: Với số lượng lớn các dịch vụ độc lập dựa trên kiến trúc Microservices, việc xây dựng, kiểm thử cũng như triển khai trở nên phức tạp đáng kể so với kiến trúc Monolithic.
  • Thiếu tự động hóa: Nhiều quy trình trong quá trình triển khai vẫn còn thủ công, dễ dẫn đến sai sót, gây tốn thời gian và làm chậm tốc độ đưa sản phẩm ra thị trường.
  • Vấn đề về khả năng mở rộng và quản lý tài nguyên: Việc điều phối tài nguyên cho từng các dịch vụ trong kiến trúc Microservices một cách hiệu quả là một bài toán khó khăn.
  • Thách thức về giám sát và khắc phục sự cố: Với nhiều thành phần phân tán khi sử dụng kiến trúc Microservices, việc xác định và xử lý lỗi ở từng thành phần trở nên phức tạp hơn.
    Để giải quyết những thách thức này, việc áp dụng một quy trình CI/CD chặt chẽ, tự động hóa toàn bộ từ phát triển, kiểm thử, đóng gói đến triển khai là điều cần thiết. Đặc biệt, sự kết hợp của Kubernetes để điều phối các container và AWS EKS (Elastic Kubernetes Service) để quản lý Kubernetes trên nền tảng đám mây AWS đã cung cấp một môi trường mạnh mẽ và có khả năng mở rộng cho các ứng dụng sử dụng kiến trúc Microservices. Tuy nhiên, việc xây dựng một quy trình CI/CD mẫu cho các ứng dụng web Java trên nền tảng này vẫn còn nhiều khoảng trống và đòi hỏi sự nghiên cứu chuyên sâu để đưa ra một giải pháp thực tiễn.

Đề tài tập trung vào việc giải quyết thách thức trong quá trình triển khai các ứng dụng web được xây dựng trên kiến trúc Microservices phức tạp. Nhằm tối ưu hóa hiệu quả, đề tài đã đi sâu vào nghiên cứu, xây dựng và triển khai quy trình CI/CD mẫu cho các ứng dụng web Java dựa trên kiến trúc Microservices trên nền tảng Kubernetes và AWS EKS.

Đề tài đã thiết kế và triển khai một kiến trúc hệ thống Microservices mẫu rõ ràng và có cấu trúc, bao gồm các dịch vụ độc lập về chức năng, một API Gateway đóng vai trò điểm truy cập duy nhất, cùng với các thành phần cơ sở dữ liệu phân tán được tối ưu hóa để hoạt động hiệu quả trên Kubernetes. Từ đó, một pipeline CI/CD end-toend tự động đã được thiết lập hoàn chỉnh. Quy trình này bao gồm các giai đoạn Tích hợp liên tục (CI) tự động nhận diện thay đổi mã nguồn từ GitHub, biên dịch (Maven), thực hiện kiểm thử đơn vị và tích hợp, đồng thời tích hợp các công cụ phân tích mã tĩnh (SonarQube) và quét lỗ hổng phụ thuộc (Snyk). Giai đoạn Triển khai liên tục (CD) tự động đóng gói ứng dụng thành Docker Image, quét lỗ hổng Image (Trivy), đẩy Image lên Amazon ECR, và triển khai tự động lên Kubernetes cluster thông qua phương pháp GitOps với Argo CD. Việc triển khai các hệ thống trên Amazon Elastic Kubernetes Service (AWS EKS) đã được thực hiện thành công và vận hành ổn định, chứng minh tính khả thi và hiệu quả của giải pháp trong môi trường điện toán đám mây công nghiệp. Đề tài cũng đặc biệt nhấn mạnh vào tích hợp hiệu quả DevSecOps và ứng dụng phương pháp GitOps để đảm bảo chất lượng, bảo mật và tính nhất quán của hệ thống.

Những đóng góp chính của đề tài là việc cung cấp một giải pháp CI/CD mẫu toàn diện và có cấu trúc cho việc phát triển và triển khai Microservices Java trên Kubernetes và AWS EKS, lấp đầy khoảng trống về tài liệu hướng dẫn thực tiễn tổng thể trong lĩnh vực này. Đề tài cũng đã minh chứng hiệu quả của cách tiếp cận DevSecOps tích hợp sớm bằng thực nghiệm, và nâng cao đáng kể khả năng tự động hóa và quản lý triển khai, tối ưu hóa tốc độ và độ tin cậy của quá trình đưa sản phẩm vào môi trường sản xuất.

Mục tiêu nghiên cứu

Đề tài này nhằm đạt được các mục tiêu sau:

  • Xây dựng một quy trình CI/CD mẫu hoàn chỉnh từ việc thiết kế đến triển khai.
  • Tích hợp Kubernetes như một nền tảng điều phối các container và AWS EKS để quản lý cluster Kubernetes trên đám mây AWS, đảm bảo khả năng mở rộng và tính sẵn sàng cao.
  • Nâng cao năng suất và giảm thiểu lỗi: Giúp các nhóm phát triển tăng tốc độ triển khai, giảm thiểu các lỗi do quy trình thủ công và đảm bảo chất lượng phần mềm.
  • Cung cấp tài liệu hướng dẫn đầy đủ và chi tiết: Tổng hợp các kinh nghiệm và khuyến nghị tốt nhất để xây dựng và duy trì quy trình CI/CD trong môi trường Microservices trên cloud.

Đối tượng nghiên cứu

  • Kiến trúc Microservices: Các nguyên tắc thiết kế, triển khai và vận hành các ứng dụng theo kiến trúc Microservices.
  • Công cụ CI/CD: Các công cụ phổ biến như Jenkins, Argo CD để tự động hóa các giai đoạn của quy trình.
  • Công nghệ container: Docker để đóng gói các Microservices thành các container độc lập.
  • Nền tảng điều phối container: Kubernetes để quản lý, mở rộng và tự động hóa việc triển khai các container.
  • Dịch vụ điện toán đám mây: AWS EKS để quản lý cluster Kubernetes trên nền tảng Amazon Web Services.
  • Ứng dụng Web Java: Sử dụng các framework Java (ví dụ: Spring Boot) để phát triển các Microservices.

Phạm vi nghiên cứu

  • Xây dựng một pipeline CI/CD mẫu: Tập trung vào việc thiết lập một quy trình CI/CD end-to-end cho các ứng dụng web Java Microservices, từ giai đoạn quản lý mã nguồn, build, kiểm thử tự động, đóng gói container, đến triển khai tự động lên Kubernetes.
  • Triển khai trên môi trường Cloud-Native: Giải pháp được triển khai và kiểm chứng trên nền tảng Kubernetes được quản lý bởi AWS EKS.
  • Tích hợp DevSecOps cơ bản: Đề tài tích hợp các công cụ quét chất lượng mã và lỗ hổng bảo mật (SonarQube, Trivy) vào pipeline CI/CD để phát hiện sớm các vấn đề.
  • Áp dụng GitOps: Sử dụng Argo CD để quản lý triển khai các ứng dụng lên Kubernetes theo nguyên tắc GitOps.
  • Ứng dụng mẫu: Triển khai một hệ thống Microservices mẫu cơ bản (ví dụ: một ứng dụng thương mại điện tử đơn giản với các dịch vụ như Product, Order, Inventory, Auth, API Gateway) để minh họa quy trình.

Thiết kế kiến trúc tổng thể

image 76

Các thành phần chính bao gồm Frontend (Angular) làm giao diện người dùng, API Gateway (Spring Cloud Gateway) xử lý định tuyến và xác thực tập trung. Auth Server (Keycloak) quản lý danh tính người dùng. Các dịch vụ nghiệp vụ như Product Service, Order Service, Inventory Service thực hiện các chức năng cụ thể và tương tác với các cơ sở dữ liệu riêng biệt. Tất cả các dịch vụ này sẽ được đóng gói bằng Docker và triển khai trên Kubernetes.

Kiến trúc Pipeline CI/CD

Pipeline CI/CD được thiết kế theo mô hình tự động hóa end-to-end, tích hợp DevSecOps và áp dụng phương pháp GitOps.

image 77
  • Source: Mã nguồn được quản lý trên GitHub.
  • Trigger: GitHub sử dụng webhook để kích hoạt Jenkins pipeline khi có commit lên nhánh main hoặc release.
  • CI trên Jenkins: Các bước Build, kiểm tra dependency, static code scan, build Docker image, push và scan image.
  • CD/GitOps: Argo CD pull manifests từ GitHub, sau đó tự động đồng bộ hóa và triển khai các ứng dụng lên cluster Kubernetes.

Hiện thực hệ thống

image 78
image 79
image 80
image 81
image 82
image 83
image 84

Kết luận

Kết quả đạt được từ đề tài

1. Thiết kế và triển khai kiến trúc Microservices mẫu

Nhóm đã thành công trong việc thiết kế một kiến trúc hệ thống Microservices rõ ràng và có cấu trúc. Kiến trúc này bao gồm các dịch vụ độc lập về chức năng (Product Service, Order Service, Authentication Service), một API Gateway đóng vai trò là điểm truy cập duy nhất, cùng với các thành phần cơ sở dữ liệu phân tán (MongoDB, MySQL) được thiết kế để hoạt động hiệu quả trên nền tảng Kubernetes.

2. Xây dựng quy trình CI/CD hoàn chỉnh và tự động hóa

Đề tài đã thiết lập một pipeline CI/CD end-to-end tự động. Quy trình này bao gồm các giai đoạn quan trọng:

  • Tích hợp liên tục (CI): Tự động hóa quá trình nhận diện thay đổi mã nguồn từ GitHub, biên dịch (Maven), kiểm thử đơn vị và tích hợp, phân tích mã tĩnh (SonarQube) và quét lỗ hổng phụ thuộc (Snyk).
  • Triển khai liên tục (CD): Tự động hóa việc đóng gói ứng dụng thành Docker Image, quét lỗ hổng Image (Trivy), đẩy Image lên Amazon ECR và triển khai tự động lên Kubernetes cluster thông qua phương pháp GitOps với Argo CD.
    3. Triển khai Ứng dụng Java Microservices trên AWS EKS
    Các Microservices Java được xây dựng đã được triển khai và vận hành thành công, ổn định trên Amazon Elastic Kubernetes Service (AWS EKS), chứng minh tính khả thi và hiệu quả của giải pháp trong môi trường điện toán đám mây công nghiệp.
    4. Tích hợp hiệu quả DevSecOps
    Các công cụ kiểm tra chất lượng mã nguồn và bảo mật đã được tích hợp chặt chẽ vào các giai đoạn phù hợp của pipeline CI/CD, giúp phát hiện sớm và giảm thiểu các rủi ro liên quan đến chất lượng mã và lỗ hổng bảo mật trước khi ứng dụng được triển khai.
    5. Ứng dụng pPhương pháp GitOps với Argo CD
    Nhóm đã triển khai thành công phương pháp GitOps, sử dụng Argo CD để tự động đồng bộ hóa trạng thái mong muốn của ứng dụng được khai báo trong Git repository với trạng thái thực tế trên cluster Kubernetes. Điều này không chỉ đảm bảo tính nhất quán của môi trường mà còn cung cấp khả năng theo dõi và khôi phục (rollback) nhanh chóng khi cần thiết.

Hạn chế

Mặc dù đề tài đã đạt được những kết quả tích cực, vẫn còn tồn tại một số hạn chế cần được cải thiện trong tương lai:
1. Giới hạn về quy mô ứng dụng:

  • Hệ thống Microservices mẫu chỉ tập trung vào các chức năng cơ bản (quản lý sản phẩm, đơn hàng, tồn kho) và chưa được kiểm thử với quy mô lớn (ví dụ: hàng nghìn request đồng thời).
  • Các bài kiểm thử hiệu năng (load test) chưa được thực hiện đầy đủ để đánh giá khả năng mở rộng ngang (scalability) trong điều kiện thực tế.
  • Tích hợp DevSecOps chưa toàn diện:
  • Mặc dù đã tích hợp SonarQube và Trivy, các công cụ như OWASP ZAP (kiểm thử bảo mật ứng dụng) hoặc Falco (giám sát bảo mật runtime trên Kubernetes) chưa được áp dụng.
  • Quy trình xử lý lỗ hổng bảo mật (ví dụ: tự động rollback nếu phát hiện CVE nghiêm trọng) vẫn cần can thiệp thủ công.
    3. Phụ thuộc vào nền tảng AWS:
  • Giải pháp được thiết kế chủ yếu cho AWS EKS, chưa tối ưu cho các nền tảng đám mây khác (ví dụ: Google GKE, Azure AKS) hoặc môi trường hybrid (kết hợp on-premise và cloud).
  • Một số dịch vụ AWS (như ALB Ingress Controller) có thể gây khó khăn khi di chuyển sang CSP khác.
    4. Thiếu cơ chế auto-scaling thông minh:
  • Hệ thống chưa tích hợp Kubernetes Horizontal Pod Autoscaler (HPA) dựa trên custom metrics (ví dụ: số lượng đơn hàng/giây) mà mới chỉ dựa trên CPU/memory.
  • Chưa áp dụng Cluster Autoscaler để tự động mở rộng node khi tải tăng đột biến.
  • Khả năng quản lý phiên bản (versioning): Các Microservices sử dụng cơ chế versioning đơn giản (Docker image tag), chưa áp dụng Semantic Versioning hoặc API Gateway versioning (ví dụ: /v1/orders, /v2/orders) để hỗ trợ backward compatibility.

Hướng phát triển

Mặc dù hệ thống CI/CD mẫu cho các ứng dụng web Java trên kiến trúc Microservices và quy trình MLOps tích hợp đã được xây dựng và triển khai thành công, vẫn còn nhiều tiềm năng để tiếp tục phát triển và cải thiện trong tương lai nhằm nâng cao hiệu quả, tính bảo mật, khả năng mở rộng và ứng dụng rộng rãi hơn.

Các hướng phát triển chính có thể bao gồm:

1. Mở rộng tích hợp công cụ và nền tảng

  • Hỗ trợ đa ngôn ngữ/framework: Mở rộng pipeline CI/CD để hỗ trợ các ngôn ngữ lập trình và framework khác ngoài Java (ví dụ: Python, Node.js, Go) và các mô hình học máy được xây dựng bằng các framework khác (TensorFlow, PyTorch).
  • Tích hợp thêm công cụ bảo mật chuyên sâu: Khám phá và tích hợp các công cụ quét bảo mật chuyên sâu hơn (ví dụ: SAST, DAST) vào pipeline để tăng cường phát hiện lỗ hổng sớm trong cả mã nguồn ứng dụng và mô hình AI.
  • Hỗ trợ đa môi trường Cloud: Triển khai và tối ưu hóa hệ thống trên các nền tảng đám mây khác ngoài AWS EKS (ví dụ: Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS)) để tăng cường tính linh hoạt và khả năng tương thích.

2. Nâng cao khả năng tự động hóa và thông minh hóa quy trình MLOps

  • Tối ưu hóa chiến lược tái huấn luyện: Phát triển các chiến lược tái huấn luyện mô hình thông minh hơn, dựa trên hiệu suất mô hình thực tế, sự thay đổi dữ liệu (data drift) hoặc các tín hiệu kinh doanh cụ thể, thay vì chỉ tái huấn luyện định kỳ.
  • Tích hợp A/B Testing và Canary Deployment cho mô hình AI: Triển khai các kỹ thuật A/B Testing hoặc Canary Deployment ở cấp độ mô hình, cho phép thử nghiệm các phiên bản mô hình mới với một phần nhỏ người dùng trước khi triển khai rộng rãi, giảm thiểu rủi ro và đánh giá hiệu quả tốt hơn.
  • Xây dựng Model Registry tiên tiến: Tích hợp một hệ thống quản lý mô hình (Model Registry) mạnh mẽ hơn (ví dụ: MLflow, Seldon Core) để quản lý phiên bản, siêu dữ liệu, lịch sử huấn luyện và các chỉ số của mô hình một cách tập trung.

3. Cải thiện khả năng giám sát và quản lý

  • Giám sát toàn diện hơn: Mở rộng phạm vi giám sát không chỉ các metrics kỹ thuật mà còn cả các metrics liên quan đến chất lượng dữ liệu đầu vào, độ lệch dữ liệu (data drift), độ suy giảm hiệu suất mô hình (model decay) và các chỉ số kinh doanh liên quan đến hiệu quả của mô hình AI.
  • Xây dựng bảng điều khiển (Dashboard) tùy chỉnh: Phát triển các bảng điều khiển chuyên biệt và dễ hiểu hơn cho người quản lý và kỹ sư, cung cấp cái nhìn tổng quan về tình trạng pipeline, hiệu suất ứng dụng và chất lượng mô hình AI.
  • Tích hợp thông báo cảnh báo thông minh: Xây dựng hệ thống cảnh báo tự động thông minh hơn dựa trên các ngưỡng biến đổi của dữ liệu hoặc hiệu suất mô hình, giúp phát hiện và phản ứng nhanh chóng với các sự cố.

4. Tăng cường bảo mật trong toàn bộ quy trình

  • Quản lý bí mật (Secrets Management): Tích hợp các giải pháp quản lý bí mật chuyên nghiệp (ví dụ: HashiCorp Vault, AWS Secrets Manager) để quản lý an toàn các thông tin nhạy cảm (API keys, credentials) trong pipeline và môi trường triển khai.
  • Quét lỗ hổng container image nâng cao: Ngoài Trivy, có thể tích hợp thêm các công cụ quét chuyên sâu hơn hoặc tùy chỉnh quy tắc quét để phát hiện các lỗ hổng bảo mật cụ thể trong các hình ảnh Docker.
  • Thực thi các chính sách bảo mật (Policy Enforcement): Áp dụng các công cụ như Open Policy Agent (OPA) để thực thi các chính sách bảo mật và tuân thủ quy định trên Kubernetes và trong suốt quy trình CI/CD.