Bối cảnh và vấn đề nghiên cứu

Trong tiến trình phát triển của ngành công nghệ thông tin tại Việt Nam, nhu cầu nâng cao năng lực chuyên môn và đồng bộ hóa trình độ giữa các lập trình viên trở thành một yêu cầu cấp thiết. Một rào cản thực tiễn được tác giả chỉ ra là mặt bằng kiến thức của các kỹ sư phần mềm còn hạn chế, thiếu đồng đều; đồng thời, các kinh nghiệm quý báu tích lũy từ những lập trình viên đi trước chưa có kênh chia sẻ và truyền đạt rộng rãi trong cộng đồng.

Xuất phát từ thực trạng đó, đồ án tập trung giải quyết bài toán chia sẻ tri thức chuyên ngành thông qua việc xây dựng một hệ thống website hỏi đáp dành riêng cho lập trình viên. Hệ thống được thiết kế nhằm khuyến khích người dùng chủ động đưa ra các khó khăn kỹ thuật phát sinh trong quá trình làm việc và tiếp nhận sự hỗ trợ, giải đáp từ những đồng nghiệp có chuyên môn cao hơn.

Mục tiêu và nhiệm vụ nghiên cứu của đồ án được xác định cụ thể như sau:

  1. Nghiên cứu tổng quan và tiếp cận các công nghệ phần mềm hiện đại đang là xu thế phát triển, bao gồm kiến trúc vi dịch vụ (Microservices), các framework lập trình hiện đại và giải pháp đám mây.
  2. Thực hiện phân tích yêu cầu hệ thống, mô hình hóa các tác nhân, ca sử dụng và luồng tương tác của người dùng.
  3. Thiết kế kiến trúc hạ tầng phân tán, sơ đồ lớp và cơ sở dữ liệu quan hệ cho toàn bộ hệ sinh thái dịch vụ.
  4. Cài đặt, triển khai thử nghiệm hệ thống website hỏi đáp và thiết lập hạ tầng giám sát vận hành tự động.

Đối tượng nghiên cứu của đề tài là quy trình xây dựng hệ thống phần mềm web tương tác hỗ trợ hỏi đáp kỹ thuật và các công nghệ triển khai đám mây (Cloud-Native). Phạm vi nghiên cứu về mặt nghiệp vụ bao gồm các chức năng tương tác xã hội chuyên biệt cho lập trình viên (soạn thảo mã nguồn, tương tác bài viết, quản lý hồ sơ kỹ năng); về mặt công nghệ, đồ án giới hạn nghiên cứu trong hệ sinh thái Java Spring Boot, ReactJS, MySQL, dịch vụ điện toán đám mây AWS, công nghệ container Docker và giải pháp điều phối Kubernetes. Đồ án được thực hiện tại Khoa Công nghệ Thông tin, Học viện Công nghệ Bưu chính Viễn thông vào tháng 12 năm 2021.

Cơ sở lý thuyết và phương pháp

Khung kiến trúc lý thuyết nền tảng của đồ án dựa trên mô hình kiến trúc Microservices (kiến trúc vi dịch vụ). Hệ thống được phân rã thành tập hợp các dịch vụ nhỏ gọn, vận hành độc lập và giao tiếp thông qua giao diện lập trình ứng dụng (API). Ba nguyên tắc thiết kế cốt lõi được tác giả áp dụng bao gồm:

  • Đơn mục đích (Single Purpose): Mỗi vi dịch vụ chỉ tập trung giải quyết một chức năng nghiệp vụ duy nhất.
  • Liên kết lỏng lẻo (Loose Coupling): Các dịch vụ hạn chế sự hiểu biết về cấu trúc bên trong của nhau; thay đổi tại một dịch vụ không làm ảnh hưởng đến các dịch vụ còn lại.
  • Độ gắn kết cao (High Cohesion): Toàn bộ logic nghiệp vụ và dữ liệu liên quan được đóng gói trọn vẹn trong phạm vi một dịch vụ.

Phương pháp nghiên cứu chính được sử dụng là phương pháp phân tích và thiết kế hệ thống hướng đối tượng (OOAD) kết hợp ngôn ngữ mô hình hóa thống nhất (UML), đi kèm phương pháp thiết kế cơ sở dữ liệu quan hệ và mô hình triển khai DevOps. Các kỹ thuật phân tích được triển khai cụ thể:

  • Phân rã chức năng và xây dựng kịch bản ca sử dụng chi tiết (Use Case Specifications).
  • Mô hình hóa luồng xử lý và tương tác hướng đối tượng bằng biểu đồ tuần tự (Sequence Diagram) và biểu đồ hoạt động (Activity Diagram).
  • Thiết kế dữ liệu theo chuẩn quan hệ RDBMS.

Nguồn dữ liệu và tài nguyên kỹ thuật sử dụng trong đồ án bao gồm: tài liệu kỹ thuật chuẩn của Spring Framework (Pivotal), thư viện ReactJS (Facebook), hệ quản trị cơ sở dữ liệu MySQL (Oracle), các tài liệu hướng dẫn dịch vụ đám mây AWS (S3, Lambda, CloudFront), nền tảng xác thực Firebase (Google) và hệ thống điều phối cụm Kubernetes.

Thiết kế và triển khai

Hệ thống được thiết kế theo mô hình hạ tầng phân tán hiện đại, tách biệt hoàn toàn giữa tầng giao diện, tầng logic nghiệp vụ, tầng dữ liệu và hạ tầng vận hành.

Thành phần hệ thống Công nghệ / Dịch vụ sử dụng Vai trò và đặc tính kỹ thuật
Giao diện (Frontend) ReactJS Xây dựng giao diện web dạng Single Page Application, chia nhỏ UI thành các component tái sử dụng, tối ưu tốc độ render bằng Virtual DOM.
Dịch vụ nền tảng (Backend) Spring Boot (Java) Triển khai các Microservices; xử lý 4 phân tầng: Presentation, Business, Persistence và Database Layer; nhúng sẵn máy chủ Tomcat, tự động cấu hình (Auto-configuration).
Cơ sở dữ liệu (Database) MySQL Lưu trữ dữ liệu có cấu trúc theo mô hình Client/Server, đảm bảo toàn vẹn dữ liệu quan hệ và hiệu năng truy vấn SQL.
Xác thực người dùng Firebase Authentication Quản lý đăng ký, đăng nhập và phân quyền thông qua Email/Mật khẩu hoặc OAuth bên thứ ba (Google, Facebook, Github, Twitter).
Lưu trữ tệp tin Amazon S3 (AWS) Lưu trữ hình ảnh và đính kèm; cơ chế lưu trữ khối phân tán, hỗ trợ tệp lên đến 5TB, cam kết độ sẵn dùng đạt 99.99999%, kiểm soát truy cập qua ACL và Bucket policies.
Tính toán không máy chủ AWS Lambda Chạy mã nguồn backend theo sự kiện mà không cần quản trị máy chủ vật lý, tự động mở rộng theo lưu lượng truy cập.
Mạng phân phối nội dung AWS CloudFront (CDN) Tăng tốc độ tải nội dung tĩnh và hình ảnh thông qua mạng lưới 180 máy chủ đặt tại 73 thành phố thuộc 33 quốc gia, hỗ trợ chống DDoS.
Đóng gói ứng dụng Docker Đóng gói toàn bộ mã nguồn và thư viện thành Container Image tiêu chuẩn, cô lập môi trường chạy.
Điều phối hạ tầng Kubernetes Quản lý vòng đời container tự động gồm Master Node (kube-api-server, etcd, kube-scheduler, kube-controller-manager) và Worker Nodes (kubelet, kube-proxy, container runtime).
Giám sát & Nhật ký Prometheus & Grafana Prometheus thu thập metrics hệ thống qua HTTP và lưu trữ time-series database (hỗ trợ PromQL); Grafana trực quan hóa bảng điều khiển giám sát tài nguyên và nhật ký.

Cơ sở dữ liệu của hệ thống được tổ chức thành 16 bảng quan hệ chính nhằm đáp ứng toàn bộ các nghiệp vụ hỏi đáp và mạng xã hội lập trình viên: Image, Post, Comment, Like, Category, Notification, Profile, Allowed-User, Blocked-User, Work_history, Skill, User_account, User_account_role, Role cùng các bảng liên kết thuộc tính khác.

Nội dung chính theo từng chương

Chương 1: Tìm hiểu một số công nghệ liên quan

Chương 1 cung cấp tổng quan cơ sở lý thuyết và công nghệ được lựa chọn để phát triển hệ thống. Tác giả phân tích chi tiết ưu điểm của kiến trúc Microservices so với Monolithic, chỉ rõ các thách thức về độ phức tạp mạng và tính nhất quán dữ liệu. Đồng thời, chương này giới thiệu chi tiết framework Spring Boot (lịch sử phát triển từ Spring của Rod Johnson năm 2003, cấu trúc 20 mô-đun, gói cơ bản 2MB), thư viện ReactJS, hệ quản trị MySQL và các công nghệ phụ trợ.

Một đóng góp quan trọng trong chương là phần phân tích so sánh kỹ thuật giữa Máy ảo truyền thống (Virtual Machines) và Container:

Tiêu chí so sánh Máy ảo truyền thống (Virtual Machine) Container (Docker)
Cơ chế ảo hóa Ảo hóa phần cứng thông qua Hypervisor Ảo hóa cấp hệ điều hành (chia sẻ kernel máy chủ)
Kích thước gói Nặng (bao gồm toàn bộ hệ điều hành khách) Nhẹ (chỉ chứa ứng dụng và thư viện phụ thuộc)
Thời gian khởi động Từ 3 đến 4 phút Tính bằng mili giây
Mức tiêu thụ bộ nhớ Yêu cầu dung lượng bộ nhớ lớn Tiêu thụ ít tài nguyên bộ nhớ
Hiệu năng Bị giới hạn bởi phân bổ phần cứng ảo hóa Đạt hiệu năng trực tiếp tương đương phần cứng thật
Mức độ cô lập Cô lập hoàn toàn, tính bảo mật cao Cô lập mức tiến trình, mức an toàn thấp hơn máy ảo

Chương 2: Phân tích hệ thống

Chương 2 thực hiện phân tích chức năng toàn diện cho hệ thống website hỏi đáp. Tác giả xác định 9 nhóm ca sử dụng chính phục vụ người dùng:

  • Đăng nhập: Hỗ trợ xác thực bằng tài khoản hệ thống hoặc thông qua Google, Facebook, Github.
  • Đăng ký: Cho phép khởi tạo tài khoản mới bằng Email và mật khẩu.
  • Đăng bài viết: Soạn thảo nội dung có định dạng, chèn mã nguồn, đính kèm hình ảnh, gắn hashtag, liên kết, lựa chọn chủ đề, cảm xúc và phạm vi riêng tư (Công khai / Chỉ mình tôi).
  • Tìm kiếm bài viết: Truy vấn bài đăng theo từ khóa nội dung, chủ đề chuyên môn hoặc hashtag.
  • Quản lý bài viết: Hiển thị danh sách bài đã đăng, hỗ trợ chỉnh sửa và xóa bài viết cá nhân.
  • Quản lý thông tin cá nhân: Cập nhật hồ sơ nghề nghiệp (kỹ năng, lịch sử làm việc, bằng cấp, địa chỉ, số điện thoại).
  • Viết bình luận: Trao đổi, giải đáp kỹ thuật dưới từng bài viết công khai.
  • Thể hiện cảm xúc: Ghi nhận tương tác thích (like) trên bài viết.
  • Thông báo sự kiện: Tự động gửi thông báo đến chủ bài viết khi có người dùng khác tương tác hoặc bình luận.

Chương này chi tiết hóa toàn bộ các kịch bản sử dụng qua 16 bảng đặc tả (từ Bảng 1 đến Bảng 16), đồng thời xây dựng biểu đồ phân rã ca sử dụng, sơ đồ lớp phân tích và hệ thống 18 biểu đồ tuần tự cùng biểu đồ hoạt động thể hiện chi tiết luồng dữ liệu của từng nghiệp vụ.

Chương 3: Thiết kế hệ thống

Chương 3 chuyển đổi các kết quả phân tích thành thiết kế kỹ thuật cụ thể. Nội dung bao gồm:

  • Thiết kế kiến trúc hạ tầng: Mô hình hóa luồng phân phối tải từ người dùng qua API Gateway, điều hướng đến các vi dịch vụ phân tán, các cụm cơ sở dữ liệu và hạ tầng lưu trữ đám mây.
  • Sơ đồ lớp thiết kế: Đặc tả chi tiết các phương thức, thuộc tính và mối quan hệ kết tập, kế thừa giữa các đối tượng trong mã nguồn backend.
  • Lược đồ và mô tả bảng dữ liệu: Trình bày chi tiết cấu trúc trường, kiểu dữ liệu, khóa chính, khóa ngoại của 16 bảng cơ sở dữ liệu (từ Bảng 17 đến Bảng 33), định nghĩa chặt chẽ mối liên kết giữa tài khoản, hồ sơ lập trình viên, bài đăng và các tương tác dữ liệu.

Chương 4: Cài đặt hệ thống

Chương 4 trình bày kết quả cài đặt và đóng gói mã nguồn thực tế của hệ thống. Tác giả minh họa giao diện hoạt động thực tế qua các ảnh chụp màn hình chức năng: giao diện đăng nhập, trang tin tức tổng hợp, màn hình soạn thảo bài viết kỹ thuật, giao diện trang hồ sơ cá nhân và màn hình cập nhật thông tin nghề nghiệp. Ngoài ra, chương này chứng minh tính khả thi của hệ thống vận hành thông qua các hình ảnh trực quan hóa chỉ số tài nguyên trên Grafana và hệ thống truy xuất nhật ký hoạt động (logging).

Kết quả và đóng góp

Đồ án đã đạt được các kết quả kỹ thuật và đóng góp cụ thể sau:

  • Xây dựng hoàn chỉnh hệ thống website hỏi đáp: Cài đặt thành công ứng dụng web với đầy đủ các phân hệ chức năng chuyên biệt cho cộng đồng lập trình viên, cho phép đăng bài chứa mã nguồn, bình luận giải đáp kỹ thuật, tìm kiếm theo chủ đề công nghệ và quản lý hồ sơ chuyên môn.
  • Ứng dụng thành công kiến trúc phần mềm hiện đại: Triển khai mô hình Microservices trên nền Spring Boot kết hợp ReactJS, giải quyết bài toán phân tách nghiệp vụ và tối ưu hóa khả năng mở rộng hệ thống.
  • Thiết lập hạ tầng đám mây và tự động hóa vận hành: Tích hợp đồng bộ các dịch vụ AWS S3 (lưu trữ khối phân tán), AWS CloudFront (CDN phân phối dữ liệu tĩnh qua 180 máy chủ biên), AWS Lambda, cùng giải pháp đóng gói Docker và điều phối cụm tự động Kubernetes.
  • Xây dựng hệ thống giám sát thời gian thực: Ứng dụng thành công Prometheus và Grafana để thu thập chỉ số hệ thống và cung cấp công cụ trực quan hóa trạng thái tài nguyên máy chủ.

Hạn chế và hướng nghiên cứu tiếp

Dựa trên phạm vi và nội dung được công bố trong tài liệu đồ án, một số hạn chế và định hướng phát triển được xác định:

  • Hạn chế: Đồ án tập trung chủ yếu vào việc xây dựng bộ khung kiến trúc Microservices, thiết kế CSDL và tích hợp hạ tầng vận hành Cloud-Native cơ bản; các thuật toán gợi ý bài viết thông minh, cơ chế xếp hạng câu trả lời tối ưu hoặc kiểm thử chịu tải quy mô lớn chưa được trình bày chi tiết trong văn bản.
  • Hướng nghiên cứu tiếp: Mở rộng và phát triển thêm các vi dịch vụ chức năng mới, tối ưu hóa chính sách tự động co giãn tài nguyên trên cụm Kubernetes khi lưu lượng tăng đột biến, và hoàn thiện cơ chế đánh giá độ tin cậy của câu trả lời dựa trên điểm uy tín của lập trình viên.

Giá trị tham khảo

Tài liệu đồ án mang lại giá trị tham khảo hữu ích cho các nhóm đối tượng:

  • Sinh viên ngành Công nghệ thông tin và Kỹ thuật phần mềm: Là tài liệu tham khảo thực tiễn về cấu trúc một đồ án tốt nghiệp kỹ thuật, từ khâu khảo sát công nghệ, phân tích ca sử dụng UML đến thiết kế cơ sở dữ liệu quan hệ và kiến trúc phân tầng.
  • Lập trình viên và kỹ sư phát triển hệ thống: Cung cấp tài liệu tổng hợp rõ ràng về các nguyên tắc xây dựng vi dịch vụ (Microservices), quy trình đóng gói ứng dụng bằng Docker, cấu trúc phân phối mạng CDN qua AWS CloudFront và kiến trúc điều phối cụm của Kubernetes.
  • Phần đáng tham khảo nhất: Hệ thống 16 bảng kịch bản ca sử dụng chi tiết (Chương 2) và thiết kế chi tiết 16 bảng cơ sở dữ liệu quan hệ (Chương 3).

Câu hỏi thường gặp

1. Đồ án áp dụng những nguyên tắc thiết kế nào cho kiến trúc Microservices?
Tác giả áp dụng 3 nguyên tắc thiết kế cốt lõi: Single purpose (mỗi dịch vụ chỉ đảm nhiệm một mục đích duy nhất), Loose coupling (các dịch vụ giảm thiểu phụ thuộc lẫn nhau, giao tiếp qua API) và High cohesion (toàn bộ nghiệp vụ và dữ liệu liên quan được đóng gói trọn vẹn trong một dịch vụ).

2. Hệ thống hỗ trợ những hình thức xác thực người dùng nào?
Người dùng có thể đăng ký và đăng nhập hệ thống bằng tài khoản Email/Mật khẩu cá nhân hoặc thông qua dịch vụ xác thực bên thứ ba gồm Google, Facebook, Github và Twitter được quản lý qua nền tảng Firebase Authentication.

3. AWS S3 và AWS CloudFront được sử dụng với thông số và mục đích gì trong đồ án?
AWS S3 được sử dụng làm kho lưu trữ tệp tin/hình ảnh phân tán với độ sẵn dùng 99.99999% và giới hạn 5TB cho mỗi tệp tin. AWS CloudFront hoạt động như một mạng phân phối nội dung (CDN) với 180 máy chủ đặt tại 73 thành phố thuộc 33 quốc gia, giúp tăng tốc độ tải ảnh tĩnh, giảm độ trễ và hỗ trợ ngăn chặn tấn công từ chối dịch vụ (DDoS).

4. Cụm máy chủ Kubernetes trong hệ thống bao gồm những thành phần quản trị nào?
Cụm Kubernetes được chia thành hai phần: Bộ điều khiển trung tâm (Master Node) gồm kube-api-server, etcd, kube-scheduler, kube-controller-manager, cloud-controller-manager; và các máy chủ chạy ứng dụng (Worker Nodes) gồm kubelet, kube-proxy và container runtime.

5. Cơ sở dữ liệu của hệ thống lưu trữ những thông tin nào của bài viết?
Dữ liệu bài viết được lưu trữ trong bảng Post cùng các bảng liên kết, hỗ trợ lưu trữ nội dung văn bản, đường dẫn hình ảnh (Image), danh mục công nghệ (Category), cảm xúc, hashtag, phạm vi hiển thị (công khai hoặc chỉ mình tôi), danh sách bình luận (Comment) và lượt thích (Like).

Kết luận

Đồ án tốt nghiệp của sinh viên Nguyễn Thanh Sáng đã hoàn thành việc nghiên cứu, thiết kế và xây dựng thành công hệ thống website hỗ trợ hỏi đáp và chia sẻ kinh nghiệm dành cho lập trình viên. Công trình thể hiện sự kết hợp chặt chẽ giữa quy trình kỹ thuật phần mềm chuẩn mực (phân tích thiết kế hệ thống hướng đối tượng) với các công nghệ hiện đại như Spring Boot, ReactJS, MySQL, Docker, Kubernetes và hệ sinh thái điện toán đám mây AWS. Đây là tài liệu tham khảo kỹ thuật hoàn chỉnh về cả phương diện nghiệp vụ lẫn kiến trúc triển khai hệ thống phân tán.