System Design Cơ Bản: Mô hình về tính nhất quán Acid và Base

151

Bài viết được sự cho phép của tác giả Edward Thiên Hoàng

Khi nói đến cơ sở dữ liệu NoSQL, các mô hình nhất quán dữ liệu đôi khi có thể khác biệt đáng kể so với các cơ sở dữ liệu quan hệ được sử dụng (cũng như khá khác biệt so với các cơ sở dữ liệu NoSQL khác).

Hai mô hình nhất quán phổ biến nhất được biết đến bởi các từ viết tắt ACID và BASE. Mặc dù chúng thường đọ sức với nhau trong một trận chiến để giành chiến thắng cuối cùng, cả hai mô hình nhất quán đều có ưu điểm – và nhược điểm – và không phải lúc nào cũng phù hợp hoàn hảo.

  12 Thư viện JavaScript trực quan hoá dữ liệu hot nhất năm 2019
  Crawl dữ liệu bằng JavaScript ngay trên trình duyệt

Chúng ta hãy xem xét kỹ hơn về sự đánh đổi của cả hai mô hình nhất quán cơ sở dữ liệu.

17-1

ACID

Nhiều developer đã quen thuộc với các ACID transaction khi làm việc với các cơ sở dữ liệu quan hệ. Như vậy, mô hình nhất quán ACID đã trở thành chuẩn mực trong một thời gian.

ACID là 1 tập hợp các thuộc tính mà 1 transaction (giao dịch) thao tác với database phải đạt được nhằm bảo đảm tính toàn vẹn, hợp lệ, an toàn, tính bền vững… của dữ liệu ở database.

Nếu 1 transaction không thoả mản 1 trong các thuộc tính này thì sẽ không thể thao tác với database thành công, bị rollback ngay lập tức.

ACID là cụm từ viết tắt của 4 thuộc tính sau: AtomicityConsistencyIsolation và Durability. Giờ cùng nhau tìm hiểu các thuộc tính này nhé:

Atomicity (tính nguyên tử ): dựa vào rule “All or nothing“, như ông bà có câu: được cả ngã về không vậy đó. Khi một chuỗi các transaction lần lượt thao tác với database, nếu 1 transaction đang trong xử lý mà xảy lỗi ở database, hay crash hệ thống, bla bla,… thì toàn bộ các transaction sẽ bị hủy bỏ và bị rollback, dữ liệu ở database vẫn giữ như cũ trước khi có sự thay đổi. Nếu như không xảy ra lỗi hay vấn đề gì trong quá trình xử lý các transaction thì các transaction đó sẽ commit thành công, dữ liệu phía database cũng được cập nhật thành công luôn, nhà trai nhà gái ai nấy đều vui 😀 .

Consistency (Tính nhất quán): 1 transaction phải đảm bảo tính hợp lệ của dữ liệu khi cập nhật vào database. Nếu dữ liệu đưa vào database mà như kiễu dữ liệu không phù hợp, không thỏa mãn constraint, rule, trigger, nhầm table,… thì transaction đó sẽ bị rollback, dữ liệu ở database vẫn được giữ nguyên lúc chưa thay đổi. Chính vì vậy dữ liệu từ transaction phải hợp lệ, đúng đắn, nhất quán với những constraint, cấu trúc table, rule…được định nghĩa hay khai báo từ phía database.

Isolation (Tính cô lập): Mọi thao tác của 1 transaction đều phải được cô lập, tránh xa khỏi “bàn tay” của các transaction khác, kiểu như nhà ai nấy ở, đèn ai nấy sáng vậy đó. 1 transaction này thì không thể đọc dữ liệu ở database mà transaction kia đang update. Nếu 2 transaction đang làm việc đồng bộ với nhau thì sẽ “giả vờ” như đang làm việc tuần tự, 1 transation này sẽ chờ cho đến khi transaction kia commit thành công thì mới bắt đầu xông pha ra mặt trận.

Durability (Tính bền bỉ): Khi 1 transaction update dữ liệu thành công, thì thay đổi của dữ liệu đó phải được đảm bảo lưu trữ ở trạng thái bền vững, vĩnh viễn,…Và ngay cả khi database bị crash, lỗi hay hệ thống restart thì dữ liệu ở database vẫn luôn ở trạng thái thay đổi mới nhất, chính xác.

BASE

Cơ sở dữ liệu NoSQL phù hợp hơn nhiều để lưu trữ dữ liệu như nội dung bài viết, bài đăng trên các kênh media, dữ liệu cần kiểm duyệt và các loại dữ liệu phi cấu trúc khác khó mà xếp vừa trong một bảng. Cơ sở dữ liệu NoSQL được xây dựng với tính linh hoạt, khả năng mở rộng và tuân theo mô hình nhất quán BASE, có nghĩa là:

Basic Availability – Tính sẵn sàng ở mức cơ bản: Trong khi cơ sở dữ liệu đảm bảo tính khả dụng cho dữ liệu, cơ sở dữ liệu có thể không nhận được dữ liệu được yêu cầu, dữ liệu có thể ở trạng thái thay đổi hoặc không nhất quán.

Soft state – Trạng thái mềm: Trạng thái của cơ sở dữ liệu có thể thay đổi theo thời gian.

Eventual consistency – Tính nhất quán: Cơ sở dữ liệu sẽ trở nên nhất quán và dữ liệu sẽ được lan truyền khắp mọi nơi tại một thời điểm nào đó trong tương lai.

Mô hình BASE được xây dựng để tạo ra tính linh hoạt tối đa. Nhưng trên thực tế có một số cơ sở dữ liệu NoSQL vẫn tuân thủ hệ quy chuẩn ACID.

Nhìn chung, mô hình nhất quán BASE cung cấp một sự đảm bảo ít nghiêm ngặt hơn ACID: dữ liệu sẽ nhất quán trong tương lai, tại thời điểm đọc (ví dụ: Rịa) hoặc sẽ luôn nhất quán, nhưng chỉ đối với các ảnh chụp nhanh được xử lý trước đó (ví dụ: Datomic) .

Mô hình nhất quán BASE được sử dụng chủ yếu bởi các aggregate stores, including column family, key-value và document stores

ACID VS. BASE TRADE-OFFS

Không có câu trả lời đúng nào cho việc ứng dụng của bạn cần mô hình nhất quán ACID so với BASE. Các developer và architect nên lựa chọn sự đánh đổi tính nhất quán dữ liệu của họ trong từng trường hợp cụ thể – không chỉ dựa trên những gì chỉ mang tính xu hướng hoặc mô hình nào đã được sử dụng trước đó.

Với tính nhất quán lỏng lẻo của BASE, các developer cần phải hiểu biết nhiều hơn và nghiêm ngặt hơn về dữ liệu nhất quán nếu họ chọn BASE cho ứng dụng.

Mặt khác, việc lập kế hoạch xung quanh các giới hạn của BASE đôi khi có thể là một bất lợi lớn khi so sánh với sự đơn giản của các giao dịch ACID. Một cơ sở dữ liệu ACID đầy đủ là sự phù hợp hoàn hảo cho các trường hợp sử dụng trong đó độ tin cậy và tính nhất quán của dữ liệu là điều cần thiết (ví dụ như ngân hàng).

READ MORE:

Bài viết gốc được đăng tải tại edwardthienhoang.wordpress.com

Có thể bạn quan tâm:

Xem thêm Việc làm Developer hấp dẫn trên TopDev