Sự thống nhất cuối cùng bằng tiếng Anh


130

Tôi thường nghe về tính nhất quán cuối cùng trong các bài phát biểu khác nhau về NoQuery, lưới dữ liệu, v.v ... Dường như định nghĩa về tính nhất quán cuối cùng khác nhau ở nhiều nguồn (và thậm chí có thể phụ thuộc vào lưu trữ dữ liệu cụ thể).

Bất cứ ai cũng có thể đưa ra một lời giải thích đơn giản về tính nhất quán cuối cùng là gì, không liên quan đến bất kỳ lưu trữ dữ liệu cụ thể nào?


1
Chẳng hạn như Wikipedia không giúp được gì? vi.wikipedia.org/wiki/Eventual_consistency
Oliver Charlesworth

21
@OliCharlesworth: không. Có thể đó chỉ là tôi nhưng nó hoàn toàn không rõ ràng ngay cả sau khi đọc hai lần.
La Mã

Câu trả lời:


228

Tính nhất quán cuối cùng:

  1. Tôi xem báo cáo thời tiết và biết rằng trời sẽ mưa vào ngày mai.
  2. Tôi nói với bạn rằng trời sẽ mưa vào ngày mai.
  3. Hàng xóm của bạn nói với vợ rằng ngày mai trời sẽ nắng.
  4. Bạn nói với hàng xóm rằng trời sẽ mưa vào ngày mai.

Cuối cùng, tất cả các máy chủ (bạn, tôi, hàng xóm của bạn) đều biết sự thật (rằng trời sẽ mưa vào ngày mai), nhưng trong lúc đó, khách hàng (vợ anh ta) đã nghĩ rằng trời sẽ nắng, mặc dù cô ấy hỏi sau khi một hoặc nhiều máy chủ (bạn và tôi) có giá trị cập nhật hơn.

Trái ngược với sự tuân thủ nghiêm ngặt / tuân thủ ACID:

  1. Số dư ngân hàng của bạn là 50 đô la.
  2. Bạn gửi $ 100.
  3. Số dư ngân hàng của bạn, được yêu cầu từ bất kỳ máy ATM nào ở bất cứ đâu, là 150 đô la.
  4. Con gái của bạn rút $ 40 bằng thẻ ATM của bạn.
  5. Số dư ngân hàng của bạn, được yêu cầu từ bất kỳ máy ATM nào ở bất cứ đâu, là $ 110.

Số dư của bạn không thể phản ánh bất cứ điều gì ngoài số tiền thực tế của tất cả các giao dịch được thực hiện trên tài khoản của bạn đến thời điểm chính xác đó.

Các lý do tại sao rất nhiều hệ thống NoSQL có tính nhất quán cuối cùng là hầu như tất cả trong số họ được thiết kế để phân phối, và với hệ thống phân phối hoàn toàn có overhead siêu tuyến tính để duy trì tính nhất quán nghiêm ngặt (có nghĩa là bạn chỉ có thể mở rộng quy mô cho đến nay trước khi mọi thứ bắt đầu chậm và khi chúng xảy ra, bạn cần ném phần cứng theo cấp số nhân vào vấn đề để tiếp tục nhân rộng).


Tôi không hiểu. Là sự tăng trưởng là tuyến tính hay theo cấp số nhân?
Maciek Kreft

4
Sự tăng trưởng trong chi phí truyền thông của một hệ thống N nút nhất quán thường được hiểu là siêu tuyến tính (nghĩa là nhiều hơn tuyến tính). Có thể theo cấp số nhân, có thể là khối ... Phụ thuộc vào giao thức truyền thông, v.v.
Chris Shain 16/12/12

2
Câu trả lời tốt. Một số câu hỏi tiếp theo: không phải là "xấu" mà yêu cầu đến máy chủ có thể khiến bạn nhận được thông tin sai / lỗi thời? Có phải mọi người chỉ ổn với điều đó hoặc có một giải pháp cho nó? Ngoài ra, làm thế nào dữ liệu cuối cùng được sao chép trên các máy chủ khác nhau? Nếu một trong các máy chủ bị hỏng và dữ liệu đang được sao chép trên các máy chủ, nếu máy chủ đó sao lưu, làm thế nào để dữ liệu của nó được cập nhật?
noblerare

5
@noblerare nó "xấu" vì mức độ xấu khác nhau. Sẽ rất tệ nếu số dư ATM của tôi hết hạn. Sẽ ít tệ hơn nếu cơ sở dữ liệu đăng nhập của tôi không bị bắt kịp hoặc nếu nguồn cấp dữ liệu Facebook của tôi chậm một vài giây. Cơ chế sao chép dữ liệu và độ bền rất đa dạng và phụ thuộc vào nền tảng cụ thể. Đối với Cassandra (như một ví dụ), người viết có thể quyết định xem một bài viết cụ thể có thành công hay không, nó cần phải được cam kết trên một, tất cả hoặc một đại biểu (đa số) các nút. HBase có một cách tiếp cận khác nhau, trong đó một nút cụ thể là "chính" cho mỗi hàng dữ liệu.
Chris Shain

Trên thực tế, hầu hết các hệ thống ngân hàng cuối cùng là nhất quán.
Hỗn loạn

106

Tính nhất quán cuối cùng:

  1. Dữ liệu của bạn được sao chép trên nhiều máy chủ
  2. Khách hàng của bạn có thể truy cập bất kỳ máy chủ nào để lấy dữ liệu
  3. Ai đó viết một phần dữ liệu cho một trong các máy chủ, nhưng nó chưa được sao chép sang phần còn lại
  4. Một khách hàng truy cập vào máy chủ với dữ liệu và nhận được bản sao cập nhật nhất
  5. Một khách hàng khác (hoặc thậm chí cùng một khách hàng) truy cập vào một máy chủ khác (một máy chủ chưa nhận được bản sao mới) và nhận được bản sao cũ

Về cơ bản, vì cần có thời gian để sao chép dữ liệu trên nhiều máy chủ, yêu cầu đọc dữ liệu có thể đến máy chủ có bản sao mới và sau đó chuyển đến máy chủ có bản sao cũ. Thuật ngữ "cuối cùng" có nghĩa là cuối cùng dữ liệu sẽ được sao chép tới tất cả các máy chủ và do đó tất cả chúng sẽ có bản sao cập nhật.

Tính nhất quán cuối cùng là điều bắt buộc nếu bạn muốn đọc độ trễ thấp, vì máy chủ phản hồi phải trả lại bản sao dữ liệu của chính nó và không có thời gian để tham khảo các máy chủ khác và đạt được thỏa thuận chung về nội dung của dữ liệu. Tôi đã viết một bài blog giải thích điều này chi tiết hơn.


2
Bài đăng trên blog đẹp. Đáng đọc cho một người mới với ý tưởng về tính nhất quán cuối cùng. Câu trả lời này sẽ tốt hơn nếu nó được viết lại để giải thích thêm về những gì trong bài viết trên blog.
axiopisty

1
Giải thích tốt trong blog của bạn. Cám ơn vì đã chia sẻ.
Ataur Rahman Munna

12

Hãy nghĩ rằng bạn có một ứng dụng và bản sao của nó. Sau đó, bạn phải thêm mục dữ liệu mới vào ứng dụng.

nhập mô tả hình ảnh ở đây

Sau đó, ứng dụng đồng bộ hóa dữ liệu với bản sao khác hiển thị bên dưới

nhập mô tả hình ảnh ở đây

Trong khi đó, khách hàng mới sẽ nhận dữ liệu từ một bản sao chưa cập nhật. Trong trường hợp đó, anh ta không thể lấy đúng dữ liệu ngày. Bởi vì đồng bộ hóa có được một thời gian. Trong trường hợp đó, cuối cùng nó không có tính nhất quán

Vấn đề là làm thế nào chúng ta cuối cùng có thể thống nhất ?

Vì vậy, chúng tôi sử dụng ứng dụng hòa giải để cập nhật / tạo / xóa dữ liệu và sử dụng truy vấn trực tiếp để đọc dữ liệu. Điều đó giúp tạo nên sự nhất quán

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


3

Khi một ứng dụng thực hiện thay đổi đối với một mục dữ liệu trên một máy, thay đổi đó phải được truyền tới các bản sao khác. Vì việc truyền thay đổi không phải là tức thời, nên có một khoảng thời gian trong đó một số bản sao sẽ có thay đổi gần đây nhất, nhưng một số khác thì không. Nói cách khác, các bản sao sẽ không nhất quán lẫn nhau. Tuy nhiên, sự thay đổi cuối cùng sẽ được lan truyền đến tất cả các bản sao, và do đó, thuật ngữ tính nhất quán cuối cùng của hồi giáo. Thuật ngữ nhất quán cuối cùng chỉ đơn giản là một sự thừa nhận rằng có một sự chậm trễ không giới hạn trong việc truyền bá một thay đổi được thực hiện trên một máy cho tất cả các bản sao khác. Tính nhất quán cuối cùng không có ý nghĩa hoặc có liên quan trong các hệ thống tập trung (bản sao đơn) vì không cần truyền bá.

nguồn: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


1

Trong tiếng Anh đơn giản, chúng tôi có thể nói: Mặc dù hệ thống của bạn có thể ở trạng thái không nhất quán, mục tiêu luôn là đạt được sự thống nhất tại một số điểm cho mỗi phần dữ liệu.


1

Cuối cùng, tính nhất quán có nghĩa là các thay đổi cần có thời gian để truyền và dữ liệu có thể không ở cùng trạng thái sau mỗi hành động, ngay cả đối với các hành động hoặc biến đổi dữ liệu giống hệt nhau. Điều này có thể gây ra những điều rất xấu xảy ra khi mọi người không biết họ đang làm gì khi tương tác với một hệ thống như vậy.

Vui lòng không triển khai các cửa hàng dữ liệu tài liệu quan trọng cho đến khi bạn hiểu rõ khái niệm này. Vặn vẹo việc triển khai kho dữ liệu tài liệu khó khắc phục hơn nhiều so với mô hình quan hệ bởi vì những điều cơ bản sẽ bị vặn lên đơn giản là không thể sửa được vì những điều bắt buộc phải sửa nó chỉ không có trong hệ sinh thái. Tái cấu trúc dữ liệu của một cửa hàng trên máy bay cũng khó hơn nhiều so với các phép biến đổi ETL đơn giản của RDBMS.

Không phải tất cả các cửa hàng tài liệu được tạo ra bằng nhau. Một số ngày nay (MongoDB) thực hiện các giao dịch hỗ trợ, nhưng việc di chuyển kho dữ liệu có thể tương đương với chi phí thực hiện lại.

CẢNH BÁO: Các nhà phát triển và thậm chí các kiến ​​trúc sư không biết hoặc không hiểu về công nghệ của kho lưu trữ dữ liệu tài liệu và sợ phải thừa nhận rằng vì sợ mất việc nhưng đã được đào tạo bài bản về RDBMS và chỉ biết các hệ thống ACID (nó có thể khác biệt như thế nào ?) và những người không biết công nghệ hoặc dành thời gian để tìm hiểu nó, sẽ bỏ lỡ việc thiết kế một kho dữ liệu tài liệu. Họ cũng có thể thử và sử dụng nó như một RDBMS hoặc cho những thứ như bộ đệm. Họ sẽ chia nhỏ những gì nên là các giao dịch nguyên tử hoạt động trên toàn bộ tài liệu thành các phần quan hệ của Google mà quên rằng sao chép và độ trễ là những thứ, hoặc tệ hơn nữa là kéo các hệ thống của bên thứ ba vào một giao dịch trực tuyến. Họ sẽ làm điều này để RDBMS của họ có thể phản chiếu hồ dữ liệu của họ, mà không cần quan tâm đến việc nó có hoạt động hay không và không cần kiểm tra, vì họ biết họ đang làm gì. Sau đó, họ sẽ tỏ ra ngạc nhiên khi các đối tượng phức tạp được lưu trữ trong các tài liệu riêng biệt như các đơn đặt hàng của Cameron, có ít thứ tự đặt hàng hơn so với dự kiến, hoặc có thể không có gì cả. Nhưng điều đó sẽ không xảy ra thường xuyên, hoặc thường là đủ để họ sẽ tiến lên phía trước. Họ thậm chí có thể không gặp vấn đề trong phát triển. Sau đó, thay vì thiết kế lại mọi thứ, họ sẽ ném vào sự chậm trễ của Google và các lần thử lại, và các cuộc kiểm tra của Google, để kiểm tra một mô hình dữ liệu quan hệ, không hoạt động, nhưng sẽ thêm phức tạp mà không có lợi. Nhưng bây giờ đã quá muộn - điều đã được triển khai và bây giờ doanh nghiệp đang chạy trên nó. Cuối cùng, toàn bộ hệ thống sẽ bị loại bỏ và bộ phận sẽ được thuê ngoài và người khác sẽ duy trì nó. Nó vẫn không hoạt động chính xác, nhưng chúng có thể thất bại ít hơn so với thất bại hiện tại.


0

Sự thống nhất cuối cùng giống như một quang phổ. Một đầu bạn có sự nhất quán mạnh mẽ và mặt khác bạn có sự nhất quán cuối cùng. Ở giữa có các cấp độ như Ảnh chụp, đọc bài viết của tôi, sự cứng nhắc giới hạn. Doug Terry có một lời giải thích tuyệt đẹp trong bài báo của mình về bóng chày thống nhất cuối cùng .

Theo tôi tính nhất quán cuối cùng về cơ bản là dung sai cho dữ liệu ngẫu nhiên theo thứ tự ngẫu nhiên mỗi khi bạn đọc từ một cửa hàng dữ liệu. Bất cứ điều gì tốt hơn đó là một mô hình nhất quán mạnh mẽ hơn. Ví dụ: ảnh chụp nhanh có dữ liệu cũ nhưng sẽ trả về cùng một dữ liệu nếu được đọc lại để có thể dự đoán được. Đôi khi, ứng dụng có thể chấp nhận dữ liệu cũ trong một khoảng thời gian nhất định mà vượt quá yêu cầu dữ liệu nhất quán.

Nếu bạn nhìn vào ý nghĩa của tính nhất quán, nó liên quan nhiều hơn đến tính đồng nhất hoặc thiếu độ lệch. Vì vậy, trong thuật ngữ hệ thống máy tính không có nghĩa là dung sai cho các biến thể không mong muốn. Nó có thể được giải thích rất tốt qua ATM. ATM có thể ngoại tuyến do đó phân kỳ từ số dư tài khoản từ các hệ thống cốt lõi. Tuy nhiên, có một sự khoan dung cho thấy sự cân bằng khác nhau cho một cửa sổ thời gian. Khi ATM trực tuyến, nó có thể đồng bộ hóa với các hệ thống cốt lõi và phản ánh sự cân bằng tương tự. Vì vậy, một ATM có thể được nói là cuối cùng phù hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.