0

🗄️🧠 Multi-Database Architecture: Tại Sao Hệ Thống Lớn Luôn Dùng Nhiều Database? - Database System Design P27

Multi-Database Architecture: Tại Sao Hệ Thống Lớn Luôn Dùng Nhiều Database?

1. CHIẾC BẪY "MỘT DATABASE CHO TẤT CẢ"

Hãy tưởng tượng bạn đang dẫn dắt team Engineering của một startup E-commerce đang "on fire". Giai đoạn đầu, mọi thứ thật tinh gọn. Bạn chọn PostgreSQL — "vị thần" của thế giới Relational Database. Toàn bộ từ User, Product, đơn hàng (Orders) cho đến lịch sử tìm kiếm hay báo cáo kho đều nằm gọn trong một database duy nhất. Bạn tự tin với một Schema chuẩn hóa (Normalized) hoàn hảo.

Nhưng khi traffic tăng gấp 100 lần, cơn ác mộng Production bắt đầu.

Vào một ngày lễ mua sắm, phòng Marketing đổ hàng triệu người dùng vào để tìm kiếm deal hời. Câu lệnh LIKE %keyword% bắt đầu "nhai" sạch CPU. Cùng lúc đó, bộ phận kế toán chạy một báo cáo Analytics nặng nề để xem doanh thu thực tế. Kết quả? Hệ thống tê liệt.

Khách hàng đang cầm tiền trên tay nhưng không thể nhấn nút "Thanh toán" vì câu lệnh INSERT INTO orders bị block bởi các truy vấn tìm kiếm và báo cáo. Lỗi 504 tràn lan. CEO lao vào phòng kỹ thuật hỏi một câu chí mạng: "Tại sao một tính năng tìm kiếm đơn giản lại có thể làm hỏng cả nút mua hàng?"

Lúc này, niềm tin phổ biến thường là: "Chỉ cần nâng cấp server database mạnh hơn (Vertical Scaling) là đủ". Nhưng với tư duy Senior, đó là một sai lầm đắt giá. Một database dù tốt nhất thế giới cũng không thể làm mọi thứ. Khi hệ thống lớn dần, câu hỏi không phải là làm sao để ép một database làm nhiều việc hơn, mà là làm sao để giải phóng nó.


2. PHÂN TÍCH GỐC RỄ: SỰ XUNG ĐỘT CỦA CÁC LOẠI WORKLOAD

Tại sao một Engine đơn lẻ lại thất bại? Không phải do phần cứng yếu, mà do sự xung đột về Access Pattern và cấu trúc lưu trữ bên dưới. Khi bạn ép một Database Engine làm quá nhiều việc, nó sẽ trở thành "Jack of all trades, master of none" — làm được mọi thứ nhưng không giỏi bất cứ thứ gì.

Đặc tính OLTP (Transaction) OLAP (Analytics) Search Workload
Ưu tiên Tính đúng đắn (Consistency) Tốc độ đọc dữ liệu lớn Full-text search, Fuzzy match
Dữ liệu Trạng thái hiện tại Dữ liệu lịch sử/Aggregation Dữ liệu đã được Index hóa
Access Pattern Ghi/Cập nhật từng dòng Đọc hàng triệu dòng Truy vấn theo từ khóa/Rank
Độ trễ (Latency) Cực thấp (Miliseconds) Chấp nhận cao (Seconds/Minutes) Thấp (Miliseconds)
Ví dụ Thanh toán, Tạo đơn hàng Báo cáo doanh thu tháng Tìm kiếm "Áo thun nam"

Khi hệ thống nhỏ, sự khác biệt này bị che lấp. Khi hệ thống lớn, SQL Engine (vốn dùng B-Tree để tối ưu cho Transaction) sẽ kiệt sức nếu phải gánh thêm gánh nặng Full-text search (vốn cần Inverted Index) hoặc Analytics (vốn cần Columnar Storage).


3. TƯ DUY KỸ SƯ: DATABASE LÀ MỘT "HỢP ĐỒNG HỆ THỐNG"

Dưới "Senior Engineer lens", database không chỉ là cái kho chứa. Nó là nơi thực thi "lời hứa dữ liệu" (Data Promise). Mỗi loại Database Engine là một bản hợp đồng cam kết giữ một phần sự thật của sản phẩm:

  • SQL (PostgreSQL/MySQL) hứa:"Tiền của người dùng sẽ không bao giờ mất, giao dịch sẽ luôn đúng."
  • Elasticsearch hứa:"Bạn sẽ tìm thấy sản phẩm trong hàng tỷ bản ghi chỉ trong vài miliseconds."
  • Redis hứa:"Dữ liệu nóng sẽ luôn sẵn sàng ở tốc độ ánh sáng."

Khi bạn dùng SQL để làm mọi thứ, bạn đang ép nó vi phạm "hợp đồng". Một lời hứa bị phá vỡ (ví dụ: tìm kiếm chậm làm nghẽn thanh toán) sẽ dẫn đến thiệt hại trực tiếp về doanh thu và niềm tin của khách hàng. Khái niệm Workload Specialization yêu cầu chúng ta: Thay vì hỏi "Database nào mạnh nhất?", hãy hỏi: "Workload này cần lời hứa nào để sống sót?".


4. HÀNH TRÌNH TIẾN HÓA: KHI ENGINE CHẠM TRẦN VẬT LÝ

Kiến trúc dữ liệu không đứng yên mà tiến hóa theo áp lực của Production. Bạn không thể nhảy vọt, nhưng bạn phải biết khi nào cần thay đổi:

  1. Single Node (CRUD cơ bản): Mọi thứ trong một DB instance. Phù hợp cho giai đoạn khởi đầu.
  2. Read/Write Splitting (Tách Replica): Dùng Master để ghi, Slave để đọc (đã học ở Episode 16). Nhưng khi Replica Lag tăng cao do các câu lệnh Search/Analytics quá nặng, giai đoạn này sẽ sụp đổ.
  3. Specialized Engines (Chuyên môn hóa): Đây là bước ngoặt. Khi B-Trees của SQL chạm giới hạn vật lý trong việc tìm kiếm, bạn đưa Search sang Elasticsearch (Inverted Index). Khi việc aggregation hàng tỷ bản ghi làm chết bộ nhớ, bạn đưa Analytics sang ClickHouse (Columnar Storage).
  4. Microservices/Domain Bound: Mỗi Domain sở hữu database riêng. Service Order không thể chết chỉ vì DB của Service Marketing bị treo. Đây là đỉnh cao của sự độc lập (Service Autonomy).

5. PHÂN TÍCH ĐÁNH ĐỔI (TRADE-OFF ANALYSIS)

Làm kiến trúc sư là làm nghề chọn "nỗi đau". Việc dùng nhiều database mang lại performance cực đại nhưng ném một "quả bom" vận hành vào hệ thống:

  • Data Consistency (Tính nhất quán): Bạn phải chấp nhận Eventual Consistency. Dữ liệu vừa ghi vào SQL có thể mất vài trăm ms mới xuất hiện trên Elasticsearch. Nếu Product yêu cầu "thấy ngay lập tức", bạn sẽ đối mặt với bài toán Distributed Transaction cực kỳ phức tạp.
  • Cognitive Load (Gánh nặng nhận thức): Chi phí lớn nhất không phải là tiền server, mà là chất xám. Team Dev và Ops bây giờ phải hiểu đồng lúc 5 loại Consistency Model, cách Backup và Monitoring 5 hệ thống khác nhau.
  • Distributed Monolith (Nguy cơ thắt nút): Nếu không khéo léo, việc dùng nhiều DB sẽ biến hệ thống thành một khối "monolith phân tán" — nơi một đường ống đồng bộ dữ liệu (CDC/ETL) bị lag sẽ khiến toàn bộ dữ liệu ở các service khác nhau bị sai lệch ("râu ông nọ chắp cằm bà kia").

Lời khuyên Senior: Đừng thêm database chỉ vì nó "ngầu". Hãy thêm khi nỗi đau của performance lớn hơn gánh nặng vận hành mà team bạn có thể chịu đựng.


6. FAILURE CASES: NHỮNG SAI LẦM ĐẮT GIÁ

  • Over-engineering: Một startup chưa có nổi 1.000 user nhưng đã triển khai 5 loại database vì muốn "chuẩn Big Tech". Kết quả: Team dành 80% thời gian để fix lỗi đồng bộ dữ liệu thay vì làm tính năng. Sản phẩm chết lâm sàn vì độ phức tạp tự thân.
  • The Sync Nightmare: Hệ thống E-commerce bị lag pipeline đồng bộ. User cập nhật địa chỉ giao hàng thành công (ở SQL), nhưng khi vào trang "Theo dõi đơn hàng" (lấy từ Search Engine), hệ thống vẫn hiện địa chỉ cũ. Khách hàng hoảng sợ vì tưởng bị lừa đảo, hủy đơn hàng loạt. Niềm tin mất đi, doanh thu bốc hơi.

7. TỔNG KẾT VÀ BÀI HỌC CỐT LÕI

Multi-database architecture không phải là mục tiêu, nó là hệ quả tất yếu của việc hệ thống trưởng thành và nhu cầu chuyên môn hóa workload.

Key Takeaways cho Engineer:

  • Database là hệ thống giữ sự thật: Đừng đối xử với nó như một cái kho chứa đơn thuần. Mỗi quyết định thêm một DB là một cam kết về chi phí và trách nhiệm bảo vệ sự thật đó.
  • Phân tích Workload trước khi chọn Engine: Đừng bắt SQL làm việc của Elasticsearch và ngược lại. Hiểu giới hạn vật lý của cấu trúc dữ liệu bên dưới (B-Tree vs Inverted Index).
  • Thiết kế cho sự thay đổi: Database Design không phải là schema đẹp, mà là thiết kế cách dữ liệu được đọc, ghi, bảo vệ và giữ đúng khi hệ thống lớn lên.

OPEN LOOP & CTA

Khi bạn đã chấp nhận dùng nhiều database, câu hỏi khó nhất tiếp theo không phải là chọn thêm engine nào, mà là: Làm sao di chuyển dữ liệu giữa chúng mà không làm hệ thống gãy? Làm sao chuyển từ một Single DB sang Multi-DB mà khách hàng không hề hay biết?

Chúng ta sẽ giải mã bài toán này trong Episode 28: Data Migration Strategy - Di Chuyển Dữ Liệu Không Downtime (Chuẩn Dev Senior).

Nếu bạn muốn rèn luyện tư duy thiết kế hệ thống ở mức độ Senior, nhìn nhận database như một "tài sản hệ thống" thay vì công cụ, hãy đồng hành cùng chúng mình tại TechCraft Dev Insider. Những nội dung sâu nhất về migration, consistency model và các bài học thực chiến từ production đang chờ bạn.

👉 Khám phá tư duy Senior tại TechCraft Dev Insider


🎯 Dành cho những Developer muốn đi xa hơn

Viết được tính năng chỉ là điểm khởi đầu.

Khi hệ thống ngày càng lớn, những bài toán về hiệu năng, tính đúng đắn của dữ liệu, khả năng mở rộng và các trade-off trong kiến trúc mới là điều tạo nên sự khác biệt giữa một Developer và một System Engineer.

Nếu bạn muốn tiếp tục khám phá những chủ đề đó, hãy tham gia cùng TechCraft thông qua Dev Insider.

🚀 Dev Insider

https://www.patreon.com/cw/techcraft_official/membership

📘 Facebook
https://www.facebook.com/techcraft.official

🎥 YouTube
https://www.youtube.com/@techcraft.official

🎵 TikTok
https://www.tiktok.com/@techcraft.official

Build Systems. Not Just Features.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.