Cấu hình FerretDB kết hợp PostgreSQL: Giải pháp chạy ứng dụng MongoDB không lo bản quyền thương mại
Giới thiệu xu hướng dịch chuyển từ MongoDB sang các giải pháp mã nguồn mở
Trong nhiều năm qua, MongoDB đã khẳng định vị thế là một trong những cơ sở dữ liệu NoSQL phổ biến nhất thế giới nhờ vào mô hình dữ liệu document linh hoạt và khả năng mở rộng mạnh mẽ. Tuy nhiên, bước ngoặt xảy ra vào năm 2018 khi MongoDB quyết định chuyển đổi giấy phép từ GNU AGPLv3 sang Server Side Public License (SSPL). Sự thay đổi này đồng nghĩa với việc các doanh nghiệp cung cấp dịch vụ quản lý MongoDB dưới dạng thương mại buộc phải mở mã nguồn của toàn bộ hạ tầng dịch vụ đi kèm.
Hệ quả là nhiều nhà cung cấp đám mây lớn và cộng đồng mã nguồn mở bắt đầu e ngại tính pháp lý của SSPL. Đối với các doanh nghiệp, việc phụ thuộc vào một công nghệ có bản quyền ngày càng thắt chặt mang lại rủi ro lớn về chi phí và tính tự chủ trong tương lai. Đây chính là lý do thúc đẩy sự ra đời của các giải pháp thay thế mã nguồn mở thực sự, trong đó nổi bật nhất là FerretDB kết hợp với sức mạnh lưu trữ bền vững của PostgreSQL.
FerretDB là gì? Tại sao lại là PostgreSQL?
Định nghĩa về FerretDB
FerretDB (tiền thân là MangoDB) là một cổng dịch vụ (proxy) mã nguồn mở, dịch chuyển các lệnh truy vấn của MongoDB thành ngôn ngữ SQL chuẩn để thực thi trên các hệ quản trị cơ sở dữ liệu quan hệ, chủ yếu là PostgreSQL. FerretDB hoạt động như một lớp trung gian (abstraction layer), cho phép bạn sử dụng chính xác các driver và công cụ của MongoDB mà không cần chạy máy chủ MongoDB thực tế.
Tại sao nên kết hợp với PostgreSQL?
PostgreSQL từ lâu đã được mệnh danh là hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở tiên tiến nhất thế giới. Kể từ phiên bản 9.4, PostgreSQL đã hỗ trợ kiểu dữ liệu JSONB, cho phép lưu trữ và lập chỉ mục (index) dữ liệu phi cấu trúc với hiệu năng cực kỳ ấn tượng. Việc FerretDB chọn PostgreSQL làm backend lưu trữ mang lại nhiều lợi thế vượt trội:
- Tuân thủ mã nguồn mở 100%: Cả FerretDB (giấy phép Apache 2.0) và PostgreSQL đều hoàn toàn miễn phí và không bị ràng buộc bởi các điều khoản thương mại phức tạp.
- Tận dụng hệ sinh thái giàu có: Doanh nghiệp có thể sử dụng lại toàn bộ các công cụ sao lưu, khôi phục (backup/restore), giám sát (monitoring) và bảo mật đã rất hoàn thiện của PostgreSQL.
- Độ tin cậy cao: PostgreSQL nổi tiếng với tính tuân thủ ACID tuyệt đối, đảm bảo an toàn dữ liệu doanh nghiệp ở mức cao nhất.
Hướng dẫn chi tiết cấu hình FerretDB kết hợp PostgreSQL
Để triển khai giải pháp này một cách nhanh chóng và chuẩn hóa nhất cho môi trường thử nghiệm cũng như sản xuất, chúng ta sẽ sử dụng Docker Compose. Cách tiếp cận này giúp cô lập môi trường và dễ dàng quản lý các dịch vụ liên quan.
Bước 1: Chuẩn bị tệp cấu hình docker-compose.yml
Hãy tạo một thư mục dự án và tạo tệp docker-compose.yml với nội dung cấu hình chi tiết dưới đây:
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: ferretdb-postgres
environment:
POSTGRES_USER: username
POSTGRES_PASSWORD: secure_password
POSTGRES_DB: ferretdb_backend
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
networks:
- ferretdb-net
ferretdb:
image: ghcr.io/ferretdb/ferretdb:latest
container_name: ferretdb-proxy
environment:
FERRETDB_POSTGRESQL_URL: "postgres://username:secure_password@postgres:5432/ferretdb_backend?sslmode=disable"
FERRETDB_LISTEN_ADDR: "0.0.0.0:27017"
ports:
- "27017:27017"
depends_on:
- postgres
networks:
- ferretdb-net
volumes:
pgdata:
networks:
ferretdb-net:
driver: bridgeBước 2: Khởi động hệ thống
Mở terminal tại thư mục chứa tệp cấu hình và chạy lệnh sau để khởi động cả PostgreSQL và FerretDB:
docker compose up -dHệ thống sẽ tự động tải các hình ảnh (images) cần thiết, thiết lập mạng nội bộ và kích hoạt FerretDB lắng nghe tại cổng tiêu chuẩn của MongoDB là 27017.
Kiểm tra kết nối và khả năng tương thích cú pháp MongoDB
Sau khi hệ thống đã hoạt động, bạn có thể sử dụng các công cụ quen thuộc của MongoDB như mongosh (MongoDB Shell) hoặc Compass để kiểm tra kết nối.
Sử dụng MongoDB Shell để kết nối
Chạy lệnh kết nối đến FerretDB tương tự như cách bạn kết nối với một thực thể MongoDB thông thường:
mongosh "mongodb://127.0.0.1:27017/test_db"Thực hiện các thao tác CRUD cơ bản
Hãy thử tạo một collection và chèn dữ liệu document để kiểm tra tính tương thích:
db.users.insertOne({ name: "Nguyen Van A", email: "[email protected]", role: "Manager" });
db.users.find({ role: "Manager" });
Lúc này, FerretDB sẽ tiếp nhận lệnh trên, tự động phân tích cú pháp và chuyển đổi nó thành một câu lệnh INSERT INTO hoặc SELECT trên bảng dữ liệu JSONB của PostgreSQL một cách hoàn toàn trong suốt với người dùng.
Đánh giá ưu điểm và hạn chế khi vận hành thực tế
Mặc dù cấu hình FerretDB kết hợp PostgreSQL mang lại sự tự do lớn về mặt bản quyền, doanh nghiệp cũng cần cân nhắc kỹ lưỡng các khía cạnh kỹ thuật khi đưa vào môi trường production lớn.
| Tiêu chí | Ưu điểm nổi bật | Hạn chế hiện tại |
|---|---|---|
| Chi phí & Bản quyền | Hoàn toàn miễn phí, chuẩn mã nguồn mở (Apache 2.0), không rủi ro pháp lý. | Không có hỗ trợ kỹ thuật trực tiếp từ hãng lớn (phụ thuộc vào cộng đồng). |
| Tính tương thích | Hỗ trợ hầu hết các lệnh CRUD cơ bản, tương thích tốt với các driver ngôn ngữ lớn. | Chưa hỗ trợ 100% các tính năng nâng cao như Aggregation Pipeline phức tạp hoặc GridFS. |
| Hiệu năng (Performance) | Tận dụng khả năng tối ưu hóa chỉ mục (GIN Index) cực tốt của PostgreSQL cho dữ liệu JSONB. | Có độ trễ nhỏ (overhead) do phải đi qua lớp chuyển đổi ngôn ngữ trung gian của FerretDB. |
Chiến lược dịch chuyển an toàn cho doanh nghiệp
Nếu doanh nghiệp của bạn đang vận hành một ứng dụng lớn trên MongoDB và muốn chuyển dịch sang kiến trúc FerretDB + PostgreSQL để tối ưu chi phí, hãy tuân thủ quy trình khuyến nghị sau:
- Đánh giá mức độ tương thích (Compatibility Audit): Kiểm tra toàn bộ mã nguồn ứng dụng để lọc ra các câu lệnh truy vấn MongoDB đang sử dụng. Đối chiếu với tài liệu chính thức của FerretDB xem các hàm đó đã được hỗ trợ đầy đủ chưa.
- Triển khai môi trường Staging: Chạy song song hệ thống FerretDB trong môi trường kiểm thử với dữ liệu giả lập để đo lường hiệu năng và phát hiện lỗi phát sinh.
- Lên kế hoạch dịch chuyển dữ liệu (Data Migration): Sử dụng các công cụ xuất dữ liệu như
mongodumpvà nạp lại thông qua FerretDB bằngmongorestoređể đảm bảo cấu trúc document được chuyển đổi chính xác sang định dạng của PostgreSQL.
Lời kết
Cấu hình FerretDB kết hợp PostgreSQL là một bước đi chiến lược và bền vững cho các doanh nghiệp muốn sở hữu sự linh hoạt của NoSQL nhưng lại yêu cầu sự an toàn tuyệt đối về mặt pháp lý và bản quyền mã nguồn mở. Mặc dù vẫn đang trong lộ trình hoàn thiện các tính năng nâng cao, giải pháp này đã hoàn toàn đủ độ chín để ứng dụng cho các dự án vừa và nhỏ, hoặc các cấu phần dịch vụ lưu trữ document tiêu chuẩn trong doanh nghiệp.
