Tổng quan
Trong kỷ nguyên số hiện nay, nhu cầu giao tiếp trực tuyến và cộng tác từ xa ngày càng trở nên thiết yếu. Các ứng dụng chat thời gian thực đã trở thành một phần không thể thiếu trong đời sống cá nhân cũng như hoạt động doanh nghiệp. Tuy nhiên, việc xây dựng và vận hành các ứng dụng chat truyền thống theo kiến trúc monolithic thường gặp nhiều thách thức về khả năng mở rộng, bảo trì, và tốc độ phát triển khi quy mô người dùng và tính năng tăng lên. Kiến trúc microservices nổi lên như một giải pháp hiệu quả, cho phép chia nhỏ ứng dụng thành các dịch vụ độc lập, dễ quản lý và phát triển song song. Điều này không chỉ giúp cải thiện khả năng mở rộng mà còn tăng cường tính linh hoạt và khả năng phục hồi của hệ thống. [3] [4] Song song với đó, xu hướng DevSecOps được áp dụng để tích hợp bảo mật ngay từ đầu. DevSecOps là thực hành tích hợp kiểm thử bảo mật vào mọi giai đoạn phát triển phần mềm, khuyến khích hợp tác chặt chẽ giữa nhóm phát triển, bảo mật và vận hành. Mục tiêu là xây dựng quy trình CI/CD liên tục, tự động hóa các bước kiểm thử và đánh giá an toàn, từ đó nâng cao chất lượng và bảo mật tổng thể của ứng dụng.
Đồ án này trình bày quy trình thiết kế, triển khai và vận hành một ứng dụng chat web theo kiến trúc microservices trên nền tảng điện toán đám mây AWS (Amazon Web Services), đồng thời tích hợp quy trình DevSecOps nhằm đảm bảo an toàn thông tin xuyên suốt vòng đời phát triển phần mềm.
Đối tượng nghiên cứu
Đồ án tập trung nghiên cứu các nội dung dưới đây:
- Kiến trúc microservices: Tìm hiểu và xây dựng ứng dụng chat web theo kiến trúc microservices.
- Công nghệ container: Sử dụng các công cụ như Docker và Kubernetes để triển khai ứng dụng một cách nhanh chóng và hiệu quả.
- Các kỹ thuật, và công cụ hỗ trợ Devsecops: Xây dựng quy trình tự động hoá qua các công cụ CI/CD như Jenkins, ArgoCD và đồng thời tích hợp quy trình bảo mật thông qua các công cụ như SonarQube, Trivy,. . .
- Điện toán đám mây: Sử dụng môi trường AWS để chạy và triển khai ứng dụng.
Phạm vi nghiên cứu
Để đảm bảo tính khả thi và hiệu quả, đồ án giới hạn phạm vi nghiên cứu như sau:
- Tập trung vào việc triển khai một ứng dụng mẫu có quy mô vừa phải, bao gồm 5 microservices chính với các chức năng đại diện cho các patterns phổ biến.
- Sử dụng các dịch vụ AWS làm nền tảng chính cho việc triển khai.
- Ưu tiên các công nghệ và công cụ mã nguồn mở, dễ tiếp cận và có cộng đồng hỗ trợ lớn.
- Tập trung vào các khía cạnh kỹ thuật của việc triển khai, không đi sâu vào các vấn đề quản lý dự án, chi phí chi tiết hay các khía cạnh pháp lý
Phương pháp nghiên cứu
Nghiên cứu áp dụng phương pháp tiếp cận thực nghiệm kết hợp phân tích tài liệu thứ cấp.
Cụ thể, nhóm thực hiện các bước:
- Nghiên cứu cơ sở lý thuyết: Tìm hiểu sâu về microservices, Docker, Kubernetes, quy trình DevSecOps và dịch vụ AWS.
- Thiết kế kiến trúc hệ thống: Xây dựng sơ đồ use-case, database schema cho từng microservice (MySQL, MongoDB) và thiết kế kiến trúc đám mây (VPC cho môi trường Dev và Prod).
- Xây dựng và triển khai: Phát triển frontend (ReactJS), backend (Spring Boot); triển khai hạ tầng bằng Terraform; xây dựng CI/CD pipeline với Jenkins và ArgoCD; tích hợp kiểm tra bảo mật (SonarQube, Trivy); triển khai Blue/Green deployment bằng Argo Rollouts.
- Kiểm thử và đánh giá: Sử dụng K6 để kiểm thử hiệu năng, đo lường thời gian phản hồi, thông lượng.
- Phân tích kết quả và hướng phát triển: Đánh giá kết quả, rút ra hạn chế và đề xuất hướng phát triển.
Nghiên cứu ưu tiên sử dụng các công cụ và công nghệ mã nguồn mở nhằm đảm bảo tính khả thi, dễ áp dụng và có cộng đồng hỗ trợ lớn.
Kiến trúc hệ thống
Kiến trúc ứng dụng Web

Amazon Cognito:
- Cung cấp API cho các tính năng đăng ký, cung cấp access/refresh token, và quản lý thông tin mật (email, password) của người dùng trong ứng dụng.
- Đóng vai trò OAuth 2.0 server: xác thực access token từ request tới các service khác trong ứng dụng.
Amazon S3:
- Lưu trữ các ảnh avatar của người dùng và group chat, các tệp đa phương tiện của tin nhắn dạng file.
RabbitMQ:
- Giúp các service khác đẩy các thông báo và tin nhắn đến Websocket Service.
- Định tuyến và phân phối các message của các group chat đến đúng các Websocket instance mà có client trong group tạo kết nối đến, giúp tối ưu hóa truyền tải dữ liệu và tiết kiệm băng thông.
Các application services:
- Frontend service: được viết bằng ReactJS và deploy trên Nginx container, có vai trò cung cấp UI của trang web lên trình duyệt người dùng.
- WebSocket service: gửi các tin nhắn mới và thông báo đến trình duyệt người dùng bằng giao thức Websocket (một giao thức full-duplex cho ứng dụng web). Service này có thể scale ra nhiều server theo chiều ngang.
- User service: quản lý thông tin người dùng và danh sách các bạn bè của người dùng, không bao gồm các tính năng xác thực.
- Team service: quản lý thông tin các group chat và các channel trong mỗi group chat.
- Chat service: quản lý các tin nhắn.
- Meeting service: quản lý các cuộc họp trong các VideoCall channel. Phần tính năng video call do quá phức tạp nên dùng nhóm dùng API bên thứ ba là Zegocloud.

Nhóm Authentication Service:
- Sign In: Đăng nhập vào hệ thống.
- Sign Up: Đăng ký tài khoản mới.
- Forgot Password: Khôi phục mật khẩu khi quên.
Nhóm User Profile Service: - View profile: Xem thông tin hồ sơ.
- Update profile: Cập nhật thông tin cá nhân.
Nhóm Friends Services: - Friend Request (Yêu cầu kết bạn): Send friend request (Gửi lời mời), View and accept friend requests (Xem và chấp nhận lời mời).
- Friends (Danh sách bạn bè): Khi đã là bạn, user có thể dùng Friend Chat (chat 1:1), Send text message (Gửi tin nhắn văn bản), Send file/video/image (Gửi file, hình ảnh, video), View chat history (Xem lịch sử trò chuyện).
Nhóm Teams Services: - Friend Request cho team (Yêu cầu tham gia team): Send joined team request (Gửi yêu cầu tham gia team), View and accept team requests (Xem chấp nhận lời mời tham gia team).
- Teams (Quản lý nhóm): Chat Channel (chat nhóm, n-n) bao gồm Send text message, Send file/video/image message, View chat history, Send Voting (Tạo/bình chọn). Voice Channel (kênh thoại/họp) bao gồm Create meeting and schedule time (Tạo lịch họp), Meeting video call (Thực hiện gọi video), View meeting calendar (Xem lịch họp sắp tới).
Kiến trúc hệ thống Cloud


Mô hình CI/CD pipeline


Kết luận và hướng phát triển
Kết quả đạt được
Đề tài đã đạt được một số kết quả sau:
- Triển khai hạ tầng tự động hóa với Terraform:
– Hạ tầng Kubernetes trên AWS EKS được triển khai tự động, bao gồm các thành phần như cluster, node groups, và các tài nguyên liên quan (VPC, IAM, Security Groups).
– Tích hợp các công cụ mã nguồn mở như ArgoCD, Vault, RabbitMQ, Jenkins, và Ingress NGINX thông qua Helm charts, đảm bảo tính nhất quán và dễ dàng quản lý. - Áp dụng GitOps với ArgoCD:
– ArgoCD được sử dụng để quản lý toàn bộ vòng đời ứng dụng và các công cụ mã nguồn mở.
– Cấu hình “App of Apps” giúp tổ chức và triển khai các ứng dụng một cách linh hoạt dễ dàng mở rộng và quản lý. - Quản lý secrets an toàn với Vault:
– Vault được triển khai để lưu trữ và quản lý các thông tin nhạy cảm như mật khẩu, khóa API, và thông tin kết nối cơ sở dữ liệu.
– Tích hợp Vault với Kubernetes để tự động inject secrets vào các ứng dụng, giảm thiểu rủi ro bảo mật. - Giám sát và logging với CloudWatch:
– CloudWatch Agent được cài đặt để thu thập và giám sát các chỉ số hiệu năng của cluster và ứng dụng.
– Logs từ các ứng dụng và cluster được gửi về CloudWatch, hỗ trợ việc theo dõi và xử lý sự cố.
- Triển khai ứng dụng microservices thành công:
– Các ứng dụng như chat-service, frontend-service, meeting-service, team-service, user-service, và websocket-service đã được triển khai thành công và đồng bộ với ArgoCD.
– Hệ thống hoạt động ổn định với các pods trong trạng thái Running.
- Tích hợp CI/CD:
– Jenkins được triển khai để hỗ trợ quy trình CI/CD, giúp tự động hóa việc build và deploy ứng dụng.
Một số hạn chế của đề tài
Với thời gian, chi phí và nhân lực có hạn nên nhóm không thể tránh khỏi những thiếu sót trong quá trình triển khai như:
- Do vấn đề chi phí trên AWS, nên hệ thống chỉ được deploy trong thời gian ngắn. Do đó chưa thể đánh giá hiệu năng của ứng dụng một cách thực tế.
- Mặc dù CloudWatch đã được tích hợp, nhưng việc giám sát chi tiết (như tracing hoặc metrics nâng cao) chưa được triển khai đầy đủ.
- Một số cấu hình, tài nguyên vẫn chưa được tối ưu hoá.
- Hệ thống chỉ mới có môi trường Development và Production, chưa có môi trường Staging.
- Dùng chung EKS cluster để chạy các tools CICD (jenkins, argocd) và ứng dụng, có thể tiềm ẩn rủi ro về bảo mật và hiệu suất.
Hướng phát triển
- Có thêm những kịch bản cải thiện và đánh giá hiệu năng của ứng dụng một cách hiệu quả.
- Triển khai distributed tracing để theo dõi các yêu cầu qua nhiều microservices, giúp dễ dàng debug và phát hiện các bottleneck trong hệ thống.
- Tối ưu hoá cấu hình trên Terraform và Jenkins.
- Thêm môi trường Staging để kiểm thử trước khi triển khai lên Production.
- Tích hợp thêm một số tính năng liên quan tới ML/AI. Ví dụ: áp dụng mô hình GNN vào distributed tracing để tự động phát hiện và phân tích các bottleneck trong hệ thống microservice; tích hợp chatbot hỗ trợ thông minh ; và ứng dụng machine learning vào cơ chế auto-scaling dựa trên các metrics và traces thu thập từ hệ thống.


