Table of Contents

Розуміння проблеми консолідації даних у магазинах без серверів

Серверні магазини даних, такі як Amazon DynamoDB, Azure Cosmos DB, і Google Cloud Firestore пропонують автозакриття, платне ціноутворення, і знижені експлуатаційні надголовки. Однак їх розподілена природа вводить фундаментальні торгові марки в консистенції даних. Коли додаток читає дані відразу після написання його, користувач очікує, щоб побачити останнє значення. У глобально розподіленій системі, досягнення цієї гарантії стає непривабливим. теорема CAP] нагадує нам, що розподілений інформаційний магазин може забезпечити тільки два трьох гарантій: Консистенції, наявність та пріоритетність розділу [без ціни]

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

Моделі консистенції в магазинах без серверів

Сильна консистенція

Сильна консистенція гарантує, що кожен читає повертає останнє написання. У без серверів системи, це часто досягається шляхом читання з первинної реплікації або за допомогою протоколів quorum-на основі. Послуги, такі як підтримка динамоДБ , міцно послідовні читання] (при додаткову вартість та надійність) і Azure Cosmos DB пропонує сильну консистенцію для глобально розподілених рахунків за допомогою багатомайстрового повторення. Використовуйте сильну консистенцію при фінансові транзакції, автентифікації користувачів або системи бронювання вимагають абсолютної точності.

Подія на подію

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

Каусальна консистенція

Каусальна консистенція зберігає порядок роботи з обережністю пов’язаних операцій. Якщо робота А (оновлення профілю) відбувається перед роботою B (податок коментар, що стосується цієї картини), то будь-який спостерігач буде бачити А перед B. Ця модель сидить між сильною і подіючою консистенцією і підтримується такими послугами, як Google Cloud Datastore. Корисно для колаборативного редагування, соціальних живих та чат-додатків, де потрібна інформація про події.

Кращі практики з дотриманням вимог

1. Виберіть модель відповідності апробації для кожної операції

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

2. Використовуйте розподілені транзакції з Sagas або двома видами товарів

Коли бізнес-процес пропускає кілька магазинів даних або послуг, вам потрібно механізм підтримки атомності. Дистрифні операції] - так як двофазний комісій (2PC) протоколу - переконайтеся, що кожен учасник або комісії або аборти разом. Однак 2PC може бути повільним і зменшити доступність. Альтернативою є Saga шаблон, де кожна операція випромінює захід, який викликає компенсаційні дії, якщо щось не виходить. Багато платформи, які пропонують вбудовану операцію: [Dynamo транзакцій 25

3. Впровадження стратегій вирішення конфліктів

Конструктивно пише той самий елемент даних у багаторегіонному розгортанні може створювати конфлікти. Серверні магазини зазвичай використовують / last-parser-wins (LW), які зберігають останні часові темпи. Хоча простий, LWW може втратити дані, якщо годинники з сипучих. Для більш насичених семантичних засобів, використання версії перетворення або ]CRDTs (Conflict-Free Replicated Data Types)версія DOMB

4. Лівержко-демпотенційні операції та засоби

Невиконання мережі або переходові помилки можуть викликати клієнта речення, що може призвести до дублікування обробки. Проектування операцій, які повинні бути idempotent] усуває цей ризик. Наприклад, відзначає унікальний ключ від idempotency до кожного запиту запису; сервер може потім deduplicate запитів, які поділяють той самий ключ. Багато серверних SDKs підтримують idempotent пише на рідному. Комбінувати це з доцільним зворотним відключенням і Джиттером в ретри логіці, щоб зменшити вміст і підтримувати консистенцію без перебільшення заднього кінця.

5. Моніторинг інтегрності даних з змінними потоками та аудитами

У безсерверному середовищі ви можете використовувати змінити захоплення даних (CDC) функції, такі як ynamoDB Streams, Cosmos DB Change Feed, або Firestore’s в режимі реального часу слухачів для моніторингу всіх модифікацій. Встановити лямбда або функцію хмари для перевірки того, що дані варіативатори зберігаються після кожного зміни. Наприклад, банківська заявка може підписатися на транзакції і перевірити, що баланс завжди дорівнює сумі кредитів мінус дебетів. Регулярні запити аудиту - бігти на графіку - можна виявити drift і викликати правильні робочі процеси.

6. Оптимальне використання даних для вашого використання

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

Архітектурні візерунки, які консервують консистенцію

Командна збірка запитів (CQRS)

CQRS відокремлює моделі запису від моделей читання, що дозволяють кожному бути оптимізованим незалежно. Написання йдуть до сильної стабільної магазину; читання з часом приходять послідовні проекції. Цей шаблон особливо потужний при поєднанні з , що випромінює ], де всі зміни стану зберігаються як незмінні події. Читачі моделі можуть бути перебудовані з журналу подій, якщо проблеми консистенції коли-небудь виникають. Мартін Fowler частина на CQRS забезпечує відмінний огляд.

Захоплення подій та послідовна консистенція

Запобігання заходу зберігає послідовність подій замість поточного стану. Оскільки події є доповненими і незмінними, вони є природним чином послідовними. Послуги, такі як ДинамоД або Cosmos DB, можуть діяти як магазини подій. Споживачі процес подій, асинхронно, в кінцевому підсумку, будівлі, читати моделі. У рідкісному випадку конфлікту, ви можете переглянути потік події від відомого контрольного пункту. Цей шаблон забезпечує дратівливість і аудитабельність] при виконанні його прямопередбачуваних причин про консистенції кордонів.

Візерунок для надійного обміну повідомленнями

Коли функція сервера не пишеться в базу даних, а потім надішле повідомлення в чергу, дві операції можуть бути не атомними. outbox шаблон] вирішує це шляхом зберігання повідомлення в одній базі даних в рамках тієї ж операції. Окремий процес (наприклад, процесор потоку) читає скриньку і публікує повідомлення. Це гарантує, що запис бази даних і відправка повідомлень обидва, як зроблені, так і як рулонні назад, зберігаючи консистенцію по послугах. Провайдери SaaS люблять AWS Well-Architeced опис зовнішньої скриньки детально.

Спеціальні випадки: Geo‐Distribution та офлайн-писи

Мобільні та IoT-додатки часто працюють в автономному режимі та синхронізуються пізніше. Бездротовий постачальник SDK забезпечує безперервність роботи з синхронізацією, яка керує конфлікти через спеціальні конфліктні розв’язки. Наприклад, AWS AppSync з DynamoDB може об’єднати версії на основі своєчасних комп’ютерів або клієнто-орієнтованої логіки. При використанні таких бібліотек завжди перевіряють логіку вирішення конфліктів в умовах реального середовища мережі та контроль кількості конфліктів.

Для багаторівневої консистенції використовуйте групи консистенцій, де можливо — концепція підтримується Cosmos DB, що групи пов'язані елементи, тому вони завжди скопіюються разом. Це запобігає сценаріям, де зображення профілю користувача оновлюється в області А, але їх біоінновація (в одній групі) ще не прибув у регіон B.

Тестування та стратегія перевірки

Консистенції помилок часто поверхні тільки під розподіленими навантаженнями. Написати інтеграційні тести, які працюють проти реального без серверів емулятора або хмарного екземпляра і імітують одночасні записи і читання. Інструменти, такі як Jepsen] може переконатися, що ваш магазин даних поводиться правильно під мережевими перегородками. Для виробництва реалізуються канарні розгортання і поступово перемістіть трафік на нові методи кодів при моніторингу консистенції метрики. Дефін SLAs для застою (максимум прийнятний вік даних прочитаних) і вимірюють їх синтетичними операціями.

Редагування

Консультація даних в магазинах без серверів вимагає свідомих архітектурних вибору. Розуміння доступних моделей консистенції, використання розподілених транзакцій або шаблону saga, проектування ідемпотентних операцій, і механізмів вирішення конфліктів, ви можете побудувати додатки, які є масштабними і надійними. Моніторинг консистенції системи гарантує зміни потоків і перевірок, і приймає візерунки, такі як CQRS, стискання подій, і шаблон зовнішньої коробки для підтримки цілісності через межі служби. З цими кращими практиками, ваш серверний backend буде доставлений послідовний, правильний досвід своїх користувачів -навіть, як це масштаби для обробки глобального трафіку.