Bối cảnh và vấn đề nghiên cứu
Đề tài khóa luận tốt nghiệp kỹ sư Công nghệ thông tin "Tìm hiểu Spring, Microservices và xây dựng hệ thống website tin tức trực tuyến" (tên trên bìa: "Xây dựng hệ thống website tin tức trực tuyến") được thực hiện bởi sinh viên Nguyễn Hoàng Long (MSSV: 15110242) và Bùi Xuân Trí (MSSV: 15110338), dưới sự hướng dẫn của ThS. Nguyễn Minh Đạo tại Bộ môn Công nghệ Phần mềm, Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật Thành phố Hồ Chí Minh (khóa học 2015 – 2019, bảo vệ tháng 8/2019).
Bối cảnh thực tiễn được nhóm tác giả đặt ra xuất phát từ sự suy giảm mạnh mẽ của báo in truyền thống trước sự phát triển của báo điện tử trên phạm vi toàn cầu và tại Việt Nam:
- Trên thế giới, sự khủng hoảng số lượng phát hành đã ảnh hưởng đến các nhật báo lớn tại Hoa Kỳ như New York Times, Washington Post, Los Angeles Times, và tạp chí 80 năm tuổi Newsweek phải đình bản in để chuyển sang trực tuyến. Theo số liệu từ Hiệp hội Báo in Hoa Kỳ (NNA) năm 2005, lượng người đọc báo qua mạng vượt trội so với báo in gấp từ 2 đến 6 lần (tiêu biểu như New York Times đạt 12,8 triệu lượt đọc trực tuyến so với 5 triệu bản in; Washington Post đạt 7,8 triệu). Tại Pháp, tờ Le Monde đã vận hành ấn bản điện tử từ những năm 1990; tại Tây Ban Nha, tờ nhật báo El Pais năm 2012 phải cắt giảm 129 nhân sự khi lượng phát hành giảm từ 1 triệu bản/ngày (giai đoạn 2002) xuống 455.666 bản/ngày, kéo theo doanh thu giảm từ 453 triệu euro (năm 2005) xuống 194 triệu euro. Sự kiện Giải thưởng Báo chí Pulitzer năm 2012 vinh danh báo điện tử ở hai hạng mục lớn (phóng viên David Wood của The Huffington Post ở hạng mục tin bài trong nước và họa sĩ Matt Wuerker của Politico ở thể loại tranh biếm họa) phản ánh sự dịch chuyển sang loại hình báo chí hiện đại.
- Tại Việt Nam, hệ thống báo điện tử phát triển với thống kê ghi nhận cả nước có 77 tờ báo điện tử và gần 200 trang tin điện tử. Báo in chịu cạnh tranh gay gắt, nhiều cơ quan phải tinh giản biên chế và thu hẹp lượng phát hành do nguồn thu quảng cáo sụt giảm.
Từ thực tiễn đó, nhóm tác giả xác định mục tiêu và các nhiệm vụ nghiên cứu:
- Về lý thuyết và công nghệ: Tìm hiểu nguyên lý hoạt động của kiến trúc Microservices, khung làm việc Angular, giao diện lập trình ứng dụng RESTful APIs, Spring Boot, Spring Data, Spring Security, Hibernate và hệ quản trị cơ sở dữ liệu PostgreSQL.
- Về phân tích, thiết kế và xây dựng phần mềm: Xây dựng hoàn chỉnh hệ thống website tin tức trực tuyến đáp ứng hai nhóm chức năng nghiệp vụ:
- Nhóm chức năng quản trị hệ thống: Quản lý danh mục tin tức (tìm kiếm, thống kê, thêm mới, cập nhật); quản lý tin tức (tìm kiếm, thêm mới, thống kê, kiểm duyệt, cập nhật, gỡ tin); quản lý tài khoản người dùng; quản lý quyền hạn; quản lý cấu hình lấy tin tự động (Crawling RSS từ URL của các trang báo khác).
- Nhóm chức năng dành cho người dùng: Xem tin tức phân loại theo danh mục; xem chi tiết bài viết và tương tác (thích, bỏ thích); quản lý tài khoản cá nhân (đăng nhập, đăng ký, chỉnh sửa thông tin).
Đối tượng và phạm vi nghiên cứu của đề tài gồm:
- Đối tượng nghiên cứu: Người dùng có khả năng đọc hiểu tiếng Việt, có nhu cầu tiếp nhận, tra cứu tin tức trực tuyến và cập nhật thông tin thường xuyên.
- Phạm vi nghiên cứu: Nghiên cứu lý thuyết và ứng dụng thực nghiệm các công nghệ phần mềm chuyên biệt gồm Spring Boot, Spring Security, Hibernate, PostgreSQL, Angular 5, kiến trúc Microservices, RESTful APIs; khảo sát thiết kế trải nghiệm người dùng (UI/UX); thực hiện trong khung kế hoạch 15 tuần (từ ngày 18/03/2019 đến ngày 30/06/2019).
Cơ sở lý thuyết và phương pháp
Khóa luận thuộc loại hình nghiên cứu ứng dụng kỹ thuật và xây dựng phần mềm. Nhóm tác giả tổng hợp cơ sở lý thuyết dựa trên các tài liệu công nghệ chính thống và phân tích mô hình hóa hệ thống.
Khung lý thuyết và công nghệ sử dụng
Cơ sở kỹ thuật của hệ thống được xây dựng trên các nền tảng sau:
| Công nghệ / Nền tảng |
Bản chất kiến trúc |
Vai trò trong hệ thống |
| Spring Framework & Spring Boot |
Framework mã nguồn mở trên Java ra đời năm 2002 (Rod Johnson), khắc phục sự cồng kềnh của EJB; hoạt động dựa trên nguyên lý Dependency Injection (DI) và Aspect Oriented Programming (AOP), dùng POJO. Spring Boot nằm ở tầng IO Execution của Spring IO, hỗ trợ nhúng máy chủ Tomcat/Jetty và nguyên tắc cấu hình mặc định. |
Đóng vai trò nền tảng xử lý logic nghiệp vụ phía máy chủ (Backend), tạo các dịch vụ độc lập cấu hình rút gọn, giảm mã nguyên mẫu (boilerplate code). |
| Hibernate |
Khung làm việc ORM (Object Relational Mapping) cho tầng lưu trữ (persistence layer). |
Ánh xạ các bảng trong cơ sở dữ liệu quan hệ sang đối tượng Java Bean, quản lý kết nối và truy xuất dữ liệu. |
| Angular 5 |
Nền tảng phát triển ứng dụng giao diện (Frontend) do Google phát triển, viết bằng TypeScript, theo kiến trúc hướng dịch vụ (SOA). |
Xây dựng giao diện web tương tác một trang (SPA), gắn kết dữ liệu hai chiều (two-way databinding), chia tách theo NgModule, Component và Service. |
| Kiến trúc Microservices & API Gateway |
Mô hình chia nhỏ ứng dụng nguyên khối thành các dịch vụ độc lập, mỗi dịch vụ sở hữu cơ sở dữ liệu riêng biệt, giao tiếp qua giao thức mạng. |
API Gateway đóng vai trò máy chủ trung gian duy nhất (mẫu thiết kế Facade), tiếp nhận yêu cầu từ client, xử lý xác thực, định tuyến, cân bằng tải và tổng hợp kết quả từ các microservices. |
| PostgreSQL & Spring Security |
Hệ quản trị cơ sở dữ liệu quan hệ và module bảo mật xác thực/phân quyền người dùng. |
Lưu trữ dữ liệu hệ thống, bảo vệ tài nguyên ứng dụng và phân quyền truy cập theo vai trò. |
Phương pháp nghiên cứu
Nhóm tác giả kết hợp các phương pháp nghiên cứu kỹ thuật phần mềm:
- Phương pháp nghiên cứu tài liệu: Tổng hợp lý thuyết từ tài liệu kỹ thuật của Spring IO, Angular, kiến trúc hệ thống phân tán, các chuẩn tài liệu về RESTful API và kỹ thuật trích xuất dữ liệu qua RSS Feed.
- Phương pháp tham vấn chuyên gia: Tiếp thu hướng dẫn từ giảng viên hướng dẫn (ThS. Nguyễn Minh Đạo) và phản biện chuyên môn của giảng viên khoa Công nghệ Thông tin (ThS. Lê Vĩnh Thịnh).
- Phương pháp phân tích và mô hình hóa (UML): Sử dụng biểu đồ Use Case để nắm bắt yêu cầu tác nhân; biểu đồ tuần tự (Sequence Diagram) để mô tả luồng thông điệp giữa các lớp đối tượng; thiết kế cơ sở dữ liệu quan hệ với các ràng buộc toàn vẹn.
- Kế hoạch triển khai thực nghiệm: Tiến trình 15 tuần được phân định rõ ràng từ phân tích yêu cầu (tuần 1-2), thiết kế cơ sở dữ liệu và mô hình Microservices (tuần 3), xây dựng giao diện và phát triển API cho từng phân hệ (tuần 4-9), tích hợp Spring Security (tuần 10-11), phát triển module Crawling RSS (tuần 12-13), đến kiểm thử, sửa lỗi và hoàn tất báo cáo (tuần 14-15).
Thiết kế và triển khai
Hệ thống được thiết kế theo mô hình kiến trúc phân tán Microservices với các thành phần kỹ thuật chi tiết:
Kiến trúc tổng thể và cơ chế API Gateway
Trong hệ thống của nhóm tác giả, ứng dụng giao diện người dùng (Angular 5 Client) không gửi yêu cầu trực tiếp đến các dịch vụ xử lý nghiệp vụ nội bộ. Mọi luồng xử lý đều đi qua một máy chủ đóng vai trò API Gateway:
- API Gateway làm nhiệm vụ điểm truy xuất duy nhất (Single Entry Point), che giấu cấu trúc mạng và các microservices nội bộ.
- Tiếp nhận các yêu cầu HTTP/REST từ trình duyệt, thực hiện chức năng kiểm tra xác thực, phân quyền (thông qua Spring Security), giám sát, điều phối và định tuyến (routing) yêu cầu tới microservice chuyên trách.
- Tổng hợp dữ liệu từ nhiều dịch vụ độc lập để trả về phản hồi đồng nhất cho client.
Phân rã dữ liệu và cơ cấu bảng cơ sở dữ liệu
Hệ thống sử dụng cơ sở dữ liệu quan hệ PostgreSQL với 9 bảng dữ liệu phục vụ các phân hệ quản lý và thu thập tin tức:
| STT |
Tên bảng dữ liệu |
Mục đích và nội dung lưu trữ |
| 1 |
Loại tin tức |
Lưu thông tin danh mục bài viết (mã danh mục, tên danh mục, ngày tạo, người tạo, ngày cập nhật, trạng thái). |
| 2 |
Tin tức |
Lưu trữ nội dung chi tiết bài viết (tiêu đề, tóm tắt, nội dung đầy đủ, ảnh, tác giả, lượt xem, lượt thích, trạng thái duyệt). |
| 3 |
Người dùng |
Lưu trữ hồ sơ người dùng (tên đăng nhập, mật khẩu mã hóa, họ tên, ngày sinh, giới tính, địa chỉ, email, số điện thoại, ảnh đại diện). |
| 4 |
Quyền |
Định nghĩa các quyền hạn và vai trò trong hệ thống. |
| 5 |
User_Role |
Bảng liên kết trung gian xác định danh sách quyền được cấp cho từng tài khoản người dùng. |
| 6 |
Cat_Item |
Bảng liên kết giữa danh mục (Category) và bài viết tin tức (Item), phục vụ việc phân loại đa danh mục. |
| 7 |
Web |
Lưu thông tin các website nguồn phục vụ thu thập dữ liệu (tên trang web, cấu hình kết nối). |
| 8 |
Cat_Web |
Bảng phân loại liên kết giữa danh mục trên hệ thống với các chuyên mục tương ứng của website nguồn. |
| 9 |
Lịch sử thao tác trên Item |
Ghi nhận nhật ký các thao tác tạo mới, chỉnh sửa, kiểm duyệt hoặc xóa bài viết của người dùng/nhân viên. |
Hệ thống áp dụng đầy đủ các ràng buộc toàn vẹn cơ sở dữ liệu: ràng buộc khóa chính (Primary Key), ràng buộc khóa ngoại (Foreign Key) giữa các bảng quan hệ, và ràng buộc miền giá trị hợp lệ cho các trường trạng thái, cờ kích hoạt.
Cơ chế thu thập dữ liệu tự động (Crawling RSS)
Phân hệ Crawling RSS được xây dựng nhằm giải quyết bài toán nguồn dữ liệu tin tức đa dạng:
- Quản trị viên có giao diện quản lý danh sách các trang web nguồn và danh mục các liên kết RSS tương ứng.
- Phía backend thiết lập dịch vụ đọc định kỳ các luồng dữ liệu XML/RSS từ các URL đã được cấu hình, trích xuất các trường thông tin bài viết (tiêu đề, liên kết gốc, ngày xuất bản, nội dung tóm tắt) và nạp tự động vào cơ sở dữ liệu của hệ thống ở trạng thái chờ biên tập hoặc hiển thị.
Nội dung chính theo từng chương
Bố cục khóa luận được triển khai qua 5 chương chuyên môn:
Chương 1. Các công nghệ sử dụng
Chương 1 trình bày nền tảng lý thuyết của các công nghệ phần mềm được lựa chọn:
- Spring Boot: Phân tích lịch sử tiến hóa từ EJB sang Spring Framework (năm 2002), kiến trúc phân tầng Spring IO, các module cốt lõi (Spring Core Container, AOP, Data Access/Integration, Web/Spring MVC, Test). Trình bày các lợi điểm của Spring Boot trong việc nhúng web server (Tomcat, Jetty), loại bỏ các tệp cấu hình XML phức tạp và cung cấp công cụ CLI.
- Hibernate: Mô tả kiến trúc ORM kết nối tầng ứng dụng với cơ sở dữ liệu quan hệ thông qua cơ chế ánh xạ đối tượng Java Bean.
- Angular 5: Giới thiệu kiến trúc phát triển ứng dụng dựa trên TypeScript, cơ chế hoạt động của Component, Directive, Service, mô hình tiêm phụ thuộc (Dependency Injection) và cách thức phân chia cấu trúc dự án thông qua các NgModule (declarations, exports, imports, providers).
- Microservices và API Gateway: Phân tích sự chuyển dịch từ khối ứng dụng nguyên khối (monolithic) sang kiến trúc vi dịch vụ, nguyên tắc mỗi dịch vụ sở hữu cơ sở dữ liệu riêng, và vai trò của API Gateway trong việc định tuyến, bảo mật, cân bằng tải.
Chương 2. Khảo sát hiện trạng và xác định yêu cầu
Chương này đánh giá các vấn đề của các trang tin tức hiện có (như giao diện khó thao tác hoặc thiếu tính thẩm mỹ) và xác lập danh mục yêu cầu:
- Yêu cầu chức năng nghiệp vụ: Xác định nhiệm vụ cho Quản trị viên (quản lý người dùng, phân quyền, cấu hình URL crawling, xem thống kê theo danh mục); Nhân viên (quản lý danh mục, tạo và chỉnh sửa bài viết, duyệt tin tức, thống kê tin); Người dùng (tìm kiếm, xem bài viết, tương tác thích bài viết).
- Yêu cầu chức năng hệ thống: Thiết lập cơ chế phân quyền 4 cấp gồm Khách (Guest - xem tin), Thành viên (Member - tương tác, viết bài khi được cấp quyền), Nhân viên (Staff - quản lý nội dung, duyệt bài), Quản trị viên (Admin - toàn quyền quản trị hệ thống và thu thập dữ liệu). Bổ sung yêu cầu sao lưu, phục hồi thông tin tài khoản.
- Yêu cầu phi chức năng: Tiêu chuẩn thời gian trả về kết quả tìm kiếm không quá 5 giây; hệ thống xử lý đồng thời nhiều tài khoản hoạt động ổn định; dữ liệu được sao lưu định kỳ, tránh thất lạc.
Chương 3. Mô hình hóa yêu cầu
Chương 3 tập trung biểu diễn hệ thống bằng ngôn ngữ mô hình hóa UML:
- Bảng danh mục tác nhân và 33 ca sử dụng (Use Case) cụ thể của hệ thống, bao gồm các nhóm chức năng quản lý người dùng, quản lý quyền, thông tin cá nhân, quản lý tin tức, quản lý loại tin tức, quản lý cấu hình thu thập tin tức qua web và liên kết RSS.
- Xây dựng 8 sơ đồ Use Case chi tiết: Sơ đồ Use Case tổng thể hệ thống (Hình 3.1) và các sơ đồ phân rã chức năng gồm Quản lý người dùng (Hình 3.2), Quản lý quyền (Hình 3.3), Quản lý thông tin cá nhân (Hình 3.4), Quản lý tin tức (Hình 3.5), Quản lý loại tin tức (Hình 3.6), Quản lý web lấy dữ liệu (Hình 3.7), Quản lý liên kết RSS (Hình 3.8).
- Cung cấp các bảng đặc tả chi tiết Use Case (tiêu biểu như bảng đặc tả Use Case Đăng nhập).
Chương 4. Thiết kế phần mềm
Chương 4 là phần trọng tâm về kỹ thuật phần mềm, bao gồm ba nội dung chính:
- Thiết kế hệ thống: Xây dựng 27 sơ đồ tuần tự (Sequence Diagram) mô tả luồng tương tác giữa Actor, Giao diện (Boundary), Bộ điều khiển (Controller), Dịch vụ (Service) và Cơ sở dữ liệu cho từng nghiệp vụ: Chỉnh sửa mật khẩu, Đăng ký, Đăng nhập, Liên hệ, Xử lý loại tin tức, Quản lý quyền/người dùng, Phân loại tin, Duyệt tin, Xóa tin (xóa mềm - đánh dấu trạng thái), Thêm tin, Tìm kiếm, Thao tác Web và Link RSS.
- Thiết kế dữ liệu: Đặc tả chi tiết cấu trúc trường, kiểu dữ liệu của 9 bảng dữ liệu (Loại tin tức, Tin tức, Người dùng, Quyền, User_Role, Cat_Item, Web, Cat_Web, Lịch sử thao tác trên Item) cùng hệ thống ràng buộc toàn vẹn khóa chính, khóa ngoại và miền giá trị.
- Thiết kế giao diện: Thiết lập sơ đồ chuyển đổi màn hình và thiết kế chi tiết 20 giao diện người dùng kèm theo sơ đồ biến cố (Event Diagram) tương ứng: Màn hình Đăng nhập, Đăng ký, Thông tin cá nhân, Đổi mật khẩu, Quản lý người dùng, Quản lý quyền, Quản lý danh mục, Trang chủ hiển thị tin, Chi tiết bài viết, Quản lý tin tức, Phân loại tin tức, Thống kê tin tức theo danh mục, Quản lý Web/Link RSS.
Chương 5. Cài đặt và kiểm thử
Chương cuối cùng tổng kết quá trình triển khai thực nghiệm:
- Báo cáo kết quả cài đặt các mô-đun phần mềm và trình bày bảng dữ liệu kiểm thử (Bảng 5.1 - Một số Test Case tiêu biểu nhóm đã thực hiện).
- Phân tích các khó khăn gặp phải trong đề tài theo 3 nhóm: khó khăn công nghệ (tiếp cận Microservices, cấu hình API Gateway và Spring Security), khó khăn quy trình nghiệp vụ (luồng duyệt tin, phân rã danh mục), và khó khăn về con người (kỹ năng phối hợp nhóm).
- Đúc kết kinh nghiệm và đề xuất các hướng phát triển trong tương lai.
Kết quả và đóng góp
Khóa luận đã hoàn thành các mục tiêu đề ra với những kết quả cụ thể:
- Về mặt công nghệ: Nghiên cứu và áp dụng thành công mô hình kiến trúc Microservices kết hợp API Gateway trong việc xây dựng hệ thống website trực tuyến; làm chủ việc cấu hình Spring Boot cho tầng dịch vụ backend và Angular 5 cho tầng giao diện frontend; tích hợp Spring Security để kiểm soát phiên làm việc và bảo mật API; ứng dụng Hibernate kết nối hệ quản trị PostgreSQL.
- Về mặt sản phẩm phần mềm: Xây dựng hoàn chỉnh hệ thống website tin tức trực tuyến với đầy đủ các phân hệ chức năng:
- Hệ thống xác thực và phân quyền 4 cấp tác nhân (Khách, Thành viên, Nhân viên, Quản trị viên).
- Quy trình quản lý nội dung đa cấp: cho phép tạo bài, chỉnh sửa, gán đa danh mục (Cat_Item), phân loại và duyệt tin trước khi xuất bản; áp dụng cơ chế xóa mềm (đổi trạng thái tin, không xóa trực tiếp khỏi cơ sở dữ liệu để phục vụ phục hồi).
- Tích hợp module quản lý và Crawling RSS động, cho phép quản trị viên thêm/sửa/xóa URL nguồn báo để tự động thu thập bài viết.
- Xây dựng chức năng thống kê tin tức theo từng danh mục phục vụ công tác theo dõi nội dung.
- Về mặt thiết kế hệ thống: Xây dựng bộ hồ sơ thiết kế phần mềm chi tiết gồm 8 sơ đồ Use Case, 27 sơ đồ Sequence Diagram, lược đồ 9 bảng cơ sở dữ liệu và 20 màn hình giao diện kèm sơ đồ biến cố.
Hạn chế và hướng nghiên cứu tiếp
Dựa trên các khó khăn và đánh giá tự thân được trình bày trong văn bản:
- Hạn chế thực tế:
- Khó khăn về công nghệ: Việc chuyển đổi tư duy từ ứng dụng nguyên khối sang Microservices gặp nhiều trở ngại trong việc chia tách cơ sở dữ liệu, đồng bộ thông tin và cấu hình bộ định tuyến API Gateway; việc tích hợp Spring Security với RESTful API đòi hỏi nhiều tinh chỉnh phức tạp; cơ chế Crawling RSS phụ thuộc vào cấu trúc thẻ XML/HTML của các trang báo nguồn nên dễ phát sinh lỗi khi nguồn cấp thay đổi định dạng.
- Khó khăn về quy trình và nhân lực: Quá trình phân tích nghiệp vụ quản lý tin tức và phân quyền thực tế mất nhiều thời gian; kỹ năng lập trình với ngôn ngữ TypeScript và Angular 5 ban đầu của các thành viên còn mới mẻ.
- Hướng phát triển trong tương lai:
- Tối ưu hóa hiệu năng xử lý của các dịch vụ backend và bộ đệm (caching) tại API Gateway.
- Nâng cấp bộ công cụ Crawling RSS để có khả năng tự động thích ứng với nhiều định dạng cấu trúc website tin tức khác nhau.
- Hoàn thiện thêm các tính năng nâng cao cho người dùng như hệ thống gợi ý bài viết, bình luận đa cấp và chia sẻ mạng xã hội.
Giá trị tham khảo
Báo cáo khóa luận có giá trị tham khảo học thuật và ứng dụng thực tiễn đối với:
- Sinh viên ngành Công nghệ phần mềm và Công nghệ thông tin: Tài liệu minh họa trực quan quy trình làm đồ án tốt nghiệp chuẩn kỹ sư, từ khảo sát hiện trạng, phân tích yêu cầu bằng UML (Use Case, Sequence Diagram) đến thiết kế cơ sở dữ liệu quan hệ và thiết kế biến cố giao diện.
- Lập trình viên nghiên cứu kiến trúc hệ thống: Nguồn tài liệu tham khảo thực tế về việc áp dụng kiến trúc Microservices với API Gateway, cách kết nối tầng Frontend viết bằng Angular 5 (TypeScript) với tầng Backend viết bằng Spring Boot (Java) qua chuẩn RESTful API.
- Các đề tài về thu thập dữ liệu web: Phần thiết kế và cấu hình module Crawling RSS cung cấp giải pháp mẫu cho bài toán tự động tổng hợp tin tức từ nhiều nguồn dữ liệu báo chí bên ngoài.
Câu hỏi thường gặp
1. Kiến trúc Microservices trong đồ án được thiết kế như thế nào và API Gateway đóng vai trò gì?
Hệ thống chia tách các chức năng thành các dịch vụ độc lập, mỗi dịch vụ sở hữu cơ sở dữ liệu riêng thay vì dùng chung cơ sở dữ liệu tập trung truyền thống. Ứng dụng phía người dùng (Angular 5) không gọi trực tiếp vào các dịch vụ backend mà đi qua một máy chủ duy nhất là API Gateway (áp dụng mẫu thiết kế Facade). API Gateway có nhiệm vụ tiếp nhận yêu cầu từ client, xử lý xác thực, định tuyến yêu cầu tới đúng microservice chuyên trách và tổng hợp dữ liệu phản hồi.
2. Hệ thống phân chia người dùng thành những nhóm quyền nào và chức năng của từng nhóm ra sao?
Hệ thống phân chia thành 4 nhóm tác nhân rõ rệt:
- Khách (Guest): Không cần tài khoản; có quyền xem bài viết theo danh mục, xem chi tiết tin tức và tìm kiếm tin bài.
- Thành viên (Member): Có tài khoản đã đăng ký; thực hiện các quyền của Khách, quản lý hồ sơ cá nhân, đổi mật khẩu, thích/bỏ thích bài viết và có thể đăng bài viết khi được cấp quyền.
- Nhân viên (Staff): Quản lý danh mục tin tức (thêm/sửa/xóa), quản lý bài viết (thêm/sửa/xóa mềm), tìm kiếm và duyệt tin tức trước khi xuất bản.
- Quản trị viên (Admin): Toàn quyền quản trị; quản lý người dùng, quản lý và kích hoạt quyền, xem thống kê tin tức theo danh mục, cấu hình hệ thống Crawling RSS (thêm/sửa/xóa URL nguồn báo) và xử lý liên hệ người dùng.
3. Cơ chế thu thập dữ liệu tự động (Crawling RSS) được vận hành như thế nào?
Cơ chế Crawling RSS cho phép website lấy dữ liệu tự động từ các trang báo khác. Quản trị viên sử dụng giao diện hệ thống để cấu hình danh sách website nguồn (lưu ở bảng Web) và các liên kết RSS tương ứng (lưu ở bảng Cat_Web). Backend định kỳ trích xuất các luồng tin XML từ các URL này, bóc tách các trường dữ liệu như tiêu đề, tóm tắt, đường dẫn gốc và lưu trữ vào bảng Tin tức để phục vụ hiển thị.
4. Cơ sở dữ liệu của hệ thống gồm những bảng dữ liệu chính nào?
Hệ thống sử dụng cơ sở dữ liệu PostgreSQL gồm 9 bảng chính: Loại tin tức, Tin tức, Người dùng, Quyền, User_Role (phân quyền tài khoản), Cat_Item (phân loại bài viết vào danh mục), Web (website nguồn crawl), Cat_Web (liên kết danh mục crawl), và Lịch sử thao tác trên Item (nhật ký biên tập và kiểm duyệt).
5. Nghiệp vụ xóa tin tức trong hệ thống được xử lý theo phương thức nào?
Khi nhân viên thực hiện thao tác xóa bài viết, hệ thống không xóa vĩnh viễn bản ghi khỏi bảng cơ sở dữ liệu mà áp dụng kỹ thuật "xóa mềm". Trạng thái của bài viết được cập nhật thành "đã bị xóa" để ẩn bài viết khỏi giao diện hiển thị người dùng, giúp dễ dàng khôi phục lại dữ liệu khi cần thiết và duy trì tính toàn vẹn của lịch sử thao tác.
Kết luận
Khóa luận tốt nghiệp "Tìm hiểu Spring, Microservices và xây dựng hệ thống website tin tức trực tuyến" của sinh viên Nguyễn Hoàng Long và Bùi Xuân Trí đã hoàn thành đầy đủ các nhiệm vụ phân tích, thiết kế và hiện thực hóa một hệ thống web tin tức hiện đại. Bằng việc kết hợp kiến trúc Microservices với API Gateway, backend Spring Boot/PostgreSQL và frontend Angular 5, nhóm tác giả đã xây dựng thành công một giải pháp phần mềm hoàn chỉnh có khả năng phân quyền đa cấp và tự động thu thập tin tức qua RSS. Đây là tài liệu kỹ thuật có giá trị tham khảo tốt cho sinh viên và kỹ sư phần mềm quan tâm đến việc triển khai các ứng dụng web phân tán trên nền tảng Java và TypeScript.