Database Architecture and CAP theory


Database nào hay, database nào dở?
Không có cái nào dở cả…

Mình nghe rất nhiều bạn nói RDBMS đã lạc hậu rồi, giờ phải chơi NoSQL, MongoDB, DynamoDB kiểu kiểu như vậy. Giờ nếu chúng ta phải chọn ra một database để xây dựng hệ thống thì chọn cái nào? Chắc chắn chúng ta người thì lựa theo số đông, người thì theo một số công cụ benchmark.

Ở góc nhìn về mặt kiến trúc thì database nào cũng có điểm mạnh và điểm yếu cả, khẳng định là không có database nào được cả 3/3 chứ đừng nói là hoàn hảo 100%, mỗi database được thiết kế cho một bài toán khác nhau và đều hướng tới CAP theory(Available, Consistency, Parttion Tolerance).

CAP theory

Tính Available đảm bảo hệ thống luôn ở trong trạng thái sẵn sàng
Tính Consitency đảm bảo một sự thống nhất và bảo toàn về mặt dữ liệu
Và Parttion Tolerance cho phép hệ thống mở rộng, dự phòng ra nhiều máy chủ vật lý khác nhau.

Tuy nhiên trong thực tế kiến trúc cho mỗi database lại chỉ có thể đáp ứng được 2/3 nguyên tắc đó là AP hoặc CP. Tại sao P luôn được chọn? Vì họ hướng đến tính mở rộng của hệ thống phân tán (distributed systems) muốn phân tán được thì parttions cần thiết rồi. Vậy chỉ còn phải lựa chọn Consistent và Available nữa thôi


Partition Tolerance

Khi các cụm database nằm ở các máy chủ khác nhau làm sao để hệ thống đảm bảo tính sẵn sàng luôn đáp ứng được request đến từ phía khách hàng?
Khi phân tán hệ thống có thể có hàng trăm hay hàng ngàn database instances trên khắp thế giới làm sao để đảm bảo tính consistency?


High Consistency

Dữ liệu là chìa khóa để chúng ta quyết định việc chọn AP hay CP, nếu là dữ liệu liên quan tới tài chính ngân hàng, chứng khoán, công văn mật thì việc chọn CP là đương nhiên, thử hình dung bạn chuyển $1000 usd vào tài khoản khác lúc sau đăng nhập vào vẫn thấy còn $1000usd ở đó rồi bạn thực hiện vài lần như thế . Ví dụ khác về những trang như Amazon, Alibaba… báo còn hàng mà đến lúc bấm vào mua lại báo hết, hay hệ thống đã cập nhật tăng giá mà một số cụm server vẫn bán theo giá cũ thì nó nguy hiểm tới mức nào. Đó là lý do vì sao những hệ thống này cần đặt consistency lên cao hơn available.

Nếu dữ liệu kiểu như một số mạng xã hội như của Facebook, Tweeter, Reddit thì việc bạn nhìn thấy bài post/comments của một ai đó sớm hay muộn vài giây thậm chí cả phút hay không thấy mẩu tin đó thì cũng không cháy nhà chết người phải không? Lúc đó tính available được đặt lên cao hơn, miễn là giữ cho người dùng luôn được response là được còn không quan trọng consitent.

MongoDB, DynamoDB, Redis, Hbase, MariaDB là strongly consistent by default (CP)

Cassandra, CouchDB, Riak là (AP)

Hy vọng qua bài này chúng ta có thể chọn cho hệ thống của mình database phù hợp.

Hãy LIKE/COMMENT/SHARE và FOLLOW Gravity Model page để đón đọc những bài tiếp theo nhé!

Mọi người copy, share nội dung từ Gravity Model cần trích dẫn rõ nguồn gốc tin, như là một văn hóa của sự tôn trọng vậy.

Thanks for reading
Y Hoang,

#CAP theory
#Database#nosql#Riak#mongodb#cassandra#dynamodb
#chosingdatabase

Please follow and like us:

Leave a Reply

Your email address will not be published. Required fields are marked *