DDevArchive
Đăng nhập

Database scaling: replication, sharding và CAP theorem

Một database không thể mãi mãi gánh mọi thứ. Khi lớn, bạn phải chọn: đọc thêm thì nhân bản (replication), ghi thêm thì chia bảng (sharding), và chấp nhận CAP theorem — không thể có cả ba cùng lúc.

Replication: nhiều bản sao để đọc

Một primary nhận ghi, các replica đọc (primary–replica). Dữ liệu được copy gần như tức thì. Giải phóng tải đọc, và có bản dự phòng khi primary chết.

Độ trễ nhân bản

Replica nhận dữ liệu sau primary vài mili-giây. Nếu user vừa tạo xong mà đọc qua replica, có thể chưa thấy. Giải pháp: đọc ghi tức thì qua primary (read-your-writes), hoặc chấp nhận nhất quán cuối.

Sharding: chia dữ liệu theo chiều ngang

Sharding chia bảng lớn thành nhiều phần (shard) trên nhiều máy. Mỗi shard chứa một phần dữ liệu theo khoá shard (ví dụ user_id). Tăng dung lượng và ghi song song.

Kỹ thuậtGiải quyếtĐánh đổi
ReplicationTải đọc, dự phòngTrễ nhân bản, write vẫn 1 chỗ
ShardingDung lượng + tải ghiQuery xuyên shard khó, rebalance khổ sở
CacheTải đọc nóngDữ liệu cũ, phức tạp invalidation
IndexTruy vấn nhanh hơnGhi chậm hơn, tốn bộ nhớ

CAP theorem: chọn hai, hy sinh một

Consistency (mọi nơi cùng một dữ liệu), Availability (luôn trả lời được), Partition tolerance (chịu mạng chia cắt). Khi mạng chập chờn (luôn xảy ra), bạn phải chọn giữa C và A.

ChọnVí dụ hệ thốngHệ quả
CP — ưu tiên nhất quánTài khoản ngân hàngKhi mạng chia cắt, chấp nhận từ chối (unavailable)
AP — ưu tiên sẵn sàngNews feed, giỏ hàngDữ liệu có thể lệch tạm thời, gộp lại sau
CA — hiếm khi đạtHệ thống một máyKhông chịu partition — thực tế hiếm dùng

❓ Hệ thống ngân hàng khi mạng giữa 2 datacenter bị đứt. Nên ưu tiên gì?

  • Phân biệt replication và sharding
  • Biết read-your-writes và trễ nhân bản
  • Thuộc 3 chữ cái của CAP
  • Chọn CP hay AP theo nghiệp vụ