Mục tiêu của đề tài là xây dựng một kiến trúc phân tán cho hệ thống quản lý thư viện, cho phép các thành phần của hệ thống hoạt động trên nhiều máy tính khác nhau và đồng bộ dữ liệu giữa
CƠ SỞ LÝ THUYẾT
Các mô hình mạng
1.1.1.1 Mô hình OSI là gì?
Mô hình Kết nối các hệ thống mở (OSI) chia các chức năng truyền thông mạng thành 7 lớp, tạo ra một khung khái niệm giúp các công nghệ phần cứng và phần mềm hoạt động hài hòa qua các ranh giới địa lý và chính trị Mô hình OSI cung cấp ngôn ngữ phổ quát cho mạng máy tính, cho phép các công nghệ khác nhau giao tiếp thông qua các giao thức tiêu chuẩn Mỗi công nghệ trong một lớp cụ thể cần cung cấp các khả năng và thực hiện các chức năng nhất định, giúp cho các công nghệ ở các lớp cao hơn có thể tận dụng các công nghệ lớp thấp mà không cần lo lắng về các chi tiết triển khai cơ bản.
1.1.1.2 Tại sao mô hình OSI lại quan trọng?
Mô hình OSI phân chia giao tiếp mạng thành các lớp, giúp hệ thống phần mềm và phần cứng tương tác hiệu quả Thiết kế của mô hình này cho phép hai hệ thống độc lập giao tiếp thông qua các giao diện và giao thức chuẩn hóa dựa trên lớp hoạt động hiện tại.
Những lợi ích của mô hình OSI:
Kỹ sư có thể áp dụng mô hình OSI để tổ chức và mô hình hóa các kiến trúc mạng phức tạp Bằng cách tách lớp hoạt động của từng thành phần theo chức năng chính, họ dễ dàng quản lý hệ thống Việc phân tách này thông qua trừu tượng hóa giúp khái niệm hóa tổng thể hệ thống một cách rõ ràng hơn.
Mô hình tham chiếu OSI giúp các kỹ sư hiểu rõ hơn về công việc của mình, từ đó tăng tốc độ nghiên cứu và phát triển Khi xây dựng các hệ thống mạng mới cần giao tiếp, họ xác định được lớp công nghệ mà mình đang phát triển Điều này cho phép các kỹ sư phát triển hệ thống kết nối mạng hiệu quả hơn, đồng thời tận dụng các quy trình và giao thức có thể lặp lại.
Mô hình OSI chuẩn hóa linh hoạt các tác vụ mà các giao thức thực hiện, cho phép phát triển giao tiếp mạng mà không cần hiểu biết sâu về hệ thống Điều này giúp kỹ sư nhanh chóng nắm bắt và xây dựng các hệ thống phức tạp Trong các ứng dụng hiện đại, các cấp độ kết nối mạng và giao thức được tóm tắt để đơn giản hóa thiết kế và phát triển hệ thống Hình ảnh minh họa cách mô hình OSI được áp dụng trong lĩnh vực phát triển ứng dụng hiện đại.
1.1.1.3 Bảy lớp của mô hình OSI
Mô hình Kết nối giữa các hệ thống mở (OSI) được phát triển vào cuối những năm 1970 bởi Tổ chức tiêu chuẩn hóa quốc tế và các tổ chức khác Ra mắt lần đầu vào năm 1984 với tên ISO 7498, phiên bản hiện tại là ISO/IEC 7498-1:1994 Mô hình này bao gồm 7 lớp chính.
Lớp vật lý là nền tảng truyền dẫn dữ liệu, sử dụng các công nghệ để chuyển tín hiệu kỹ thuật số và điện tử qua các kênh như cáp quang, cáp đồng và không khí Nó thiết lập các tiêu chuẩn cho công nghệ và các chỉ số liên quan đến các kênh truyền, bao gồm Bluetooth, NFC và tốc độ truyền dữ liệu.
Lớp liên kết dữ liệu:
Lớp liên kết dữ liệu là công nghệ kết nối hai máy trên mạng đã có lớp vật lý, quản lý khung dữ liệu và tín hiệu kỹ thuật số Nó tập trung vào kiểm soát lưu lượng và lỗi dữ liệu, với Ethernet là một tiêu chuẩn tiêu biểu Lớp này được chia thành hai lớp phụ: Kiểm soát truy cập phương tiện (MAC) và Điều khiển liên kết logic (LLC).
Lớp mạng liên quan đến định tuyến, chuyển tiếp và xác định địa chỉ trong các mạng phân tán hoặc mạng kết nối Nó cũng quản lý kiểm soát lưu lượng Trên Internet, Giao thức Internet v4 (IPv4) và IPv6 là hai giao thức lớp mạng chủ yếu.
Lớp truyền tải đóng vai trò quan trọng trong việc đảm bảo rằng các gói dữ liệu được gửi đến đúng thứ tự và không bị mất mát hoặc lỗi, đồng thời có khả năng phục hồi khi cần thiết Kiểm soát lưu lượng và kiểm soát lỗi là hai yếu tố chính tại lớp này Các giao thức phổ biến bao gồm Giao thức điều khiển truyền tải (TCP), một giao thức dựa trên kết nối với độ tin cậy cao, và Giao thức gói dữ liệu người dùng (UDP), một giao thức không kết nối với độ tin cậy thấp hơn TCP thường được lựa chọn khi cần đảm bảo tính toàn vẹn của dữ liệu, như trong chia sẻ tệp, trong khi UDP thích hợp hơn cho các ứng dụng mà việc mất gói dữ liệu không quá nghiêm trọng, chẳng hạn như truyền phát video.
Lớp phiên đóng vai trò quan trọng trong việc điều phối mạng giữa hai ứng dụng khác nhau trong một phiên làm việc Nó quản lý kết nối ứng dụng một-một từ lúc bắt đầu cho đến khi kết thúc, đồng thời giải quyết các xung đột đồng bộ hóa Các giao thức phổ biến được sử dụng trong lớp phiên bao gồm Hệ thống tệp mạng (NFS) và Khối tin nhắn máy chủ (SMB).
Lớp trình bày chủ yếu tập trung vào cú pháp của dữ liệu mà các ứng dụng gửi và sử dụng Các ngôn ngữ lập mô hình như Hypertext Markup Language (HTML), JavaScript Object Notation (JSON) và Comma Separated Values (CSV) được sử dụng để mô tả cấu trúc dữ liệu tại lớp này.
Lớp ứng dụng liên quan đến các loại ứng dụng cụ thể và các phương thức giao tiếp tiêu chuẩn hóa của chúng Chẳng hạn, trình duyệt web sử dụng Giao thức truyền siêu văn bản an toàn (HTTPS) và HTTP để giao tiếp, trong khi các ứng dụng email giao tiếp thông qua POP3 (Post Office Protocol phiên bản 3) và SMTP (Giao thức truyền thư đơn giản).
Không phải tất cả các hệ thống sử dụng mô hình OSI đều triển khai tất cả các lớp.
1.1.1.4 Hoạt động truyền dữ liệu
Mô hình Kết nối giữa các hệ thống mở (OSI) bao gồm các lớp được thiết kế để cho phép ứng dụng giao tiếp qua mạng với ứng dụng khác trên thiết bị khác, bất kể độ phức tạp của chúng Để thực hiện điều này, các tiêu chuẩn và giao thức khác nhau được sử dụng để giao tiếp với các lớp bên trên hoặc bên dưới Các lớp này hoạt động độc lập và chỉ nhận thức các giao diện cần thiết để tương tác với các lớp lân cận.
Bằng cách kết nối các lớp và giao thức khác nhau, dữ liệu phức tạp có thể được truyền tải hiệu quả từ ứng dụng này sang ứng dụng khác.
Quy trình hoạt động như sau:
Lớp ứng dụng của người gửi hoạt động truyền dữ liệu xuống tầng bên dưới tiếp theo.
Mỗi lớp đều thêm các tiêu đề và địa chỉ riêng của nó vào dữ liệu trước khi chuyển dữ liệu đi
Hoạt động truyền dữ liệu di chuyển xuống các lớp cho đến khi cuối cùng dữ liệu được truyền qua phương tiện vật lý.
Ở đầu kia của phương tiện, mỗi lớp xử lý dữ liệu theo các tiêu đề có liên quan ở cấp độ đó
Ở đầu thiết bị nhận, dữ liệu di chuyển lên từng lớp và dần dần được giải nén cho đến khi ứng dụng ở đầu kia nhận được dữ liệu.
Các mô hình ứng dụng mạng phổ biến
Mô hình client-server trong mạng máy tính bao gồm hai thành phần chính: client (máy khách) và server (máy chủ) Client thực hiện yêu cầu dịch vụ và lưu trữ tài nguyên từ server, tạo nên sự tương tác hiệu quả giữa hai bên.
Khi máy client gửi yêu cầu dữ liệu qua Internet đến server, server sẽ xử lý yêu cầu đó và gửi lại các gói dữ liệu tương ứng cho client Trong quá trình này, client không chia sẻ bất kỳ tài nguyên nào của mình.
Hình 6 Mô hình Client-Server
Là một cấu trúc ứng dụng phân tán, hệ thống này phân chia các nhiệm vụ và khối lượng công việc giữa các nhà cung cấp tài nguyên hoặc dịch vụ và những người yêu cầu dịch vụ.
1.2.1.2 Nguyên tắc hoạt động của mô hình Client-Server
Hình 7 Nguyên tắc hoạt động của mô hình Client Server
Khi đề cập đến Client, chúng ta hiểu đó là một cá nhân hoặc tổ chức sử dụng dịch vụ Trong môi trường kỹ thuật số, Client được xem như một máy tính (Host) có khả năng nhận thông tin và sử dụng dịch vụ từ các nhà cung cấp (Server).
Server là một máy chủ cung cấp dịch vụ và thông tin từ xa trong lĩnh vực công nghệ Nó cho phép người dùng truy cập dữ liệu và các dịch vụ cụ thể một cách hiệu quả.
Trong mô hình Client-Server, Client là đối tượng gửi yêu cầu, trong khi Server là bên cung cấp thông tin, miễn là dữ liệu đó có sẵn trong cơ sở dữ liệu.
1.2.1.3 Ưu và nhược điểm của mô hình Client-Server Ưu điểm
Mô hình mạng khách chủ nổi bật với ưu điểm chính là khả năng kiểm soát tập trung, cho phép tất cả thông tin cần thiết được lưu trữ ở một vị trí duy nhất Điều này mang lại lợi ích lớn cho các quản trị viên mạng, vì họ có toàn quyền quản lý và điều hành hệ thống một cách hiệu quả.
Với tính năng này, mọi sự cố mạng có thể được xử lý tập trung tại một địa điểm, giúp việc cập nhật tài nguyên và dữ liệu trở nên đơn giản và thuận tiện hơn.
Trong mạng Client Server, kiến trúc tập trung giúp bảo vệ dữ liệu hiệu quả Hệ thống này cho phép áp dụng các biện pháp kiểm soát truy cập chặt chẽ, đảm bảo chỉ những người dùng được ủy quyền mới có quyền truy cập vào thông tin.
Một phương pháp hiệu quả để bảo vệ thông tin là yêu cầu người dùng nhập thông tin đăng nhập như Tên người dùng và Mật khẩu Ngoài ra, trong trường hợp dữ liệu bị mất, việc khôi phục các tệp tin sẽ trở nên đơn giản hơn với chỉ một bản sao lưu duy nhất.
Mô hình mạng Client-Server có khả năng mở rộng linh hoạt, cho phép người dùng dễ dàng tăng số lượng tài nguyên như Client và Server khi cần thiết Việc mở rộng kích thước Server có thể thực hiện một cách dễ dàng mà không gây gián đoạn lớn cho hệ thống.
Hình 8 Mô hình mạng Client server
Tất cả khách hàng, không phân biệt vị trí hay nền tảng, đều có thể dễ dàng đăng nhập vào hệ thống Điều này cho phép mọi nhân viên truy cập thông tin công ty của họ một cách thuận tiện, mà không cần sử dụng terminal mode hay bộ xử lý phức tạp.
Một trong những nhược điểm lớn nhất của mô hình mạng Client-Server là tắc nghẽn lưu lượng khi có quá nhiều Client gửi yêu cầu đến cùng một Server Tình trạng này không chỉ làm chậm kết nối mà còn có thể dẫn đến việc Server bị crash Khi một Server bị quá tải, việc truy cập thông tin sẽ gặp nhiều khó khăn và gây ra nhiều vấn đề cho người dùng.
Mạng Client Server là mạng tập trung, vì vậy khi Server chính gặp sự cố hoặc bị nhiễu, toàn bộ hệ thống sẽ bị gián đoạn Điều này dẫn đến việc các mạng Client Server thiếu tính ổn định và độ bền.
Chi phí thiết lập và bảo trì server trong các mạng client server thường khá cao.
Vì các hệ thống mạng có sức mạnh lớn có thể có giá rất đắt Do đó, không phải tất cả người dùng đều có thể chi trả được.
Khi các Server được triển khai, chúng hoạt động liên tục và cần được giám sát chặt chẽ Bất kỳ vấn đề nào phát sinh đều cần được giải quyết kịp thời Do đó, việc có một nhà quản lý mạng chuyên biệt là rất quan trọng để duy trì hiệu suất hoạt động của Server.
Các giao thức mạng phổ biến
Giao thức Điều khiển Truyền tải (TCP) là một giao thức mạng quan trọng ở tầng vận chuyển, đảm bảo kết nối đáng tin cậy giữa các thiết bị TCP sử dụng gói tin được đánh số để đảm bảo rằng dữ liệu được truyền đi một cách nguyên vẹn và không bị trùng lặp.
TCP có ba thành phần chính:
Segment là đơn vị dữ liệu nhỏ nhất được truyền qua mạng, bao gồm các trường quan trọng như số thứ tự, số kiểm tra, và địa chỉ nguồn cùng đích.
Socket: Là một điểm kết nối giữa hai thiết bị Mỗi socket có một địa chỉ
Socket API: Là một tập hợp các hàm và thủ tục cung cấp giao diện cho các ứng dụng để sử dụng TCP.
TCP được sử dụng trong nhiều ứng dụng, bao gồm:
Giao thức Internet Protocol (IP) là một thành phần quan trọng trong mạng máy tính, cung cấp địa chỉ cho các thiết bị kết nối IP sử dụng địa chỉ IP để xác định vị trí của thiết bị và thực hiện việc định tuyến dữ liệu đến đúng đích một cách hiệu quả.
IP có hai loại địa chỉ:
Địa chỉ IPv4: Là địa chỉ 32 bit được biểu diễn dưới dạng bốn số thập phân được phân tách bằng dấu chấm.
Địa chỉ IPv6: Là địa chỉ 128 bit được biểu diễn dưới dạng một chuỗi 16 chữ số thập lục phân được phân tách bằng dấu hai chấm.
IP sử dụng một số thuật toán để định tuyến dữ liệu, bao gồm:
Định tuyến tĩnh: Là định tuyến được cấu hình thủ công bởi người quản trị mạng.
Định tuyến động: Là định tuyến được tự động tính toán bởi các router.
IP là một giao thức cơ bản của Internet và được sử dụng trong nhiều ứng dụng, bao gồm:
Giao thức Truyền tải Siêu văn bản (HTTP) là một giao thức mạng ứng dụng quan trọng, cho phép truyền tải dữ liệu siêu văn bản như trang web HTTP hoạt động thông qua cơ chế yêu cầu và phản hồi giữa máy khách và máy chủ, với hai phiên bản chính được sử dụng rộng rãi.
HTTP 1.1: Là phiên bản hiện tại của HTTP.
HTTP 2.0: Là phiên bản mới hơn của HTTP cung cấp hiệu suất tốt hơn. HTTP được sử dụng trong các ứng dụng, bao gồm:
Giao thức Chuyển File (FTP) là một giao thức mạng ở tầng ứng dụng, cho phép truyền tải tập tin giữa các máy tính FTP hoạt động thông qua việc sử dụng các lệnh để thiết lập giao tiếp giữa máy khách và máy chủ.
FTP có hai chế độ hoạt động:
Chế độ thụ động: Máy khách yêu cầu máy chủ mở một kết nối TCP để nhận dữ liệu.
Chế độ chủ động: Máy khách mở một kết nối TCP để gửi dữ liệu. FTP được sử dụng trong các ứng dụng, bao gồm:
The Simple Mail Transfer Protocol (SMTP) is an application layer network protocol utilized for sending and receiving emails It facilitates communication between email servers through the use of commands.
SMTP có hai chế độ hoạt động:
Chế độ giao tiếp trực tiếp: Máy khách và máy chủ email trực tiếp giao tiếp với nhau.
Chế độ giao tiếp qua proxy: Máy khách email giao tiếp với một máy chủ proxy, sau đó máy chủ proxy giao tiếp với máy chủ email.
SMTP được sử dụng trong các ứng dụng, bao gồm:
Hệ thống phân tán [5]
1.4.1 Hệ thống phân tán là gì?
Hệ thống phân tán là môi trường tính toán nơi các thành phần được phân bố trên nhiều máy tính hoặc thiết bị trong cùng một mạng Các thiết bị này hợp tác và chia sẻ công việc, giúp hoàn thành nhiệm vụ hiệu quả hơn so với việc chỉ một thiết bị đảm nhận toàn bộ công việc.
Hệ thống phân tán đánh dấu một bước tiến quan trọng trong ngành IT và khoa học máy tính, đáp ứng nhu cầu xử lý các công việc lớn và phức tạp mà một máy tính đơn lẻ không thể đảm nhiệm Điện toán phân tán không chỉ giải quyết vấn đề này mà còn mang lại nhiều lợi thế vượt trội so với các mô hình điện toán truyền thống.
Hiện nay, hệ thống phân tán chủ yếu hoạt động qua Internet và đám mây Chúng bắt đầu với một nhiệm vụ cụ thể, sau đó ứng dụng web hoặc các ứng dụng phân tán sẽ chia nhỏ công việc thành nhiều phần để quản lý hiệu quả hơn.
Thuật toán chia video thành các phần nhỏ để các máy tính khác nhau có thể xử lý đồng thời Khi một phần hoàn thành, ứng dụng quản lý sẽ gửi phần tiếp theo để tiếp tục quá trình Quá trình này diễn ra liên tục cho đến khi video hoàn chỉnh và tất cả các phần được kết hợp lại.
Hệ thống phân tán cho phép chia sẻ công việc và phân bổ cho hàng trăm hoặc hàng nghìn máy tính, giúp rút ngắn thời gian xử lý từ nhiều ngày xuống chỉ còn vài phút.
Hình 11 Cách thức hoạt động của hệ thống phân tán
Hiện nay, có nhiều mô hình và kiến trúc hệ thống phân tán đang được áp dụng Trong số đó, hệ thống máy khách và máy chủ được xem là hình thức phân tán cơ bản nhất.
Nó bao gồm nhiều máy tính kết nối mạng tương tác với một máy chủ trung tâm để lưu trữ, xử lý dữ liệu.
Mạng điện thoại di động là một hệ thống phân tán tiên tiến, cho phép chia sẻ khối lượng công việc giữa các thiết bị cầm tay, hệ thống chuyển mạch và các thiết bị Internet Một ví dụ điển hình khác về kiến trúc phân tán là mạng ngang hàng (Peer-to-peer), trong đó khối lượng công việc được phân phối giữa hàng trăm hoặc hàng nghìn máy tính sử dụng cùng một phần mềm.
Hiện nay, hệ thống phân tán phổ biến nhất trong doanh nghiệp là các hệ thống hoạt động qua Web, cho phép chuyển giao khối lượng công việc tới nhiều máy chủ ảo trên nền tảng đám mây Những máy chủ này được tạo ra và tự động kết thúc khi nhiệm vụ hoàn thành.
Hệ thống phân tán là giải pháp lý tưởng cho khối lượng công việc lớn mà một máy tính đơn lẻ không thể xử lý Chúng cũng rất hữu ích trong các tình huống với lưu lượng công việc thay đổi, như trong thương mại điện tử Hiện nay, hầu hết các ứng dụng web kết nối Internet đều được phát triển dựa trên các hệ thống phân tán.
1.4.3 Đặc điểm của hệ thống phân tán
Hệ thống phân tán bao gồm các đặc điểm và tính năng chính sau:
Khả năng mở rộng của hệ thống phân tán cho phép tăng cường hiệu suất khi khối lượng công việc gia tăng, bằng cách bổ sung các đơn vị xử lý hoặc máy tính vào mạng để đáp ứng nhu cầu xử lý công việc hiệu quả hơn.
Hệ thống phân tán hoạt động với các thành phần xử lý đồng thời, không theo thứ tự nhất định và với tốc độ khác nhau Đặc điểm nổi bật của chúng là không có đồng hồ toàn cầu, dẫn đến sự không đồng bộ trong việc thực hiện các nhiệm vụ.
Tính khả dụng và khả năng kháng lỗi là yếu tố quan trọng trong hệ thống máy tính, cho phép các nút còn lại tiếp tục hoạt động bình thường ngay cả khi một nút gặp sự cố Điều này đảm bảo rằng quá trình chung không bị gián đoạn, tăng cường độ tin cậy và hiệu suất của hệ thống.
Hệ thống phân tán mang lại tính minh bạch cao, giúp người sử dụng tương tác dễ dàng với thiết bị mà không cần phải lo lắng về cấu trúc phức tạp của toàn bộ hệ thống.
Trong các hệ thống phân tán, tính không đồng nhất giữa các nút và thành phần do sự khác biệt về phần cứng, phần mềm trung gian và hệ điều hành thường gặp Điều này cho phép các hệ thống phân tán có khả năng mở rộng linh hoạt khi bổ sung các thành phần mới.
Hệ thống phân tán mang lại khả năng nhân rộng thông tin, đảm bảo tính nhất quán giữa các tài nguyên dự phòng, bao gồm cả phần cứng và phần mềm.
1.4.4 Lý do nên sử dụng hệ thống phân tán
Hệ thống phân tán cung cấp một số ưu điểm so với hệ thống đơn lẻ như sau :
Sơ lược về Java Remote Method Interface
Java là ngôn ngữ lập trình mạnh mẽ và phổ biến, đặc biệt trong lập trình mạng Phát triển bởi Sun Microsystems và hiện thuộc sở hữu của Oracle Corporation, Java được thiết kế với tính đa nền tảng, giúp đảm bảo tính di động và bảo mật cao Nhờ đó, ứng dụng Java có thể chạy trên nhiều hệ điều hành và thiết bị khác nhau mà không cần viết lại mã nguồn.
Java trong lập trình mạng bao gồm các khía cạnh quan trọng như lập trình socket, với các lớp và giao diện hỗ trợ phát triển ứng dụng theo mô hình client-server Các lớp Socket và ServerSocket cho phép thiết lập kết nối và truyền nhận dữ liệu qua giao thức TCP/IP.
Java Network API là một giao diện lập trình ứng dụng mạnh mẽ, cho phép xây dựng các ứng dụng mạng phức tạp API này cung cấp các lớp và giao diện hỗ trợ nhiều giao thức mạng như HTTP, FTP, SMTP, POP3, cùng với nhiều giao thức khác.
RMI (Remote Method Invocation) là một cơ chế trong Java cho phép gọi phương thức từ xa, tạo điều kiện cho việc giao tiếp giữa các ứng dụng trên các máy tính khác nhau qua mạng Cơ chế serialization được sử dụng để truyền tải các đối tượng giữa các ứng dụng, giúp nâng cao khả năng tương tác và chia sẻ dữ liệu.
Java NIO (New I/O) là một phần mở rộng của Java I/O API, mang đến cách tiếp cận mới cho lập trình mạng hiệu suất cao thông qua việc sử dụng I/O không chặn và bộ đệm Điều này cho phép xử lý đa luồng và đồng thời nhiều kết nối mạng mà không cần tạo một luồng mới cho mỗi kết nối Ngoài ra, Java cũng cung cấp các lớp như Socket, ServerSocket, DatagramSocket và URL để xây dựng các ứng dụng mạng, cho phép gửi và nhận dữ liệu qua giao thức TCP/IP hoặc UDP.
Java cung cấp nhiều thư viện và framework mạng nổi bật như Apache HttpClient, Netty, Spring Framework và Java EE (Enterprise Edition) nhằm hỗ trợ phát triển ứng dụng mạng phức tạp Những công cụ và tiện ích này giúp xử lý mạng, giao tiếp hiệu quả và xây dựng các ứng dụng phân tán một cách dễ dàng.
Java là ngôn ngữ lập trình mạnh mẽ và linh hoạt, lý tưởng cho phát triển ứng dụng mạng Nhờ vào sự hỗ trợ từ các thư viện và framework mạng, Java là lựa chọn đáng cân nhắc cho việc xây dựng ứng dụng mạng, từ đơn giản đến phức tạp.
RMI (Remote Method Invocation) là một API trong Java, cho phép phát triển ứng dụng phân tán Nó cho phép các đối tượng gọi phương thức trên các đối tượng khác đang hoạt động trên các máy ảo Java khác nhau (JVM).
RMI chung cấp giao tiếp từ xa giữa các ứng dụng sử dụng hai đối tượng stub và skeleton.
Stub là một đối tượng hoạt động như cổng kết nối ở phía máy khách, nơi tất cả các yêu cầu gửi đi được chuyển qua Nó tồn tại tại phía Client và đại diện cho đối tượng từ xa Khi người gọi thực hiện phương thức trên đối tượng stub, nó sẽ xử lý các công việc cần thiết để thực hiện yêu cầu.
Khởi tạo kết nối với máy ảo từ xa (JVM)
Ghi và truyền các tham số tới máy ảo từ xa (JVM)
Đợi kết quả trả về
Đọc giá trị trả về hoặc các ngoại lệ (exception)
Cuối cùng, trả về giá trị cho người gọi.
Skeleton là một đối tượng hoạt động như cổng kết nối cho các đối tượng phía máy chủ, chuyển tiếp tất cả các yêu cầu đến Khi nhận được yêu cầu, skeleton sẽ thực hiện các công việc cần thiết để xử lý thông tin.
Đọc các tham số cho phương thức remote
Goi phương thức trên đối tượng remote thực tế
Viết và truyền kết quả tới người gọi. Để viết một ứng dụng với Java RMI, chúng ta cần phải theo các bước sau:
Định nghĩa một lớp giao diện (Remote Interface)
Triển khai lớp thực thi của lớp giao diện (remote object)
Viết code cho chương trình chạy ở Server
Viết code cho chương trình chạy ở Client
Hình 12 Cách xử lý và giao tiếp diễn ra trong RMI
Sơ lược về hệ quản trị cơ sở dữ liệu MySQL Server
1.6.1 Tổng quan về MySQL Server
MySQL Server là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở, nổi bật và mạnh mẽ, được phát triển bởi Oracle Corporation Hệ thống này cung cấp nhiều tính năng quản lý cơ sở dữ liệu, bao gồm lưu trữ, truy vấn và xử lý dữ liệu hiệu quả.
1.6.2.1 Giới thiệu Mysql Replication Để mở rộng một hệ thống cũng như để đảm bảo một cơ sở dữ liệu toàn vẹn, không bị mất mát trước những sự cố ta có hai phương pháp là Scale up và Scale out, trong đó:
Scale up là với một máy chủ ta tìm cách để nó có thể đáp ứng nhiều hơn số lượng kết nối, truy vấn Ví dụ:
Tăng phần cứng lên cho máy chủ
Optimize các phần mềm, ứng dụng giúp tăng tốc độ truy vấn lấy, nhập dữ liệu.
Scale out là giải pháp tăng số lượng server hoặc dùng các giải pháp load- balancer để phân phối các kết nối, truy vấn ra nhiều server.
Mysql Replication là một giải pháp scale out, có thể dùng trong các trường hợp sau:
Trường hợp các ứng dụng mà có số truy vấn đọc dữ liệu nhiều hơn ghi ( ví dụ như các trang báo, trang tin tức ).
Trường hợp cần backup real-time.
MySQL Replication là tính năng trong MySQL Server cho phép sao chép và đồng bộ dữ liệu từ cơ sở dữ liệu chính (master) sang một hoặc nhiều cơ sở dữ liệu phụ (slaves) Tính năng này tạo ra hệ thống sao chép dữ liệu, giúp các bản sao cơ sở dữ liệu được sử dụng cho mục đích sao lưu, đọc dữ liệu, phân tải và khôi phục dữ liệu hiệu quả.
Dưới đây là một tổng quan về MySQL Replication:
MySQL Replication hoạt động theo mô hình master-slave, trong đó cơ sở dữ liệu master ghi các thay đổi vào log nhị phân Các cơ sở dữ liệu slave sẽ đọc log này và áp dụng các thay đổi, đảm bảo dữ liệu được sao chép đồng bộ từ master sang slaves.
MySQL Replication hoạt động theo mô hình bất đồng bộ, cho phép các thay đổi trên master được ghi vào log và truyền đến các slaves Điều này dẫn đến khả năng dữ liệu trên slaves có thể chậm hơn so với master, nhưng đồng thời cung cấp khả năng chịu tải tốt và giảm thiểu ảnh hưởng đến hiệu suất của master.
Khi các slaves áp dụng thay đổi từ master, dữ liệu trên các slaves sẽ được đồng bộ hóa với dữ liệu trên master Điều này đảm bảo rằng các slaves có bản sao chính xác của dữ liệu từ master, phục vụ cho mục đích sao lưu hoặc đọc dữ liệu.
MySQL Replication hỗ trợ khả năng phân tải và mở rộng hệ thống hiệu quả thông qua việc chia sẻ công việc đọc dữ liệu giữa các máy chủ slave Bằng cách cấu hình ứng dụng để truy vấn dữ liệu từ các slave, bạn có thể phân phối tải đều trên nhiều máy chủ, từ đó nâng cao khả năng mở rộng của hệ thống.
Sao lưu dữ liệu với MySQL Replication có thể thực hiện thông qua một slave, giúp đảm bảo quá trình sao lưu không làm gián đoạn hoạt động của master và các slave khác Bằng cách dừng slave và tiến hành sao lưu từ đó, bạn sẽ có một bản sao lưu an toàn và hiệu quả.
MySQL Replication là tính năng quan trọng trong MySQL Server, cho phép sao chép và đồng bộ dữ liệu một cách linh hoạt và tin cậy Tính năng này hỗ trợ sao lưu, đọc dữ liệu và phân tải, giúp xây dựng hệ thống cơ sở dữ liệu mở rộng và bảo mật.
1.6.2.2 Hoạt động của Mysql Replication
Có 2 giải pháp cho việc replication:
Master - Slave: Là dạng replication trong đó data được ghi trên Master server và đồng bộ sang Slave server
Master - Master: Là dạng replication trong đó dữ liệu có thể ghi trên cả các Mysql server chạy replication.
Trong mô hình Master-Slave, có một cơ sở dữ liệu Master chuyên ghi dữ liệu và một hoặc nhiều cơ sở dữ liệu Slave Các ứng dụng kết nối cả vào Master và Slave, trong đó tác vụ ghi dữ liệu hướng tới Master, còn tác vụ đọc dữ liệu hướng tới Slave Khi có thay đổi trên máy chủ Master, thay đổi này được lưu vào binlog, và máy chủ Slave sẽ đọc binlog để ghi lại thông tin vào relay log, từ đó cập nhật dữ liệu.
Trong mô hình Master-Master, toàn bộ dữ liệu được lưu trữ trên một nhóm máy chủ, với khả năng cập nhật từ bất kỳ máy chủ Master nào trong nhóm Tất cả các máy chủ Master đều có trách nhiệm phản hồi các truy vấn dữ liệu của người dùng và đồng bộ hóa, cập nhật những thay đổi dữ liệu từ các máy chủ Master khác trong nhóm.
PHÂN TÍCH THIẾT KẾ HỆ THỐNG
Tổng quan về bài toán “Quản lý thư viện”
Hiện nay, công nghệ chưa được áp dụng rộng rãi trong quản lý thư viện, khiến nhiều thư viện vẫn sử dụng phương pháp truyền thống như ghi chép tay và hệ thống thẻ thư viện Những phương pháp này không chỉ tốn thời gian mà còn dễ dẫn đến sai sót và gặp khó khăn trong việc tìm kiếm thông tin.
Một giải pháp hiệu quả cho việc quản lý thư viện là phát triển một ứng dụng sử dụng công nghệ thông tin, giúp nâng cao tính nhanh chóng, đáng tin cậy và hiệu quả Ứng dụng này sẽ tích hợp các tính năng quản lý sách, quản lý khách hàng, quản lý thông báo, quản lý mượn/trả sách, cùng với thống kê sách quá hạn và xử lý phạt nếu cần thiết.
Phân tích và xác định yêu cầu hệ thống
2.2.1 Xác định mục tiêu và phạm vi của hệ thống
Mục tiêu của hệ thống là phát triển một ứng dụng quản lý thư viện hiệu quả, nhằm tối ưu hóa việc quản lý các hoạt động của thư viện một cách thuận tiện và hiệu quả.
Hệ thống quản lý thư viện sẽ được triển khai để phục vụ cho các đối tượng như trường học, cơ quan, tổ chức và bất kỳ đơn vị nào có nhu cầu quản lý tài liệu sách hiệu quả.
2.2.2 Xác định tác nhân và thu thập yêu cầu
Thủ thư hoặc người quản lý thư viện là tác nhân chính trong hệ thống, có quyền truy cập và quản lý thông tin liên quan đến sách, khách hàng, thông báo, quy trình mượn/trả sách và thống kê.
Sinh viên và người mượn sách là một trong những tác nhân quan trọng trong hệ thống thư viện Họ có quyền đăng nhập và được quản lý bởi thủ thư, người có trách nhiệm quản lý thông tin cá nhân và quyền mượn, trả sách Ngoài ra, họ cũng nhận thông báo từ thủ thư để cập nhật thông tin cần thiết.
Hệ thống sẽ cung cấp các chức năng sau:
Quản lý sách: thêm, sửa, xóa sách, cập nhật thông tin sách, tìm kiếm sách.
Quản lý khách hàng: thêm, sửa, xóa khách hàng, cập nhật thông tin khách hàng, tìm kiếm khách hàng.
Quản lý thông báo: gửi thông báo đến khách hàng về các sự kiện, tin tức liên quan đến thư viện.
Quản lý mượn/trả sách: ghi nhận việc mượn và trả sách, kiểm tra sách quá hạn, tính phạt nếu có.
Thống kê: cung cấp thống kê về sách quá hạn, sách mượn nhiều nhất, sách được yêu thích, v.v.
2.2.2.3 Yêu cầu phi chức năng
Các yêu cầu phi chức năng của hệ thống bao gồm:
Giao diện đẹp, thân thiện người dùng và dễ sử dụng.
Hiệu năng cao: hệ thống phải đáp ứng được số lượng lớn người dùng và xử lý các hoạt động quản lý một cách nhanh chóng.
Độ tin cậy: hệ thống phải đảm bảo tính chính xác và đáng tin cậy của dữ liệu, tránh mất mát thông tin quan trọng.
Hệ thống cần đảm bảo an toàn cho thông tin cá nhân của khách hàng và giới hạn quyền truy cập vào các chức năng quản lý chỉ cho những người có thẩm quyền.
Dễ dàng bảo trì và mở rộng: hệ thống cần có cấu trúc modular, cho phép dễ dàng bảo trì, nâng cấp và mở rộng trong tương lai.
2.2.3 Biểu đồ use-case tổng quát
Hình 15 Biểu đồ use-case tổng quát
2.2.4.1 Use-case Quản lí sách
Use Case Name: Quản lí sách
Use Case Description: Use Case này mô tả quá trình quản lí sách trong hệ thống. Actor: Quản lí
Quản lý có thể thực hiện các hoạt động liên quan đến quản lý sách trong hệ thống sau khi đã đăng nhập và có quyền truy cập vào chức năng này.
Post-Condition: Các hoạt động quản lí sách được thực hiện thành công và thông tin sách được cập nhật trong hệ thống.
Quản lí chọn chức năng quản lí sách trong hệ thống.
Hệ thống hiển thị danh sách sách hiện có trong cơ sở dữ liệu.
Quản lí có thể tìm kiếm sách theo tiêu đề, tác giả, danh mục, hoặc nhà xuất bản.
Quản lý có khả năng thêm sách mới vào cơ sở dữ liệu bằng cách cung cấp các thông tin cần thiết như tiêu đề, tác giả, danh mục, nhà xuất bản và năm xuất bản.
Quản lí có thể chỉnh sửa thông tin của một quyển sách trong cơ sở dữ liệu.
Quản lí có thể xóa sách khỏi cơ sở dữ liệu.
Quản lý có thể truy cập thông tin chi tiết về một quyển sách, bao gồm tiêu đề, tác giả, danh mục, nhà xuất bản và số lượng sách còn lại.
Quản lí có thể xem danh sách các quyển sách đang được mượn và thông tin về người mượn.
Quản lí có thể tạo thông báo cho người mượn sách.
Trong bước 3, nếu không có sách phù hợp với tiêu chí tìm kiếm, hệ thống hiển thị thông báo không tìm thấy kết quả.
Trong bước 4, nếu quản lí không cung cấp đầy đủ thông tin cần thiết, hệ thống hiển thị thông báo lỗi và yêu cầu nhập đủ thông tin.
Trong bước 6, nếu quản lí không có quyền chỉnh sửa sách hoặc sách không tồn tại trong cơ sở dữ liệu, hệ thống hiển thị thông báo lỗi.
Trong bước 8, nếu không có quyển sách nào đang được mượn, hệ thống hiển thị thông báo không có dữ liệu.
Trong bước 1, nếu quản lí chưa đăng nhập vào hệ thống, hệ thống yêu cầu quản lí đăng nhập trước khi thực hiện chức năng quản lí sách.
Trong bước 2, nếu không có kết nối đến cơ sở dữ liệu, hệ thống hiển thị thông báo lỗi kết nối.
Trong bước 4, nếu thông tin sách nhập vào không hợp lệ, ví dụ như trùng lặp tiêu đề sách, hệ thống hiển thị thông báo lỗi.
Trong bước 6, nếu không có quyền xóa sách hoặc sách không tồn tại trong cơ sở dữ liệu, hệ thống hiển thị thông báo lỗi.
Trong bước 7, nếu hệ thống không tìm thấy thông tin chi tiết về sách hoặc sách không có trong cơ sở dữ liệu, sẽ hiển thị thông báo cho biết không có dữ liệu.
Trong bước 9, nếu không thành công trong việc gửi thông báo cho người mượn, hệ thống hiển thị thông báo lỗi.
2.2.4.2 Use-case Quản lí tác giả
Use Case Name: Quản lí tác giả (UC02)
Use Case Description: Use Case này mô tả quá trình quản lí tác giả trong hệ thống.
Quản lý có thể thực hiện các hoạt động quản lý tác giả trong hệ thống sau khi đã đăng nhập và có quyền truy cập vào chức năng này.
Post-Condition: Các hoạt động quản lí tác giả được thực hiện thành công và thông tin tác giả được cập nhật trong hệ thống.
Quản lí chọn chức năng quản lí tác giả trong hệ thống.
Hệ thống hiển thị danh sách tác giả hiện có trong cơ sở dữ liệu.
Quản lí có thể tìm kiếm tác giả theo tên hoặc thông tin khác.
Quản lí có thể thêm tác giả mới vào cơ sở dữ liệu bằng cách cung cấp thông tin như tên, quốc tịch, ngày sinh và tiểu sử.
Quản lí có thể chỉnh sửa thông tin của một tác giả trong cơ sở dữ liệu.
Quản lí có thể xóa tác giả khỏi cơ sở dữ liệu.
Nếu không có tác giả nào trong cơ sở dữ liệu, hệ thống sẽ hiển thị thông báo rỗng và không cho phép người dùng thực hiện các thao tác tìm kiếm, chỉnh sửa hoặc xóa tác giả.
Nếu thông tin khi thêm tác giả mới không hợp lệ, hệ thống sẽ hiển thị thông báo lỗi và yêu cầu quản lý cung cấp thông tin chính xác Quản lý có thể chỉnh sửa thông tin và tiếp tục quy trình thêm tác giả mới.
Nếu hệ thống không tìm thấy tác giả theo yêu cầu tìm kiếm, sẽ hiển thị thông báo thông báo không có kết quả và yêu cầu quản lý cung cấp yêu cầu tìm kiếm khác.
Nếu không thể chỉnh sửa thông tin của tác giả, hệ thống sẽ hiển thị thông báo lỗi và yêu cầu người quản lý thử lại hoặc liên hệ với quản trị viên hệ thống.
Nếu không thể xóa tác giả khỏi cơ sở dữ liệu, hệ thống sẽ hiển thị thông báo lỗi và yêu cầu người quản lý thử lại hoặc liên hệ với người quản trị hệ thống để được hỗ trợ.
2.2.4.3 Use-case Quản lí nhà xuất bản
Use Case Name: Quản lí nhà xuất bản (UC09)
Use Case Description: Use Case này mô tả quá trình quản lí thông tin về nhà xuất bản trong hệ thống.
Trigger: Quản lí muốn thực hiện quản lí thông tin về nhà xuất bản trong hệ thống.
Pre-Condition: Quản lí đã đăng nhập vào hệ thống và có quyền truy cập vào chức năng quản lí nhà xuất bản.
Post-Condition: Quản lí cập nhật và quản lí thông tin về nhà xuất bản trong hệ thống.
1 Quản lí chọn chức năng quản lí nhà xuất bản trong hệ thống.
2 Hệ thống hiển thị danh sách nhà xuất bản hiện có trong hệ thống.
Thiết kế kiến trúc hệ thống
2.3.1 Kiến trúc tổng quan của hệ thống
Hệ thống quản lý thư viện áp dụng mô hình client-server với nhiều máy chủ kết nối đến các cơ sở dữ liệu riêng biệt Các máy chủ và cơ sở dữ liệu được phân phối trên mạng nội bộ nhằm tối ưu hóa hiệu suất và khả năng mở rộng của hệ thống.
Các thiết bị người dùng như máy tính cá nhân, máy tính xách tay, điện thoại thông minh và máy tính bảng có khả năng truy cập vào bất kỳ máy chủ nào Mỗi thiết bị client sẽ được cài đặt ứng dụng quản lý thư viện riêng, cho phép người dùng dễ dàng truy cập và sử dụng các chức năng quản lý của hệ thống qua giao diện người dùng thân thiện.
Mỗi máy chủ lưu trữ và xử lý dữ liệu trên cơ sở dữ liệu riêng, có thể được phân chia theo khu vực địa lý, chức năng hoặc yêu cầu hiệu suất Sự phân chia này giúp tối ưu hóa lưu trữ và truy xuất dữ liệu, đồng thời giảm thiểu tác động khi một máy chủ hoặc cơ sở dữ liệu gặp sự cố.
Cơ sở dữ liệu của máy chủ lưu trữ thông tin quan trọng về sách, tác giả, nhà xuất bản, danh mục, khách hàng, và các giao dịch mượn/trả sách Mỗi cơ sở dữ liệu cung cấp các bảng và mối quan hệ để quản lý dữ liệu hiệu quả, hỗ trợ truy vấn, cập nhật và thống kê thông tin liên quan đến thư viện.
Với kiến trúc này, người dùng dễ dàng truy cập vào bất kỳ máy chủ nào trong hệ thống thông qua ứng dụng quản lý thư viện trên thiết bị của họ Việc phân phối máy chủ và cơ sở dữ liệu trên mạng nội bộ giúp người dùng kết nối với máy chủ gần nhất về mặt vị trí hoặc máy chủ có hiệu suất phục vụ tốt nhất, từ đó đảm bảo tính nhất quán và hiệu suất cao trong truy xuất dữ liệu.
Hình 16 Kiến trúc tổng quan của hệ thống
2.3.2 Cài đặt và cấu hình hệ thống trong môi trường phát triển
2.3.2.1 Cách cấu hình project trên Jetbrain InteliJ
Tạo project Java (Maven) với 3 module con: API, Client và Server
Hình 17 Cấu trúc file của project
Hình 18 Cấu hình file pom.xml(RMI_Project)
Hình 19 Cấu hình file pom.xml(Client)
Hình 20 Cấu hình file pom.xml(Server)
2.3.2.2 Cách cài đặt và sử dụng Java RMI
Remote Interface là một định nghĩa cho các đối tượng có thể được gọi từ xa bởi Client Interface này cho phép kết nối với chương trình của Client và phải được thừa kế từ java.rmi.Remote.
Tạo một Class thừa kế từ java.rmi.server.UnicastRemoteObject và thực thi lớp Interface.
Lớp này sẽ triển khai Interface ở Module API
Hình 22 Module Server(LibraryImpl.java)
Để tạo một lớp chạy trên server với địa chỉ và tên dịch vụ, chương trình server được thiết lập bằng cách sử dụng phương thức java.rmi.Naming.rebind() Phương thức này yêu cầu hai đối số: tên dịch vụ và tham chiếu đến đối tượng thực thi.
Hình 23 Module Server(RMIServer.java)
To create a client-side class that connects to a server, you need to specify the server's address and the service name The client program will invoke the method `java.rmi.Naming.lookup()` using the RMI URL, which will return an instance of the interface type (Factorial) All RMI operations will be executed on this object.
Hình 24 Module Client (ManageController.java)
2.3.2.3 Cài đặt và cấu hình MySQL Replication
For security reasons, it is advisable to deploy the server on a Linux operating system Ensure that the server has MySQL installed by executing the command: sudo apt install -y mysql-server In this setup, we will implement MySQL replication in a Master-Master configuration, allowing data to be written on both MySQL servers participating in the replication.
Cấu hình Mysql Server tại server 1
Hình 26 Cấu hình Mysql Server tại server 1
Cấu hình Mysql Server tại server 2
Hình 27 Cấu hình Mysql Server tại server 2
Cấu hình ngược lại để tạo thành dạng Master – Master
Cách cấu hình như cấu hình tại 2 server trên, đổi SOURCE_HOST,SOURCE_LOG_FILE, SOURCE_LOG_POS.
Thiết kế cơ sở dữ liệu
Quá trình thiết kế luôn bắt đầu bằng việc thu thập các yêu cầu Hệ thống thư viện của chúng tôi sẽ có các tính năng sau:
Danh mục sách cho phép người dùng tìm kiếm theo tên, tác giả và thể loại Lưu ý rằng mỗi cuốn sách có thể có nhiều bản sao và có thể được xuất bản bởi nhiều nhà xuất bản khác nhau.
Khả năng vô hiệu hóa tài khoản của người khách nếu họ không trả lại sách sau một khoảng thời gian cụ thể.
Hồ sơ về các cuốn sách đã được mượn và những cuốn sách được giữ lại (đặt trước) nhằm đảm bảo rằng chúng sẽ có sẵn khi khách đến thư viện.
Thông báo khi có cuốn sách mong muốn và lời nhắc rằng cuốn sách sẽ được trả lại thư viện, cả qua email.
Sách là thành phần quan trọng trong hệ thống thư viện, vì vậy cơ sở dữ liệu của chúng tôi cần bao gồm thông tin về sách và tác giả Để tổ chức thông tin một cách hiệu quả, chúng tôi sẽ tạo ra hai bảng riêng biệt: một bảng cho sách và một bảng cho tác giả.
Một cuốn sách có thể được viết bởi nhiều tác giả, và một tác giả có thể sáng tác nhiều cuốn sách, tạo thành mối quan hệ nhiều-nhiều giữa sách và tác giả Để kết nối thông tin này, chúng ta cần một bảng bổ sung mang tên book_author.
Trong cơ sở dữ liệu, mỗi bảng cần có các cột để lưu trữ thông tin Bảng sách sẽ bao gồm các cột như tiêu đề, tên tác giả và một khóa chính để xác định duy nhất từng hàng, thường là cột id.
id: mã định danh duy nhất và khóa chính.
title: tựa đề của cuốn sách.
Bảng Authors sẽ có các cột sau:
id: mã định danh duy nhất và khóa chính.
Bảng Book_author sẽ có các cột sau:
book_id: id của cuốn sách.
Author_id: id của tác giả.
Hình 28 Bảng Books và Authors
Trong thư viện của chúng tôi, mỗi cuốn sách được phân loại theo danh mục cụ thể Một cuốn sách chỉ có thể thuộc về một danh mục duy nhất, chẳng hạn như "Phiêu lưu" hoặc "Lãng mạn".
Chúng tôi tạo một bảng Categoies Bảng này chỉ cần hai cột:
id: mã định danh hàng duy nhất và khóa chính.
name: tên của danh mục, ví dụ: "Phiêu lưu".
Chúng ta cần liên kết bảng sách với bảng danh mục thông qua cột Category_id (khóa ngoại) trong mỗi cuốn sách, giúp xác định danh mục mà nó thuộc về Mối quan hệ giữa bảng sách và bảng danh mục là một-nhiều.
2.4.4 Bảng Book Copies và Published
Thư viện của chúng tôi có thể lưu trữ nhiều bản sao của một cuốn sách, và một cuốn sách có thể được xuất bản bởi nhiều nhà xuất bản khác nhau Để quản lý thông tin này, chúng tôi đã tạo ra hai bảng dữ liệu: book_copy và published.
Bảng Published đại diện cho nhà xuất bản của cuốn sách Nó bao gồm hai cột:
id: mã định danh hàng duy nhất và khóa chính.
name: tên nhà xuất bản.
Bảng book_copy có các cột sau:
id: mã định danh hàng duy nhất và khóa chính.
year_published: năm xuất bản cuốn sách.
book_id: khóa ngoại trỏ tới hàng tương ứng trong sách
published_id: khóa ngoại, id của nhà xuất bản sách trong bảng nhà xuất bản.
Hình 30 Bảng Book Copies và Published
Chúng tôi đã hoàn thành phần sách và rất mong nhận được sự quan tâm từ mọi người Để phục vụ tốt hơn, chúng tôi cần thu thập thông tin của khách hàng quen thuộc tại thư viện, bao gồm tên, họ và email Mỗi thành viên sẽ có một thẻ thư viện riêng, cùng với một tài khoản có thể đang hoạt động hoặc bị khóa nếu sách được trả lại muộn.
Chúng tôi sẽ sử dụng một bảng để lưu trữ tất cả dữ liệu này: patron_account Nó bao gồm các cột sau:
card_number: số thẻ duy nhất; nó cũng là khóa chính.
first_name: tên của người khách.
last_name: họ của người khách.
email: email của người khách được sử dụng để gửi thông báo.
status: đang hoạt động hoặc bị chặn.
Hiện tại, bảng này chưa được kết nối với bất kỳ bảng nào khác.
Chúng tôi cần một phương pháp cho phép khách hàng kiểm tra hoặc đặt trước những cuốn sách cụ thể Để quản lý, chúng tôi sẽ lưu trữ hồ sơ thanh toán trong hai bảng: Checkouts và Holds Hãy cùng xem xét chi tiết từng bảng Bảng Checkout sẽ bao gồm các cột cần thiết để theo dõi thông tin.
id: mã định danh hàng duy nhất và khóa chính.
start_time: dấu thời gian khi sách được đọc.
end_time: dấu thời gian khi sách được trả lại.
book_copy_id: id của bản sách đã được kiểm tra.
patron_account_id: id của người khách đã xem sách.
is_returned: trường Boolean cho biết sách đã được trả lại thành công hay chưa.
Bảng Holds có các cột sau:
id: mã định danh hàng duy nhất và khóa chính.
start_time: dấu thời gian khi sách được đặt ở chế độ chờ.
end_time: dấu thời gian khi quá trình giữ kết thúc Đây là khi khoản giữ hết hạn hoặc khi sách đã được kiểm tra.
book_copy_id: id của bản sao sách đã được giữ.
patron_account_id: id của người khách đã đặt khoản giữ.
Lưu ý bảng giữ rất giống với bảng thanh toán Sự khác biệt chính là cờ is_returned không xuất hiện Tại sao vậy?
Chúng tôi cần một quy trình thanh toán hiệu quả để theo dõi tình trạng sách đã được trả lại hay chưa, đặc biệt là khi quá hạn Việc giữ sách đơn giản hơn, khi khách hàng tạm giữ cuốn sách đã kiểm tra, một mục thanh toán sẽ được tạo và thời gian giữ sẽ bắt đầu từ thời điểm thanh toán Nếu khách không kiểm tra sách đúng hạn, thời gian giữ sẽ tự động hết hạn mà không cần thêm thao tác nào khác.
Hình 32 Bảng Checkouts và Holds
Chúng tôi xin thông báo đến khách hàng quen rằng hãy nhớ trả lại cuốn sách đã mượn hoặc thông báo rằng cuốn sách mà họ đang chờ đợi đã có sẵn trong thư viện.
Chúng ta cần tạo thêm một bảng Notifications Bảng này sẽ bao gồm các cột sau:
id: mã định danh hàng duy nhất và khóa chính.
send_at: dấu thời gian khi thông báo được gửi.
Hiện tại, có thông báo nhắc nhở về việc trả lại sách hoặc thông báo về một cuốn sách cụ thể Trong tương lai, chúng ta có thể mong đợi nhiều lựa chọn hơn cho việc này.
patron-account-id: ID trỏ đến người bảo trợ sẽ được thông báo qua email.\
2.4.8 Sơ đồ quan hệ thực thể - (ERD – Entity Relationship Diagram)
Hình 34 Sơ đồ quan hệ thực thể - (ERD – Entity Relationship Diagram)
Thiết kế giao diện người dùng
Hình 36 Quản lí tác giả
2.5.1.3 Quản lí nhà xuất bản
Hình 37 Quản lí nhà xuất bản
Hình 38 Quản lí thể loại
2.5.1.5 Quản lí mượn/ trả sách
Hình 39 Quản lí mượn sách
Hình 40 Quản lí trả sách
Hình 41 Quản lí độc giả
Hình 42 Gửi thông báo cho độc giả
2.5.2 Giao diện khách hàng (độc giả)
Hình 43 Giao diện đăng nhập
Hình 44 Giao diện đăng kí
Hình 45 Giao diện trang chủ
Hình 46 Giao diện mượn sách
Hình 47 Giao diện trả sách
2.5.2.6 Cập nhật thông tin cá nhân
Hình 48 Giao diện cập nhật thông tin cá nhân
Sơ đồ hoạt động
Hình 49 Activity Diagram Mượn sách
Hình 50 Activity Diagram Trả sách
Hình 51 Activity Diagram Quản lí sách
Hình 52 Activity Diagram Quản lí mượn sách
Hình 53 Activity Diagram Quản lí trả sách
Hình 54 Activity Diagram Quản lí độc giả
Hình 55 Activity Diagram Quản lí thể loại
Hình 56 Activity Diagram Quản lí thể loại
2.6.9 Gửi và nhận thông báo
Hình 57 Activity Diagram Gửi và nhận thông báo
CHƯƠNG TRÌNH THỬ NGHIỆM
Cài đặt server
3.2.1 Cài đặt Mysql Server trên Ubuntu 20.04
1.1 Cập nhật kho lưu trữ:
Trước khi cài đặt MySQL, bạn cần cập nhật kho lưu trữ của hệ thống: sudo apt update
1.2 Cài đặt gói mysql-server:
Sử dụng lệnh sau để cài đặt MySQL: sudo apt install mysql-server
Sau khi cài đặt, kiểm tra trạng thái của MySQL bằng lệnh: sudo systemctl status mysql.service
Nếu MySQL đang hoạt động, bạn sẽ thấy dòng "Active: active (running)".
1.4 Bật MySQL tự động khởi động: Để MySQL tự động khởi động khi hệ thống khởi động, sử dụng lệnh: sudo systemctl enable mysql.service
After installation, you need to run the MySQL security script to set a password for the root account and configure other security settings by executing the command: sudo mysql_secure_installation.
2.2 Tạo tài khoản người dùng: Để đảm bảo an toàn, không nên sử dụng tài khoản root thường xuyên Thay vào đó, bạn nên tạo một tài khoản người dùng mới với quyền hạn hạn chế: sudo mysql -u root -p
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
2.3 Cấp quyền cho người dùng:
Cấp cho người dùng mới các quyền cần thiết để quản lý cơ sở dữ liệu:
GRANT CREATE, ALTER, DROP, INSERT, UPDATE, INDEX,
DELETE, SELECT, REFERENCES, RELOAD on TO
'username'@'localhost' WITH GRANT OPTION;
2.4 Kiểm tra kết nối: Để kiểm tra kết nối với MySQL using your new user, sử dụng lệnh: mysql -u username -p
2.5 (Tùy chọn) Cài đặt phpMyAdmin:
PhpMyAdmin là một giao diện web giúp quản lý cơ sở dữ liệu MySQL dễ dàng hơn Để cài đặt phpMyAdmin, sử dụng lệnh: sudo apt install phpmyadmin
3.2.1.3 Xác nhận cài đặt Để xác nhận rằng MySQL đã được cài đặt và cấu hình thành công, bạn có thể:
Truy cập phpMyAdmin trong trình duyệt web của bạn.
Sử dụng lệnh mysqladmin để thực hiện các tác vụ quản lý cơ sở dữ liệu. Lưu ý:
Bạn có thể cần thay đổi các lệnh dựa trên phiên bản MySQL và hệ điều hành của bạn.
Đảm bảo bạn đã chọn mật khẩu mạnh cho tài khoản root và tài khoản người dùng.
Tham khảo tài liệu chính thức của MySQL để biết thêm thông tin về cài đặt, cấu hình và sử dụng MySQL.
3.4 Thử nghiệm quản lí mượn sách
Bước 1: Độc giả đăng nhập vào hệ thống
Hình 58 Giao diện Độc giả đăng nhập vào hệ thống
Bước 2: Tìm kiếm sách mong muốn và nhấn nút Mượn sách
Hình 59 Giao diện Tìm kiếm sách mong muốn và nhấn nút Mượn sách
Bước 3: Quản lí nhận được yêu cầu mượn sách
Hình 60 Giao diện Quản lí nhận được yêu cầu mượn sách
Bước 4: Quản lí gửi thông báo phê duyệt cho độc giả
Hình 61 Giao diện Quản lí gửi thông báo phê duyệt cho độc giả
Hình 62 Giao diện nhận thông báo của độc giả
3.5 Thử nghiệm quản lí trả sách
Bước 1: Độc giả đăng nhập vào hệ thống
Hình 63 Giao diện Độc giả đăng nhập vào hệ thống
Bước 2: Sau khi chọn sách cần trả thì nhấn nút trả
Hình 64 Giao diện Sau khi chọn sách cần trả thì nhấn nút trả
Bước 4: Quản lí nhận được yêu cầu trả sách
Hình 65 Giao diện Quản lí nhận được yêu cầu trả sách
Bước 5: Quản lí gửi thông báo phê duyệt trả sách thành công cho độc giả
Hình 66 Giao diện Quản lí gửi thông báo phê duyệt trả sách thành công cho độc giả
Hình 67 Giao diện nhận thông báo của độc giả
Kết luận, đề tài "Quản lý thư viện phân tán sử dụng RMI" đã hoàn thành thành công, theo đúng kế hoạch và yêu cầu đề ra Hệ thống quản lý thư viện phân tán đã được triển khai hiệu quả và đáp ứng đầy đủ các yêu cầu đã xác định.
Hệ thống quản lý thư viện cung cấp đầy đủ các chức năng cần thiết, bao gồm quản lý sách, quản lý độc giả, quy trình mượn và trả sách, cũng như tính năng tìm kiếm sách và các thao tác quản lý khác, giúp nâng cao hiệu quả hoạt động của thư viện.
Hoạt động trên nhiều máy tính khác nhau, đảm bảo tính phân tán của hệ thống.
Đồng bộ dữ liệu giữa các cơ sở dữ liệu MySQL, đảm bảo tính nhất quán của dữ liệu.
Hiệu quả và linh hoạt trong sử dụng, đáp ứng được nhu cầu của người dùng.
Dựa trên kết quả đạt được, đề tài có thể tiếp tục phát triển theo các hướng sau:
Nâng cao hiệu suất của hệ thống: Có thể cải thiện hiệu suất của hệ thống bằng cách sử dụng các kỹ thuật như caching, load balancing,
Để nâng cao khả năng mở rộng của hệ thống, có thể áp dụng các kỹ thuật như clustering và điện toán đám mây Những phương pháp này giúp tối ưu hóa hiệu suất và đáp ứng nhanh chóng với nhu cầu tăng trưởng của người dùng.
Nâng cao tính bảo mật của hệ thống: Có thể nâng cao tính bảo mật của hệ thống bằng cách sử dụng các kỹ thuật như authentication, authorization, encryption,
Hệ thống có khả năng tích hợp thêm các tính năng mới như quản lý thẻ thư viện và theo dõi lịch sử mượn/trả sách, giúp nâng cao hiệu quả quản lý và trải nghiệm người dùng.
Cụ thể, có thể triển khai các hướng phát triển sau:
Nâng cao hiệu suất của hệ thống:
Sử dụng caching để lưu trữ các dữ liệu được truy cập thường xuyên, giúp giảm thiểu thời gian truy vấn cơ sở dữ liệu.
Sử dụng load balancing để phân bổ đồng đều các yêu cầu truy cập cho các máy chủ, giúp tăng cường khả năng chịu tải của hệ thống.
Tăng cường khả năng mở rộng của hệ thống:
Sử dụng clustering để kết nối nhiều máy chủ thành một nhóm, tạo thành một hệ thống có khả năng mở rộng cao.
Sử dụng cloud computing để triển khai hệ thống trên môi trường đám mây, giúp dễ dàng mở rộng hệ thống khi cần thiết.
Nâng cao tính bảo mật của hệ thống:
Sử dụng authentication để xác thực người dùng trước khi truy cập hệ thống.
Sử dụng authorization là cách hiệu quả để cấp quyền truy cập cho người dùng, đảm bảo rằng họ chỉ có thể truy cập vào các chức năng và dữ liệu mà mình được phép Điều này giúp bảo vệ thông tin nhạy cảm và nâng cao tính bảo mật cho hệ thống.
Sử dụng encryption để mã hóa dữ liệu, giúp bảo vệ dữ liệu khỏi bị truy cập trái phép.
Tích hợp thêm các tính năng mới:
Tính năng quản lý thẻ thư viện được tích hợp, cho phép người dùng dễ dàng quản lý thẻ thư viện của mình, bao gồm các chức năng như gia hạn thẻ và thay đổi thông tin thẻ.
Tính năng quản lý lịch sử mượn và trả sách được tích hợp, giúp người dùng dễ dàng theo dõi thông tin về các lần mượn và trả sách của mình, bao gồm thời gian mượn, thời gian trả và tình trạng của sách.
Triển khai các hướng phát triển này sẽ nâng cao hiệu quả của hệ thống quản lý thư viện phân tán, đáp ứng tốt hơn nhu cầu ngày càng cao của người dùng.