Transactional OutboxХочу розповісти про один з реально корисних патернів, який спрощує життя при роботі з legacy системами.
Сучасне legacy - це не завжди стара система. AI вніс свої поправки в розуміння legacy і тепер це може бути відносно новий продукт, який важко розвивати і мінорні зміни можуть призвести до каскадного падіння всієї системи.
Які є варіанти роботи з такими системами?1️⃣
Переписати з нуля 😁😁
Найочевидніше, що може прийти в голову - знести все і зробити по нормальному.
Але на практиці таке не працює через велику кількість нюансів і бізнес-аспектів, які не видно на поверхні тому зазвичай або виходить така сама какуля або проєкт згортається і приймається рішення розвивати існуючу систему.
2️⃣
Залишити як є і найняти більше розробниківЦе робочий варіант, який часто використовують. Але тут є важливий нюанс - чим складніша система тим дорожче будуть коштувати розробники. При цьому технічний борг продовжуватиме рости і на довгостроковому горизонті вам все одно потрібно буде щось робити з системою.
3️⃣
Залишити legacy і паралельно створювати нову системуНайбільш робочий варіант, суть якого полягає в тому щоб паралельно з legacy-системою розробляти нову систему, яка буде сумісна з поточною і поступово її замінить.
Тут багато підходів, патернів і набитих шишок, про які я буду писати в Telegram. Один з них - це
Transactional Outbox.
Суть його в тому, щоб синхронізувати legacy і нову систему за допомогою подій, не ризикуючи втратити дані в момент їх передачі. Для цього буде використовуватися
окрема таблиця (Outbox) де ми будемо зберігати інформацію про зміни в базі даних
Окрім цього, в нас буде
окремий worker, який буде читати outbox таблицю і передавати події в брокер, який відправить їх в нову систему для синхронізації даних.
У спрощеному вигляді це працює так:
Legacy → таблиця Outbox → брокер → нова система.Я декілька разів обмазувався legacy, як у ролі розробника так і на більш кошерних позиціях і можу сказати, що це реально робочий підхід. Зазвичай, його реалізація буде різною в кожному конкретному кейсі, але суть залишається та сама.
Детальніше читай тут.#microservices