0

Apache Derby Bài 03: Phân biệt Embedded Mode (nhúng) và Network Server Mode (máy chủ mạng)

1. Bản chất hai mô hình vận hành

Apache Derby sở hữu hai cơ chế vận hành khác biệt về kiến trúc tiến trình và cách phân bổ tài nguyên bộ nhớ: Embedded Mode (Chế độ nhúng) và Network Server Mode (Chế độ máy chủ mạng).

Điểm mấu chốt quyết định sự khác nhau này là: Database Engine nằm cùng một tiến trình JVM với ứng dụng hay nằm ở một tiến trình JVM độc lập bên ngoài?

2. Kiến trúc & Cơ chế hoạt động

1. Embedded Mode (Chế độ nhúng)

Trong Embedded Mode, engine cơ sở dữ liệu không tồn tại dưới dạng một tiến trình (process) chạy nền riêng lẻ. Thay vào đó, toàn bộ mã nguồn xử lý SQL, quản lý bộ đệm và truy xuất tệp đĩa được nạp trực tiếp vào cùng không gian nhớ (Heap) của tiến trình ứng dụng Java.

+-----------------------------------------------------------+
|               JVM Ứng dụng (Single Process)               |
|                                                           |
|  [ Mã nguồn ứng dụng Java ]                               |
|              |                                            |
|              v (Gọi trực tiếp qua bộ nhớ / Direct Call)   |
|  [ JDBC Driver: org.apache.derby.jdbc.EmbeddedDriver ]    |
|              |                                            |
|              v                                            |
|  [ Derby Database Engine (Buffer, Lock, Parser) ]         |
+-----------------------------------------------------------+
                             |
                             v (I/O đĩa cục bộ)
          +--------------------------------------+
          |   Thư mục Database trên Filesystem   |
          |  (db.lck, log/, seg0/, service.prop) |
          +--------------------------------------+

  • Giao tiếp: Truyền dữ liệu qua phương thức gọi hàm trực tiếp của Java (in-process method calls), không mở cổng TCP/IP, không qua giao thức mạng.

  • Cơ chế khóa tiến trình (File Lock): Ngay khi JVM khởi tạo kết nối tới cơ sở dữ liệu, một tệp khóa mang tên db.lck được tạo ra trong thư mục database. Chỉ duy nhất một tiến trình JVM được phép đọc/ghi vào thư mục này tại một thời điểm. Bất kỳ tiến trình JVM nào khác cố mở database đó sẽ bị từ chối với lỗi khóa tệp (ERROR XJ040).

2. Network Server Mode (Chế độ máy chủ mạng)

Trong Network Server Mode, Derby được khởi chạy như một dịch vụ máy chủ độc lập (thông qua lệnh startNetworkServer hoặc API Java). Máy chủ này mở một cổng TCP socket (mặc định là 1527) và lắng nghe các kết nối từ xa.

+---------------------------+       +---------------------------+
|    Client App 1 (JVM)     |       |    Client App 2 (Web/API) |
| [ClientDriver / TCP Call] |       | [ClientDriver / TCP Call] |
+---------------------------+       +---------------------------+
              \                                   /
       DRDA Protocol (Cổng 1527)           DRDA Protocol (Cổng 1527)
                \                               /
                 v                             v
+---------------------------------------------------------------+
|               JVM Máy chủ Derby (Server Process)               |
|                                                               |
|  [ Network Server Controller / Socket Listener ]              |
|              |                                                |
|              v                                                |
|  [ Derby Engine Core ]                                        |
+---------------------------------------------------------------+
                             |
                             v (I/O đĩa duy nhất từ phía Server)
          +--------------------------------------+
          |   Thư mục Database trên Filesystem   |
          +--------------------------------------+

  • Giao tiếp: Sử dụng giao thức chuẩn công nghiệp DRDA (Distributed Relational Database Architecture) qua kết nối mạng TCP/IP.

  • Đa tiến trình truy cập: Vì chỉ có duy nhất tiến trình Network Server trực tiếp nắm giữ db.lck và thao tác với tệp đĩa, nhiều client từ nhiều máy trạm hoặc tiến trình JVM khác nhau có thể đồng thời gửi truy vấn tới server mà không bị xung đột khóa tệp.

3. Bảng đối chiếu kỹ thuật chi tiết

Tiêu chí Embedded Mode Network Server Mode
Tiến trình JVM Nằm chung trong tiến trình của Client Tách rời thành tiến trình JVM độc lập
Driver Class org.apache.derby.jdbc.EmbeddedDriver org.apache.derby.jdbc.ClientDriver
Thư viện JAR cần thiết derby.jar, derbyshared.jar Client cần: derbyclient.jar

Server cần: derbynet.jar, derby.jar
Định dạng JDBC URL jdbc:derby:ten_db;create=true jdbc:derby://localhost:1527/ten_db;create=true
Giao tiếp & Độ trễ Bộ nhớ nội bộ (In-Memory), độ trễ bằng 0 TCP Socket (DRDA), phát sinh network latency
Số tiến trình mở DB Duy nhất 1 tiến trình JVM Đa tiến trình (thông qua Server trung gian)
Số kết nối đồng thời Đa luồng (Multi-threading) trong cùng 1 JVM Đa luồng, đa máy khách kết nối từ xa
Dấu chân tài nguyên (RAM) Tối thiểu (chia sẻ chung bộ nhớ ứng dụng) Tốn thêm RAM để duy trì JVM cho server riêng
Tác vụ gỡ lỗi / Debug Không thể dùng công cụ GUI bên ngoài xem bảng khi app đang chạy Dễ dàng dùng DBeaver, DataGrip kết nối vào song song

4. Cách lựa chọn cấu hình phù hợp

Khi nào nên triển khai Embedded Mode?

  • Ứng dụng đóng gói một người dùng: Ứng dụng Desktop (Swing, JavaFX) chạy trực tiếp trên máy người dùng, nơi phần mềm cần tự động khởi tạo và lưu trữ cục bộ mà không đòi hỏi người dùng phải cấu hình hay bật bất kỳ service nền nào.

  • Công cụ CLI cục bộ: Các tool tiện ích dòng lệnh cần tra cứu nhanh dữ liệu metadata hoặc cấu hình ngoại tuyến.

  • Tối ưu tốc độ giao dịch nội bộ: Ứng dụng xử lý luồng ghi dữ liệu tốc độ cao tại biên (Edge Computing/IoT), không muốn tiêu hao chi phí đóng gói gói tin TCP/IP qua socket.

Khi nào nên triển khai Network Server Mode?

  • Môi trường phát triển & Gỡ lỗi (Dev/Debug): Bạn cần chạy ứng dụng Java và đồng thời mở DBeaver/IntelliJ Database Tools để quan sát biến động dữ liệu theo thời gian thực.

  • Kiến trúc đa dịch vụ: Khi nhiều microservices, worker background hoặc ứng dụng web cùng cần đọc/ghi chung một kho dữ liệu Derby.

  • Mô hình Client-Server truyền thống: Một máy tính đóng vai trò lưu trữ trung tâm trong mạng LAN cục bộ cho nhiều máy con kết nối vào xử lý công việc.

5. Tổng kết

  • Embedded Mode mang lại tốc độ vượt trội nhờ loại bỏ giao tiếp mạng, nhưng đánh đổi bằng việc giới hạn độc quyền truy cập trong đúng một tiến trình JVM.

  • Network Server Mode giải phóng cơ sở dữ liệu khỏi giới hạn đơn tiến trình, cho phép nhiều ứng dụng và công cụ giao diện đồ họa truy cập song song thông qua cổng 1527.

Bài tiếp theo sẽ đi vào thao tác thực tế: Apache Derby Bài 04: Hướng dẫn cài đặt JDK, Apache Derby và cấu hình biến môi trường DERBY_HOME.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí