Подія консистенції в простому англійською мовою


130

Я часто чую про можливу послідовність у різних речах про NoSQL, сітках даних тощо. Схоже, визначення можливої ​​послідовності залежить від багатьох джерел (а може навіть залежить від конкретного зберігання даних).

Чи може хтось дати просте пояснення, що таке Побічна послідовність у загальних рисах, не пов’язана з будь-яким конкретним зберіганням даних?


1
Чи не допомогла, наприклад, Вікіпедія? en.wikipedia.org/wiki/Eventual_consistentcy
Олівер Чарльворт

21
@OliCharlesworth: ні. Можливо, це лише я, але абсолютно незрозуміло навіть після того, як прочитав двічі.
Роман

Відповіді:


228

Кінцева послідовність:

  1. Я дивлюся звіт про погоду і дізнаюся, що завтра піде дощ.
  2. Я кажу вам, що завтра піде дощ.
  3. Ваш сусід каже дружині, що завтра буде сонячно.
  4. Ти кажеш своєму сусідові, що завтра піде дощ.

Врешті-решт, усі сервери (ти, я, твій сусід) знаємо правду (що завтра піде дощ), але тим часом клієнт (його дружина) відійшов, думаючи, що буде сонячно, навіть якщо вона запитала після того, як один або кілька серверів (ви та я) мали більш сучасне значення.

На відміну від суворої консистенції / відповідності ACID:

  1. Баланс вашого банку становить 50 доларів.
  2. Ви депозитуєте 100 доларів США.
  3. Баланс вашого банку, запитуваний з будь-якого банкомату десь, становить 150 доларів.
  4. Ваша дочка знімає 40 доларів за допомогою своєї банкоматної картки.
  5. Баланс вашого банку, запитуваний з будь-якого банкомату десь, становить 110 доларів.

У жодному разі ваш баланс не може відображати нічого, крім фактичної суми всіх транзакцій, здійснених на вашому рахунку до цього моменту.

Причиною , чому так багато систем NoSQL мати в кінцевому підсумку послідовності є те , що практично всі вони призначені для розподілу, і з повністю розподіленими системами є супер-лінійні накладні для підтримки суворій послідовності (тобто ви можете тільки масштабувати до сих пір , перш ніж речі починають сповільнюватися вниз, і коли вони вам потрібні, викинете експоненціально більше обладнання на проблему, щоб не змінювати масштабування).


Я не розумію. Чи є зростання лінійним чи експоненціальним?
Maciek Kreft

4
Зростання накладних комунікацій системи з N строго послідовних вузлів, як правило, розуміється як надлінійне (тобто більше, ніж лінійне). Може бути експоненціальним, може бути кубічним ... Залежить від протоколу зв'язку тощо.
Кріс Шейн

2
Хороша відповідь. Деякі подальші запитання: чи не «погано», що запити на сервер можуть отримати неправильну / застарілу інформацію? Чи люди просто гаразд з цим чи є рішення для цього? Крім того, як з часом реплікуються дані на різних серверах? Якщо один із серверів вийшов з ладу, а дані реплікуються на всіх серверах, якщо цей сервер повертається назад, то як він оновлює свої дані?
благодарність

5
@noblerare це "погано" для різного ступеня поганості. Було б дуже погано, якби мій баланс банкоматів застарів. Менш погано, якщо мою базу даних журналу не дуже наздогнали, або якщо на моєму каналі Facebook на кілька секунд відстає. Механізми реплікації даних та довговічність дуже різноманітні і залежать від конкретної платформи. Для Кассандри (як приклад) письменник може вирішити, чи для того, щоб певна запис була успішною, її потрібно зробити на одному, усіх або кворумі (більшість) вузлів. HBase застосовує інший підхід, де певний вузол є "головним" для кожного ряду даних.
Кріс Шайн

Насправді більшість банківських систем з часом є послідовними.
Хаос

106

Кінцева послідовність:

  1. Ваші дані копіюються на декількох серверах
  2. Ваші клієнти можуть отримати доступ до будь-якого з серверів для отримання даних
  3. Хтось записує фрагмент даних на один із серверів, але він ще не був скопійований на решту
  4. Клієнт отримує доступ до сервера з даними та отримує найновішу копію
  5. Інший клієнт (або навіть той самий клієнт) отримує доступ до іншого сервера (той, який ще не отримав нову копію), і отримує стару копію

В основному, оскільки потрібен час для тиражування даних на декількох серверах, запити для читання даних можуть перейти на сервер з новою копією, а потім перейти на сервер зі старою копією. Термін "можливий" означає, що з часом дані будуть реплікуватися на всі сервери, і, таким чином, всі вони матимуть актуальну копію.

Поточна узгодженість є необхідною, якщо ви хочете, щоб прочитали низькі затримки, оскільки сервер, що відповідає, повинен повернути власну копію даних і не встигнути проконсультуватися з іншими серверами та досягти взаємної згоди щодо змісту даних. Я написав повідомлення в блозі, пояснюючи це більш детально.


2
Приємна публікація в блозі. Варто прочитати для когось нового в ідеї можливої ​​послідовності. Ця відповідь була б кращою, якби вона була переписана, щоб пояснити більше того, що є у дописі блогу.
аксіопісти

1
Добре пояснено у вашому блозі. Дякую, що поділились.
Атавр Рахман Мунна

12

Подумайте, у вас є додаток та його репліка. Тоді вам доведеться додати новий додаток до програми.

введіть тут опис зображення

Потім програма синхронізує дані з іншими репліками, показаними нижче

введіть тут опис зображення

Тим часом новий клієнт збирається отримати дані з однієї репліки, які ще не оновлюються. У цьому випадку він не може отримати правильні дані про дату. Тому що синхронізація отримує деякий час. У такому випадку це зрештою не узгоджується

Проблема полягає в тому, як ми можемо зрештою узгодженість ?

Для цього ми використовуємо додаток-посередник для оновлення / створення / видалення даних та використання прямого запиту для читання даних. які допомагають зробити зрештою консистенцію

введіть тут опис зображення введіть тут опис зображення


3

Коли програма вносить зміни до елемента даних на одній машині, цю зміну потрібно поширити на інші репліки. Оскільки розповсюдження змін не є миттєвим, існує проміжок часу, протягом якого деякі копії матимуть останню зміну, а інші - не. Іншими словами, копії будуть взаємно непослідовними. Однак зміни в кінцевому підсумку поширюватимуться на всі примірники, а отже, і на термін "можлива узгодженість". Термін "можлива узгодженість" - це просто підтвердження того, що існує необмежена затримка поширення змін, внесених на одній машині, до всіх інших примірників. Побічна послідовність не є значимою і не має значення в централізованих системах (в єдиному екземплярі), оскільки немає потреби в їх поширенні.

джерело: http://www.oracle.com/technetwork/products/nosqldb/documentation/consistency-explained-1659908.pdf


1

Простий англійською мовою, ми можемо сказати: Хоча ваша система може знаходитись у непослідовних станах, мета завжди полягає в тому, щоб досягти послідовності в якийсь момент для кожної інформації.


1

Врешті-решт, послідовність означає, що для розширення змін потрібен час, і дані можуть бути не в одному стані після кожної дії, навіть для однакових дій або перетворень даних. Це може спричинити дуже погані речі, коли люди не знають, що вони роблять під час взаємодії з такою системою.

Будь ласка, не застосовуйте важливі для зберігання даних документи, поки ви добре не зрозумієте цю концепцію. Розробити реалізацію сховища документів набагато важче виправити, ніж реляційну модель, тому що принципових речей, які будуть викручені, просто неможливо виправити, оскільки речі, необхідні для виправлення, просто відсутні в екосистемі. Переробляти дані запасного приміщення також набагато важче, ніж прості перетворення ETL RDBMS.

Не всі сховища документів створюються рівними. Деякі ці дні (MongoDB) роблять підтримку подібних транзакцій, але міграція сховищ даних, ймовірно, порівнянна з витратами на повторну реалізацію.

ПОПЕРЕДЖЕННЯ: Розробники та навіть архітектори, які не знають і не розуміють технології зберігання документів, і бояться визнати, що бояться втратити роботу, але пройшли класичну підготовку в RDBMS і знають лише системи ACID (наскільки це може бути різним ?) і хто не знає технології або не знайде час, щоб її вивчити, пропустить дизайн сховища документів. Вони також можуть спробувати використовувати його як RDBMS або для таких речей, як кешування. Вони розбивають, якими повинні бути атомні транзакції, які повинні оперувати над усім документом, на «реляційні» фрагменти, забуваючи, що реплікація та затримка - це речі, або ще гірше, перетягуючи сторонні системи в «транзакцію». Вони зроблять це, щоб їх RDBMS змогли відобразити озеро даних, без огляду на те, спрацює це чи ні, і без тестування, оскільки вони знають, що роблять. Тоді вони здивуються, коли складні об'єкти, що зберігаються в окремих документах, таких як "замовлення", мають менше "замовлених позицій", ніж очікувалося, або, можливо, взагалі немає. Але це не траплятиметься часто або досить часто, тому вони просто йдуть вперед. Вони можуть навіть не зачепити проблему в розвитку. Тоді, замість того, щоб переробляти речі, вони додаватимуть "затримки" та "повторні спроби" та "перевірки", щоб підробити реляційну модель даних, яка не буде працювати, але додасть додаткових складностей без користі. Але зараз вже пізно - річ розгорнута, і зараз бізнес ведеться на ній. Врешті-решт, вся система буде викинута, а департамент буде переданий в аутсорсинг, а хтось інший буде підтримувати його. Він все одно не буде працювати належним чином, але вони можуть вийти з ладу менш дорого, ніж поточний збій.


0

Подія консистенції більше схожа на спектр. На одному кінці ви маєте міцну стійкість, а на іншому - можливу послідовність. Між ними існують такі рівні, як "Знімок", читайте мої записи, обмежена несвіжість. Дуг Террі в своєму документі має прекрасне пояснення щодо можливої ​​консистенції через бейсбол .

Як на мене, можлива послідовність - це в основному толерантність до випадкових даних у випадковому порядку щоразу, коли ви читаєте з сховища даних. Все, що краще, ніж це - більш міцна модель узгодженості. Наприклад, знімок має застарілі дані, але поверне ті самі дані, якщо прочитати ще раз, тому це передбачувано. Іноді додаток може переносити несвіжі дані протягом певного часу, за який він вимагає послідовних даних.

Якщо ви подивитесь на значення послідовності, це більше стосується рівномірності або відсутності відхилення. Тож у некомп'ютерній системі це може означати толерантність до несподіваних змін. Це може бути дуже добре пояснено через банкомат. Банкомат може бути в автономному режимі, отже, розходячись від балансу рахунку від основних систем. Однак існує допуск для показу різних балансів за вікно часу. Як тільки банкомат з’явиться в Інтернеті, він може синхронізуватися з основними системами і відображати той самий баланс. Таким чином, можна сказати, що банкомат зрештою є послідовним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.