Виходячи з того, що я зрозумів про можливу послідовність, усі ці послуги (споживачі) отримуватимуть подію одночасно та оброблятимуть їх окремо, що, в хорошому сценарії, призведе до узгодження даних.
Ні, не обов’язково. Як я коментував, ми не можемо скасувати надісланий електронний лист, тому нам ще потрібна така собі "послідовність". IPC над керованими подіями керуванням даними не виключається з оркестрування 1 .
Наприклад, електронний лист не слід надсилати, якщо попередні транзакції не завершилися успішно і служба електронної пошти не отримає підтвердження цього. 3
Однак що робити, якщо служба не обробить подію? наприклад, раптове відключення, помилка бази даних тощо ... Яка хороша модель / практика для усунення цих помилок транзакцій?
Привітайтеся з помилками розподілених обчислень . Саме вони ускладнюють справи, і, як завжди, немає срібних куль, щоб з ними боротися.
Перш ніж розпочати нашу подорож у пошуках Втраченого ковчега, ми повинні розглянути питання про те, щоб спочатку запитати організацію. Часто рішення полягає в тому, як організація стикається з цими проблемами в реальному світі .
Що кожен (департаменти) робить, коли певні дані відсутні або неповні?
Ми зрозуміємо, що різні відділи мають різні рішення, які, як правило, складають рішення, яке потрібно реалізувати.
У будь-якому випадку, тут є деякі практики, які можуть допомогти нам в розробці стратегії.
Замість того, щоб гарантувати, що система постійно знаходиться у постійному стані, натомість ми можемо прийняти, що система отримає її в якийсь момент у майбутньому. Цей підхід особливо корисний для довготривалих бізнес-операцій.
Спосіб досягнення системи узгодженості змінюється від системи до системи. Це може залучати від автоматизованих процесів до якогось втручання людини. Наприклад, типова спроба її знову пізніше або контакт із службою обслуговування клієнтів .
Відмовитись від усіх операцій
Поверніть систему назад у стійкий стан за рахунок компенсації транзакцій . Однак ми маємо враховувати, що ці транзакції теж можуть провалитися, що може призвести до того, що непослідовність вирішити ще складніше. І, знову ж таки, ми не можемо скасувати надісланий електронний лист.
Для низької кількості транзакцій такий підхід є здійсненним, оскільки кількість компенсаційних транзакцій також є низькою. Якщо в МПК було задіяно кілька бізнес-транзакцій, обробка однієї компенсаційної транзакції для кожної з них була б складним завданням.
Якщо ми підемо на компенсацію транзакцій , ми вважаємо, що модель дизайну автоматичних вимикачів буде дуже корисною - і я обов'язково наважуся сказати -
Розподілені транзакції
Ідея полягає в охопленні декількох транзакцій в рамках однієї транзакції за допомогою загального керуючого процесу, відомого як менеджер транзакцій . Загальний алгоритм обробки розподілених транзакцій - це двофазна фіксація .
Основна стурбованість розподілених транзакцій полягає в тому, що вони покладаються на блокування ресурсів протягом його життєвого часу, і, як ми знаємо, ситуація може піти не так і для менеджера транзакцій .
Якщо Менеджери транзакцій піддаються збиткові, ми можемо закінчити кілька блокувань у різних обмежених контекстах, що призводить до несподіваної поведінки внаслідок зачеплення повідомлень. 2
Декомпозиція операцій. Чому?
Якщо ви декомпонуєте існуючу систему і знаходите набір концепцій, які дійсно хочуть знаходитись в межах однієї межі транзакції, можливо, залиште їх до останнього.
Сем Ньюмен
Відповідно до вищезазначених аргументів, Сем - у своїй книзі " Будівництво мікросервісів" - стверджує, що, якщо ми дійсно не можемо дозволити собі можливу послідовність, нам слід уникати розділення операції зараз.
Якщо ми не можемо дозволити собі розділити певні операції на дві або більше транзакцій, можливо, можна сказати, що - ймовірно, - ці транзакції належать до одного і того ж обмеженого контексту, або - як мінімум - до наскрізного контексту, який залишається моделювати.
Наприклад, у нашому випадку ми усвідомлюємо, що транзакції №1 та №2 тісно пов’язані між собою і, ймовірно, обидва можуть належати до одних і тих самих обмежених контексту Облікові записи , Користувачі , Реєстрація , що б там не було ...
Подумайте про розміщення обох операцій в межах однієї транзакції. Це полегшило б всю операцію. Також зважує рівень критичності кожної транзакції. Ймовірно, якщо транзакція №2 провалиться, це не повинно ставити під загрозу всю операцію. У разі сумнівів зверніться до організації .
1: Не такий тип оркестрації, як ви думаєте. Я не кажу про оркестрацію ESB. Я говорю про те, щоб служби реагували на належну подію.
2: Можливо, ви знайдете цікаві думки Сема Ньюмена щодо розподілених транзакцій.
3: Перевірте відповідь Девіда Паркера щодо цього питання.