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

Khóa luận tốt nghiệp kỹ sư ngành Kỹ thuật Phần mềm với đề tài "Diễn đàn đóng góp dữ liệu cho hoa và cây cảnh" (tên tiếng Anh: Contributed Data Forum For Plants) được thực hiện bởi sinh viên Lê Trọng Anh Đức (MSSV: 16520237) và Lê Văn Phước (MSSV: 16520959), dưới sự hướng dẫn của ThS. Huỳnh Nguyễn Khắc Huy tại Khoa Công nghệ Phần mềm, Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP. Hồ Chí Minh (năm 2020).

1. Lý do chọn đề tài và bối cảnh thực tiễn

Cùng với sự phát triển của đời sống kinh tế – xã hội, nhu cầu về đời sống tinh thần thông qua thú vui trồng, chăm sóc và sưu tầm các loài thực vật, hoa và cây cảnh ngày càng tăng cao. Tuy nhiên, việc tiếp cận nguồn thông tin đầy đủ, chuẩn xác và có cấu trúc về các loài thực vật trên Internet còn gặp nhiều trở ngại:

  • Các nguồn thông tin lớn hiện nay (như bách khoa toàn thư mở Wikipedia) hoặc các trang web chuyên biệt (như cơ sở dữ liệu về họ Lan Orchidaceae) tồn tại nhiều hạn chế: giao diện tĩnh, dữ liệu sơ sài, hình ảnh chủ yếu là tiêu bản khô hoặc thiếu chi tiết, thiếu tính năng tương tác để người dùng có thể bổ sung, hiệu chỉnh dữ liệu.
  • Các công cụ tìm kiếm phổ biến (Google, Bing, Yahoo) khi trả kết quả thường chỉ ưu tiên hình ảnh bộ phận đặc sắc nhất (thường là bông hoa) mà thiếu các bộ phận nhận dạng quan trọng khác như thân, lá, rễ. Điều này dẫn đến sự nhầm lẫn nghiêm trọng giữa các loài có mặt hoa tương đồng nhưng thân lá khác biệt (như Dendrobium signatum – Hoàng phi hạc và Dendrobium crystallinum – Ngọc thạch 2 màu), hoặc các loài có hoa khác nhau nhưng thân lá tương tự nhau (như các loài thuộc chi con Brachypetalum – Lan hài gấm).
  • Hiện tượng người sưu tầm đăng tải hình ảnh kèm tên định danh sai lệch lên mạng xã hội vô tình được các công cụ tìm kiếm tối ưu hóa (SEO), khiến dữ liệu sai lan truyền diện rộng và lấn át nguồn thông tin chuẩn xác.

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

Đề tài xác định các mục tiêu cụ thể:

  1. Xây dựng một diễn đàn trực tuyến đóng góp dữ liệu mở chuyên sâu về hoa và cây cảnh, cho phép cộng đồng toàn cầu tìm kiếm, nhận dạng, chia sẻ và đóng góp thông tin.
  2. Xây dựng cấu trúc dữ liệu thực vật theo các thành phần giải phẫu (hoa, lá, thân, quả...) và các thuộc tính chi tiết (màu sắc, hình dạng, kích thước...).
  3. Thiết lập cơ chế kiểm duyệt dữ liệu phân tầng thông qua đội ngũ kiểm duyệt viên (Moderator) và hệ thống đánh giá cộng đồng (upvote/downvote) nhằm đảm bảo tính xác thực, hạn chế thông tin sai lệch.
  4. Phát triển tính năng quản lý bộ sưu tập cá nhân theo dòng thời gian thực tế, hỗ trợ người dùng chứng minh độ tin cậy của các đóng góp dữ liệu.

3. Đối tượng và phạm vi nghiên cứu

  • Đối tượng sử dụng: Tất cả người dùng trên toàn thế giới có nhu cầu tra cứu, nhận dạng hoặc chia sẻ thông tin chuẩn xác về hoa và cây cảnh.
  • Đối tượng dữ liệu: Hệ thống thực vật học (tập trung vào hoa và cây cảnh), phân loại dựa trên danh pháp khoa học chuẩn quốc tế.
  • Phạm vi ngôn ngữ: Giao diện và dữ liệu ứng dụng sử dụng Tiếng Anh.
  • Thời gian thực hiện: Từ ngày 01/10/2020 đến ngày 21/01/2021 theo đề cương chi tiết được phê duyệt.

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

1. Cơ sở lý thuyết và quy chuẩn khoa học

  • Quy chuẩn danh pháp thực vật học: Ứng dụng dựa trên "Luật Danh pháp và cách đọc tên khoa học các loài cây" thuộc giới Thực vật (Plantae), áp dụng hệ thống phân loại học nhị thức (tên Latinh gồm tên Chi và tên Loài, ví dụ: Paphiopedilum vietnamese, Phalaenopsis hieroglyphica). Tên Latinh được chọn làm định danh chính xác duy nhất để giải quyết triệt để sự nhập nhằng của tên địa phương/tên thường gọi.
  • Mô hình kiến trúc phần mềm: Khóa luận áp dụng kiến trúc hướng dịch vụ siêu nhỏ (Microservices Architecture). Các module nghiệp vụ được tách biệt thành các dịch vụ độc lập có tính liên kết lỏng (loose coupling), độc lập về triển khai (deployment), mở rộng (scalability) và quản lý cơ sở dữ liệu chuyên biệt.
  • Mẫu thiết kế (Design Patterns): Ứng dụng các mẫu thiết kế hướng đối tượng (OOP), lập trình hàm (FP), lập trình phản ứng (FRP), Dependency Injection (DI), Active Record, Data Mapper và mẫu phân tách trách nhiệm truy vấn - lệnh (CQRS).

2. Phương pháp nghiên cứu và phát triển

  • Phương pháp kỹ thuật phần mềm: Nhóm tác giả thực hiện phân tích nghiệp vụ, mô hình hóa hệ thống thông qua sơ đồ Use Case, xây dựng đặc tả Use Case, thiết kế lược đồ quan hệ thực thể (ERD) và triển khai hệ thống theo quy trình làm việc nhóm có kiểm soát tiến độ hằng ngày.
  • Kế hoạch triển khai kỹ thuật: Quy trình thực hiện gồm 7 giai đoạn:
    1. 01/10/2020 – 07/10/2020: Tìm hiểu, phân tích nghiệp vụ.
    2. 08/10/2020 – 21/10/2020: Nghiên cứu công nghệ và kiến trúc Microservices.
    3. 22/10/2020 – 04/11/2020: Thiết kế giao diện (UI/UX) và cơ sở dữ liệu.
    4. 05/11/2020 – 31/12/2020: Xây dựng các Microservices và Frontend.
    5. 01/01/2021 – 07/01/2021: Triển khai hệ thống lên nền tảng đám mây (Cloud deployment).
    6. 08/01/2021 – 14/01/2021: Kiểm thử phần mềm.
    7. 15/01/2021 – 21/01/2021: Sửa lỗi (Fix bug) và đưa hệ thống vào vận hành chính thức (Go-live).

Thiết kế và triển khai hệ thống

1. Kiến trúc hệ thống và Công nghệ áp dụng

Hệ thống được thiết kế theo mô hình Microservices phân tán, sử dụng các nền tảng và thư viện mã nguồn mở chuyên dụng:

Thành phần Công nghệ / Nền tảng Vai trò và Đặc tính kỹ thuật
Ảo hóa & Đóng gói Docker Đóng gói ứng dụng vào container độc lập theo nguyên tắc "Build once, run anywhere", hỗ trợ mở rộng dịch vụ.
Phía Máy chủ (Backend) Node.js (V8 Engine) & TypeScript Môi trường thực thi JavaScript hiệu năng cao, mở rộng hướng đối tượng với kiểu dữ liệu tĩnh nghiêm ngặt (Static Typing).
Khung ứng dụng Backend NestJS Framework cho Node.js hỗ trợ DI, kiến trúc module hóa, tích hợp sẵn các cổng kết nối microservice.
Hệ thống gửi nhận thông điệp NATS.io Hệ thống messaging phân tán thuộc tổ chức CNCF, hỗ trợ giao tiếp bất đồng bộ hiệu năng cao giữa các microservice.
Truy xuất dữ liệu (ORM/ODM) TypeORM & Mongoose TypeORM hỗ trợ ánh xạ quan hệ (Data Mapper/Active Record); Mongoose quản lý Schema cho cơ sở dữ liệu hướng tài liệu MongoDB.
Phía Giao diện (Frontend) ReactJS Thư viện giao diện người dùng sử dụng cú pháp JSX, Virtual DOM, luồng dữ liệu một chiều và hỗ trợ tối ưu hóa SEO qua Server-Side Rendering.

2. Phân rã Microservices

Kiến trúc backend của hệ thống bao gồm 5 dịch vụ chính:

  1. APIGateway Service: Đóng vai trò cổng vào duy nhất (single entry point) tiếp nhận mọi yêu cầu từ client, thực hiện xác thực, kiểm tra tính hợp lệ và điều hướng (routing) request tới các API tương ứng ở các service nội bộ.
  2. User Service: Quản lý toàn bộ thông tin tài khoản người dùng, hồ sơ cá nhân (profile), lịch sử hoạt động (yêu cầu thực vật, đóng góp, bình chọn, xác thực), bộ sưu tập cây trồng cá nhân và các chủ đề trao đổi (topic).
  3. Plant Service: Quản lý nghiệp vụ thực vật học bao gồm việc tạo danh mục thực vật (Plant), các thành phần cấu tạo (Tab/Component), các thuộc tính (Attribute), tiếp nhận đóng góp dữ liệu, xử lý đánh giá (upvote/downvote), kiểm duyệt và xử lý các yêu cầu bổ sung loài mới từ cộng đồng.
  4. Auth Service: Xử lý logic đăng ký, đăng nhập và phân quyền hệ thống.
  5. Image Service: Tiếp nhận, lưu trữ và xử lý hình ảnh đóng góp và ảnh bộ sưu tập theo thời gian.

3. Tác tử và Các Use Case cốt lõi

Hệ thống phân định rõ quyền hạn và nhiệm vụ của 3 nhóm tác tử (Actor):

  • Admin (Quản trị viên): Tạo loài thực vật với tên khoa học Latinh; tạo danh mục thành phần (lá, hoa, thân, quả...); tạo danh mục thuộc tính (màu sắc, kích thước, hình dạng...); liên kết thành phần và thuộc tính vào từng loài; quản lý và phân quyền người dùng (User/Moderator).
  • Moderator (Kiểm duyệt viên): Kiểm tra và đánh dấu đóng góp chuẩn xác nhất cho từng thuộc tính của loài. Nếu tỷ lệ kiểm duyệt viên đánh dấu vượt quá 50%, đóng góp đó sẽ được hệ thống ưu tiên hiển thị ở vị trí đầu tiên.
  • User (Người dùng thường): Tìm kiếm thông tin thực vật theo tên khoa học hoặc tên thường gọi; gửi yêu cầu tạo mới loài thực vật chưa có trên hệ thống; đóng góp dữ liệu và hình ảnh theo thuộc tính; bình chọn (upvote/downvote) đóng góp; tạo bộ sưu tập theo dõi sự phát triển của cây cá nhân theo thời gian; đăng bài và bình luận trao đổi thông tin.

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

Chương 1: Tổng quan đề tài

Chương 1 phân tích hiện trạng tiếp cận thông tin thực vật trên Internet. Tác giả chỉ ra các khiếm khuyết của các hệ thống bách khoa trực tuyến và các trang dữ liệu tĩnh chuyên ngành (như trang thông tin họ Phong lan Orchidaceae), đặc biệt là tình trạng thiếu tương tác và thiếu dữ liệu đa thành phần. Thông qua các trường hợp cụ thể (Dendrobium signatum so với Dendrobium crystallinum, hoặc các loài trong phân chi Lan hài gấm Brachypetalum), chương này làm rõ nhu cầu bức thiết phải định danh thực vật theo danh pháp khoa học chuẩn quốc tế kết hợp hình ảnh đa bộ phận. Trên cơ sở đó, chương xác định mục tiêu xây dựng diễn đàn đóng góp dữ liệu mở, xác lập phạm vi sử dụng ngôn ngữ tiếng Anh hướng đến cộng đồng toàn cầu, đồng thời phác thảo cấu trúc 5 chương của khóa luận.

Chương 2: Công nghệ

Chương 2 trình bày toàn diện cơ sở kiến thức nền tảng và các công nghệ được lựa chọn:

  • Kiến trúc & Ảo hóa: Phân tích cơ chế đóng gói ứng dụng trong container của Docker nhằm đảm bảo tính linh hoạt trên nhiều môi trường; trình bày nguyên lý kiến trúc Microservices với các ưu điểm về mở rộng độc lập, cô lập lỗi và khả năng bảo trì cao so với kiến trúc nguyên khối (Monolith).
  • Nền tảng Backend: Trình bày về Node.js (môi trường runtime xây dựng trên V8, lõi C++ xử lý bất đồng bộ); ngôn ngữ TypeScript (hệ thống kiểu tĩnh, hướng đối tượng mạnh mẽ do Microsoft phát triển); framework NestJS (kết hợp OOP, FP, FRP và Dependency Injection).
  • Giao tiếp & Lưu trữ: Giới thiệu hệ thống truyền thông điệp NATS.io hỗ trợ giao tiếp siêu nhẹ chuẩn Cloud Native (CNCF); thư viện TypeORM với các mẫu Active Record/Data Mapper; thư viện Mongoose quản lý 8 kiểu dữ liệu giản đồ (String, Number, Date, Buffer, Boolean, Mixed, ObjectId, Array) cho MongoDB.
  • Giao diện người dùng: Trình bày thư viện ReactJS, cú pháp JSX, cơ chế ảo hóa DOM và khả năng hỗ trợ Server-Side Rendering phục vụ tối ưu hóa công cụ tìm kiếm (SEO).

Chương 3: Thiết kế ứng dụng

Chương 3 là phần trọng tâm kỹ thuật của khóa luận, bao gồm:

  • Mô hình hóa Use Case: Lập danh sách 3 tác tử (Admin, Moderator, User) và chi tiết hóa 15 Use Case nghiệp vụ (từ đăng ký/đăng nhập, tìm kiếm, yêu cầu thực vật, đóng góp thông tin, đánh giá, kiểm duyệt, đến các Use Case quản trị danh mục thực vật và bộ sưu tập). Mỗi Use Case đều có bảng đặc tả chi tiết kèm luồng sự kiện chính và sự kiện phụ.
  • Kiến trúc Microservices: Phân rã hệ thống thành 5 dịch vụ (APIGateway, User, Plant, Auth, Image) và định nghĩa nhiệm vụ tương tác giữa các service.
  • Thiết kế Cơ sở dữ liệu: Xây dựng 14 bảng/thực thể dữ liệu phục vụ các microservices, bao gồm: User, Profile, RequestHistory, ContributeHistory, VoteHistory, CheckHistory, Post, Comment, FollowHistory, LikeHistory, Focus, ModeratorRequest, Collection, Image.
  • Thiết kế Giao diện (UI): Đặc tả thiết kế cho 18 màn hình và cửa sổ chức năng: màn hình đăng ký, đăng nhập, trang chủ, thanh tìm kiếm dropdown, kết quả tìm kiếm, danh sách thực vật, chi tiết thực vật, chi tiết thuộc tính, cửa sổ đóng góp dữ liệu, danh sách và chi tiết nhà đóng góp, trang cá nhân, bài viết, bình luận và bộ sưu tập ảnh theo dòng thời gian.

Chương 4: Kết luận và hướng phát triển

Chương 4 tổng kết quá trình thực hiện đồ án, đánh giá các mục tiêu chức năng đã hoàn thành theo kế hoạch. Tác giả phân tích những thuận lợi từ việc áp dụng các framework hiện đại (NestJS, ReactJS, Docker) và những khó khăn trong việc thiết kế mô hình dữ liệu thực vật học mang tính cấu trúc cao. Cuối cùng, chương đưa ra các định hướng phát triển trong tương lai, trọng tâm là việc mở rộng nền tảng sang lĩnh vực trao đổi, mua bán hoa và cây cảnh thực tế giữa các thành viên cộng đồng.


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

1. Kết quả kỹ thuật đạt được

  • Hoàn thành thiết kế và hiện thực hóa website "Contributed Data Forum For Plants" hoạt động trên kiến trúc Microservices với 5 dịch vụ phân lập, giao tiếp thông qua NATS.io.
  • Xây dựng thành công hệ thống dữ liệu phân cấp cho thực vật: Loài (theo tên Latinh) $\rightarrow$ Thành phần (hoa, lá, thân, củ, rễ, quả...) $\rightarrow$ Thuộc tính (màu sắc, kích thước, cấu trúc...).
  • Triển khai cơ chế đóng góp và kiểm soát chất lượng dữ liệu: tích hợp tính năng upvote/downvote cho cộng đồng và cơ chế xác nhận của Moderator (ngưỡng xác thực >50% để ghim dữ liệu chuẩn lên đầu).
  • Xây dựng hệ thống nhật ký bộ sưu tập (Collection) cho phép người dùng đăng tải tiến trình phát triển của cây theo dòng thời gian thực tế, tạo cơ sở xác thực năng lực của người đóng góp.

2. Đóng góp về mặt giải pháp

  • Chuẩn hóa thông tin thực vật: Khắc phục tình trạng dữ liệu phi cấu trúc và thông tin sai lệch trên Internet bằng cách gắn chặt thông tin với danh pháp khoa học Latinh và hình ảnh chi tiết từng bộ phận giải phẫu của cây.
  • Mô hình tri thức cộng đồng có kiểm duyệt: Kết hợp linh hoạt giữa nguồn lực đóng góp mở từ cộng đồng (Crowdsourcing) và cơ chế thẩm định khoa học của kiểm duyệt viên, ngăn chặn triệt để hiện tượng tối ưu hóa SEO cho các dữ liệu sai lệch trên không gian mạng.

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

1. Hạn chế

  • Hệ thống dữ liệu ban đầu phụ thuộc vào việc thiết lập thủ công các loài thực vật, thành phần và thuộc tính từ phía Quản trị viên (Admin) trước khi người dùng có thể tham gia đóng góp.
  • Độ chính xác của dữ liệu trên diện rộng phụ thuộc lớn vào quy mô và mức độ hoạt động tích cực của đội ngũ kiểm duyệt viên có chuyên môn thực vật học.

2. Hướng nghiên cứu và phát triển tiếp

  • Mở rộng sang thương mại & trao đổi vật chất: Nâng cấp nền tảng không chỉ dừng lại ở việc chia sẻ thông tin mà mở rộng sang hỗ trợ người dùng trao đổi, mua bán, giao lưu các giống hoa và cây cảnh thực tế.
  • Mở rộng hệ sinh thái: Tích hợp các thuật toán học máy/trí tuệ nhân tạo hỗ trợ nhận diện tự động hình ảnh thực vật dựa trên tập dữ liệu đã được cộng đồng và kiểm duyệt viên xác thực.

Giá trị tham khảo

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

  • Sinh viên và kỹ sư ngành Kỹ thuật Phần mềm / Công nghệ Thông tin: Cung cấp tài liệu tham khảo chi tiết về việc ứng dụng kiến trúc Microservices trong thực tế với NestJS, TypeScript, Docker, NATS.io và ReactJS; cách phân tích 15 Use Case nghiệp vụ và thiết kế cơ sở dữ liệu phân tán.
  • Nhà phát triển các hệ thống tri thức cộng đồng (Crowdsourcing): Cung cấp giải pháp thiết kế luồng kiểm duyệt dữ liệu phân tầng (kết hợp bình chọn cộng đồng và thẩm định chuyên môn có ngưỡng trọng số >50%).
  • Người nghiên cứu và xây dựng ứng dụng trong lĩnh vực Nông nghiệp / Thực vật học: Tham khảo mô hình phân rã cấu trúc thực vật (loài theo tên Latinh, thành phần giải phẫu, thuộc tính hình thái) để ứng dụng vào việc xây dựng cơ sở dữ liệu số hóa cây trồng.

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

1. Tại sao hệ thống bắt buộc sử dụng tên Latinh làm định danh cho các loài thực vật?

Theo quy chuẩn thực vật học quốc tế ("Luật Danh pháp và cách đọc tên khoa học các loài cây"), tên khoa học viết bằng tiếng Latinh gồm tên Chi và tên Loài là quy chuẩn bất biến duy nhất để phân biệt chính xác các loài. Tên thường gọi hoặc tên địa phương thường gây nhầm lẫn do trùng lặp hoặc khác biệt theo từng vùng miền, do đó tên Latinh được dùng làm khóa định danh chính xác trong hệ thống.

2. Cơ chế nào giúp hệ thống xác định một đóng góp dữ liệu là chuẩn xác nhất?

Hệ thống sử dụng cơ chế kiểm duyệt phân tầng: bên cạnh tính năng upvote/downvote từ cộng đồng người dùng, hệ thống cung cấp quyền hạn riêng cho các Kiểm duyệt viên (Moderator). Khi một đóng góp dữ liệu cho một thuộc tính nhận được sự đánh dấu đồng thuận từ trên 50% số lượng kiểm duyệt viên, dữ liệu đó sẽ tự động được ưu tiên hiển thị ở vị trí đầu tiên của trang thông tin thực vật.

3. Hệ thống phía máy chủ được chia thành những Microservices nào?

Phía máy chủ của hệ thống được chia thành 5 dịch vụ siêu nhỏ độc lập:

  1. APIGateway Service (tiếp nhận và điều hướng yêu cầu)
  2. User Service (quản lý người dùng, hồ sơ, chủ đề thảo luận)
  3. Plant Service (quản lý danh mục thực vật, thành phần, thuộc tính, đóng góp và đánh giá)
  4. Auth Service (xác thực và phân quyền)
  5. Image Service (lưu trữ và xử lý hình ảnh đóng góp, ảnh bộ sưu tập).

4. Tính năng "Bộ sưu tập" theo dòng thời gian có vai trò gì trong hệ thống?

Tính năng bộ sưu tập cho phép người dùng đăng tải và lưu trữ hình ảnh các loài cây mà họ thực tế sở hữu theo tiến trình thời gian thực. Điều này giúp các thành viên khác trong diễn đàn có thể kiểm chứng thực tế quá trình sinh trưởng của cây, từ đó đánh giá mức độ tin cậy và kinh nghiệm của người đóng góp khi họ cung cấp dữ liệu cho hệ thống.

5. Những công nghệ nào được sử dụng để xây dựng hệ thống truyền thông điệp và giao diện?

Hệ thống sử dụng nền tảng NATS.io (một dự án Cloud Native thuộc CNCF) làm hệ thống messaging hiệu năng cao để kết nối và trao đổi dữ liệu bất đồng bộ giữa các microservices. Phía giao diện người dùng được xây dựng hoàn toàn bằng thư viện ReactJS, sử dụng cú pháp JSX và luồng dữ liệu một chiều để tối ưu hóa hiệu năng render và hỗ trợ SEO.


Kết luận

Khóa luận tốt nghiệp "Diễn đàn đóng góp dữ liệu cho hoa và cây cảnh" của tác giả Lê Trọng Anh Đức và Lê Văn Phước đã giải quyết hiệu quả bài toán phân tán và sai lệch dữ liệu thực vật học trên Internet bằng giải pháp phần mềm hiện đại. Đề tài đã xây dựng thành công nền tảng web hoàn chỉnh trên nền kiến trúc Microservices (sử dụng NestJS, TypeScript, ReactJS, Docker và NATS.io) với cấu trúc phân loại danh pháp Latinh chặt chẽ và cơ chế kiểm duyệt cộng đồng minh bạch. Kết quả của đồ án cung cấp một tài liệu kỹ thuật có giá trị tham khảo cao về mặt kiến trúc phần mềm phân tán cũng như phương pháp mô hình hóa dữ liệu tri thức mở chuyên ngành.