Xây dựng hạ tầng Serverless SQLite phân tán toàn cầu bằng LiteFS trên cụm 3 VPS giá rẻ
Giới thiệu: Lột xác SQLite cho thời đại Cloud-Native
Trong nhiều năm qua, SQLite luôn được biết đến như một cơ sở dữ liệu (CSDL) nhúng nhẹ nhàng, đáng tin cậy và cực kỳ nhanh chóng cho các ứng dụng đơn lẻ hoặc môi trường phát triển (development). Tuy nhiên, khi bước vào thế giới của các ứng dụng phân tán toàn cầu và kiến trúc microservices, SQLite thường bị bỏ qua vì giới hạn cố hữu: nó lưu trữ dữ liệu trên một tệp tin duy nhất và không hỗ trợ kết nối mạng hay đồng bộ hóa tự động giữa các máy chủ khác nhau.
Sự ra đời của LiteFS (phát triển bởi Fly.io) đã hoàn toàn thay đổi cuộc chơi này. LiteFS là một hệ thống tệp tin cầu chì (FUSE file system) cho phép sao chép dữ liệu SQLite theo thời gian thực ở cấp độ tệp tin (file-level replication). Bài viết này sẽ hướng dẫn bạn cách xây dựng một hạ tầng 'Serverless SQLite' phân tán toàn cầu, có tính sẵn sàng cao (High Availability) chỉ với cụm 3 VPS cấu hình thấp (giá rẻ), mang lại hiệu năng đỉnh cao với chi phí tối ưu nhất.
Tại sao lại là 'Serverless SQLite' và LiteFS?
Trước khi đi sâu vào kỹ thuật, hãy cùng phân tích lý do tại sao mô hình này lại là một xu hướng đột phá cho các kỹ sư hệ thống và nhà phát triển độc lập (Indie Hackers):
- Chi phí vận hành cực thấp: Thay vì phải trả hàng trăm USD mỗi tháng cho các dịch vụ Managed Database phân tán như AWS Aurora Global Database hay Google Spanner, bạn chỉ cần 3 VPS giá rẻ (loại 5$ - 10$/tháng) từ các nhà cung cấp như DigitalOcean, Linode, hoặc Hetzner.
- Độ trễ đọc gần như bằng không (Edge-ready): Nhờ cơ chế sao chép của LiteFS, dữ liệu được đặt ngay tại các khu vực địa lý gần người dùng cuối nhất. Các truy vấn ĐỌC (Read) được xử lý cục bộ ngay trên VPS đó với tốc độ micro giây.
- Bảo trì đơn giản: Không cần các hệ quản trị phức tạp như PostgreSQL hay MySQL. Bản chất của SQLite vẫn là các file phẳng, giúp việc sao lưu (backup) và khôi phục (restore) trở nên vô cùng dễ dàng.
Tuy nhiên, thách thức lớn nhất của hệ thống phân tán là tính nhất quán dữ liệu (Data Consistency). LiteFS giải quyết vấn đề này bằng cách sử dụng thuật toán đồng thuận Consortium/Raft (thông qua Consul hoặc LiteFS Cloud) để bầu chọn ra một node chính (Primary Node) giữ quyền GHI (Write), trong khi các node còn lại đóng vai trò Bản sao (Replica Nodes).
Kiến trúc tổng quan của hệ thống 3 VPS
Để đảm bảo tính sẵn sàng cao và khả năng chống chịu lỗi (Fault Tolerance), quy tắc vàng của hệ thống phân tán là số lượng node phải là số lẻ để tránh tình trạng "não phân đôi" (split-brain). Cụm 3 VPS là cấu hình tối thiểu và tối ưu nhất:
- VPS 1 (Primary - Thường đặt tại Singapore/Hạ tầng chính): Đóng vai trò Leader, tiếp nhận tất cả các tác vụ GHI dữ liệu từ ứng dụng.
- VPS 2 (Replica - Đặt tại Mỹ/Châu Âu): Sao chép dữ liệu thời gian thực từ VPS 1, sẵn sàng thăng cấp thành Primary nếu VPS 1 gặp sự cố.
- VPS 3 (Replica - Đặt tại khu vực khác): Đóng vai trò duy trì số phiếu bầu (Quorum) để hệ thống tự động bầu chọn Leader mới khi có thảm họa xảy ra.
Lưu ý quan trọng: LiteFS tự động điều hướng (forward) các truy vấn GHI từ các Replica Nodes về Primary Node thông qua một tầng proxy tích hợp sẵn hoặc thông qua cấu hình ứng dụng của bạn. Người dùng cuối sẽ không nhận biết được sự phức tạp này.
Hướng dẫn từng bước triển khai LiteFS trên cụm 3 VPS
Bước 1: Chuẩn bị môi trường và cài đặt Consul
LiteFS cần một cluster coordinator để quản lý trạng thái của cụm và bầu chọn Leader. Trong hướng dẫn này, chúng ta sẽ sử dụng Consul của HashiCorp - một công cụ dịch vụ khám phá và lưu trữ key-value phân tán mạnh mẽ.
Trên cả 3 VPS, tiến hành cài đặt Consul bằng lệnh:
curl -fsSL [https://apt.releases.hashicorp.com/gpg](https://apt.releases.hashicorp.com/gpg) | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] [https://apt.releases.hashicorp.com/bindings/debian](https://apt.releases.hashicorp.com/bindings/debian) $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list sudo apt-get update && sudo apt-get install consul
Cấu hình tệp `/etc/consul.d/consul.hcl` trên từng node để chúng kết nối với nhau qua IP public an toàn (nên sử dụng VPN nội bộ như Tailscale hoặc WireGuard để bảo mật kết nối giữa các VPS).
Bước 2: Cài đặt và cấu hình LiteFS
Tải xuống bản phân phối mới nhất của LiteFS từ GitHub releases và phân phối tệp thực thi vào thư mục `/usr/local/bin/`. Tiếp theo, tạo tệp cấu hình cốt lõi mang tên `litefs.yml`:
fuse: dir: "/var/lib/litefs/mnt" data: dir: "/var/lib/litefs/data" lease: type: "consul" advertise-url: "http://:20202" consul: url: "http://localhost:8500" key: "litefs/cluster-1"
Trong cấu hình trên, thư mục `/var/lib/litefs/mnt` chính là nơi LiteFS mount hệ thống tệp tin ảo của nó. Khi ứng dụng của bạn kết nối vào CSDL SQLite, bạn sẽ trỏ đường dẫn đến thư mục này (ví dụ: `/var/lib/litefs/mnt/production.db`).
Bước 3: Khởi chạy dịch vụ và kiểm tra đồng bộ
Khởi chạy dịch vụ LiteFS trên cả 3 VPS bằng hệ thống quản lý dịch vụ (systemd) hoặc chạy trực tiếp bằng lệnh `litefs mount`. Hệ thống sẽ tự động liên lạc với Consul, bầu ra một node làm Primary và kích hoạt cơ chế stream dữ liệu sang 2 node còn lại.
Bạn có thể kiểm tra trạng thái của cụm bằng công cụ dòng lệnh đi kèm:
litefs monitorMàn hình sẽ hiển thị rõ ràng node nào đang giữ Lease (Quyền ghi) và độ trễ đồng bộ của các node con là bao nhiêu mili-giây.
Tối ưu hóa hiệu năng và những lưu ý khi vận hành
Mặc dù mô hình "Serverless SQLite" phân tán mang lại lợi ích rất lớn, bạn cần lưu ý một số điểm kỹ thuật sau để hệ thống vận hành trơn tru:
- Sử dụng chế độ WAL (Write-Ahead Logging): Luôn đảm bảo ứng dụng của bạn bật chế độ WAL trong SQLite (`PRAGMA journal_mode=WAL;`). Đây là chế độ bắt buộc để LiteFS có thể theo dõi và nhân bản các thay đổi dữ liệu một cách hiệu quả.
- Thiết kế ứng dụng tối ưu hóa Read/Write Split: Vì các tác vụ ghi phải gửi về Primary Node, hãy cố gắng gộp các lệnh ghi (batch inserts/updates) để giảm số lượng network round-trip giữa các khu vực địa lý.
- Giám sát dung lượng đĩa: Mặc dù SQLite rất nhẹ, nhưng việc lưu trữ tệp tin WAL có thể phình to nhanh chóng nếu tần suất ghi quá cao. Hãy thiết lập các công cụ giám sát như Prometheus và Grafana để theo dõi ổ đĩa.
Kết luận
Xây dựng một hệ thống cơ sở dữ liệu phân tán không còn là đặc quyền của các tập đoàn lớn với ngân sách khổng lồ. Bằng cách kết hợp tính đơn giản của SQLite với sức mạnh công nghệ đột phá của LiteFS, bạn hoàn toàn có thể tự tay thiết lập một hạ tầng dữ liệu toàn cầu có độ tin cậy cao, hiệu năng vượt trội ngay trên các VPS giá rẻ.
Giải pháp này mở ra một chương mới cho các kiến trúc Edge Computing, giúp ứng dụng của bạn phản hồi người dùng ngay lập tức bất kể họ ở đâu trên thế giới, trong khi chi phí duy trì chỉ bằng một bữa ăn tối. Hãy bắt đầu thử nghiệm và nâng cấp hạ tầng của bạn ngay hôm nay!
