Выпуск №8 (Апрель)

https://doi.org/10.25313/2520-2057-2018-8

XL Международная научно-практическая конференция «Актуальные проблемы современной науки», 28.03.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

МНПК "Цифровая трансформация и инновации в экономике, праве, государственном управлении, науке и образовательных процессах", 18-21.03.2019

XXXIX Международная научно-практическая конференция «Актуальные проблемы современной науки», 27.02.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XIII Международная научно-практическая конференция «Научный диспут: вопросы экономики и финансов», 31.01.2019 (Совместная конференция с Финансово-экономическим научным советом)

XXXVIII Международная научно-практическая конференция «Актуальные проблемы современной науки», 30.01.2019 (Совместная конференция с Международным научным центром развития науки и технологий)

XXXVІI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.12.2018 (Совместная конференция с Международным научным центром)

XXXVI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.11.2018 (Совместная конференция с Международным научным центром)

XIII Международная научно-практическая конференция «Актуальные проблемы экономики и финансов», 31.10.2018 (Совместная конференция с Финансово-экономическим научным советом)

XXXV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.10.2018 (Совместная конференция с Международным научным центром)

XXXIV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.09.2018 (Совместная конференция с Международным научным центром)

ХXXIII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.08.2018 (Совместная конференция с Международным научным центром)

ХXXII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 31.07.2018 (Совместная конференция с Международным научным центром)

XII Международная научно-практическая конференция «Актуальные проблемы экономики и финансов», 31.07.2018 (Совместная конференция с Финансово-экономическим научным советом)

ХXXI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.06.2018 (Совместная конференция с Международным научным центром)

ХІ Международная научно-практическая конференция «Глобальные проблемы экономики и финансов», 31.05.2018 (Совместная конференция с Финансово-экономическим научным советом)

XXХ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.05.2018 (Совместная конференция с Международным научным центром)

XXIХ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.04.2018 (Совместная конференция с Международным научным центром)

ХХVIІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.03.2018 (Совместная конференция с Международным научным центром)

ІІІ МНПК "Экономика, финансы и управление в XXI веке: анализ тенденций и перспективы развития", 19-22.03.2018 (Совместная конференция с Финансово-экономическим научным советом)

X Международная научно-практическая конференция «Глобальные проблемы экономики и финансов», 28.02.2018 (Совместная конференция с Финансово-экономическим научным советом)

ХХVІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 27.02.2018 (Совместная конференция с Международным научным центром)

ХХVІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.01.2018 (Совместная конференция с Международным научным центром)

XІІ Международная научно-практическая конференция «Научный диспут: вопросы экономики и финансов», 29.12.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХХV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.12.2017 (Совместная конференция с Международным научным центром)

ХХІV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.11.2017 (Совместная конференция с Международным научным центром)

XI Международная научно-практическая конференция «Актуальные проблемы экономики и финансов», 31.10.2017 (Совместная конференция с Финансово-экономическим научным советом)

XІ Международная научно-практическая конференция «Научный диспут: вопросы экономики и финансов», 29.09.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХХIІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.09.2017 (Совместная конференция с Международным научным центром)

X Международная научно-практическая конференция «Актуальные проблемы экономики и финансов», 31.07.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХXII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.07.2017 (Совместная конференция с Международным научным центром)

ХXI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.06.2017 (Совместная конференция с Международным научным центром)

IX Международная научно-практическая конференция «Глобальные проблемы экономики и финансов», 31.05.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХX Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.05.2017 (Совместная конференция с Международным научным центром)

"Тенденции развития национальных экономик: экономическое и правовое измерение" 18-19.05.2017 (Совместная конференция с Финансово-экономическим научным советом и ККИБиП)

ХIX Международная научно-практическая конференция: "Актуальные проблемы современной науки", 27.04.2017 (Совместная конференция с Международным научным центром)

IX Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 31.03.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХVIII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.03.2017 (Совместная конференция с Международным научным центром)

МНПК "Экономика, финансы и управление в XXI веке: анализ тенденций и перспективы развития", 20–23.03.2017 (Совместная конференция с Финансово-экономическим научным советом)

VIII Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 28.02.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХVII Международная научно-практическая конференция: "Актуальные проблемы современной науки", 27.02.2017 (Совместная конференция с Международным научным центром)

VIII Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 31.01.2017 (Совместная конференция с Финансово-экономическим научным советом)

ХVI Международная научно-практическая конференция: "Актуальные проблемы современной науки", 30.01.2017 (Совместная конференция с Международным научным центром)

ХV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.12.2016 (Совместная конференция с Международным научным центром)

VIII Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 28.12.2016 (Совместная конференция с Финансово-экономическим научным советом)

VII Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 30.11.2016 (Совместная конференция с Финансово-экономическим научным советом)

ХІV Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.11.2016 (Совместная конференция с Международным научным центром)

VII Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 31.10.2016 (Совместная конференция с Финансово-экономическим научным советом)

ХІІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 28.10.2016 (Совместная конференция с Международным научным центром)

VII Международная научно-практическая конф. «Научный диспут: вопросы экономики и финансов», 30.09.2016 (Совместная конференция с Финансово-экономическим научным советом)

ХІІ Международная научно-практическая конференция: "Актуальные проблемы современной науки", 29.09.2016 (Совместная конференция с Международным научным центром)

XI Международная научно-практическая конференция «Актуальные проблемы современной науки», 30.08.2016 (Совместная конференция с Международным научным центром)

ІV Международная научно-практическая конф. "Экономика и управление в XXI веке: анализ тенденций и перспектив развития", 29.07.2016 (Совместная конференция с Финансово-экономическим научным советом)

X Международная научно-практическая конференция "Актуальные проблемы современной науки", 28.07.2016 (Совместная конференция с Международным научным центром)

VІ Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 30.06.2016 (Совместная конференция с Финансово-экономическим научным советом)

ІX Международная научно-практическая конференция "Актуальные проблемы современной науки", 29.06.2016 (Совместная конференция с Международным научным центром)

VI Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 31.05.2016 (Совместная конференция с Финансово-экономическим научным советом)

VIIІ Международная научно-практическая конференция "Актуальные проблемы современной науки", 30.05.2016 (Совместная конференция с Международным научным центром)

V Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 29.04.2016 (Совместная конференция с Финансово-экономическим научным советом)

VIІ Международная научно-практическая конференция "Актуальные проблемы современной науки", 28.04.2016 (Совместная конференция с Международным научным центром)

VІ Международная научно-практическая конференция "Актуальные проблемы современной науки", 31.03.2016 (Совместная конференция с Международным научным центром)

ІI Международная научно-практическая конф. "Экономика и управление в XXI веке: анализ тенденций и перспектив развития", 30.03.2016 (Совместная конференция с Финансово-экономическим научным советом)

V Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 21-24.03.2016 (Совместная конференция с Финансово-экономическим научным советом)

V Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 26.02.2016 (Совместная конференция с Финансово-экономическим научным советом)

II Международная научно-практическая конференция: "Научный диспут: актуальные вопросы медицины" 20.02.2016 (Совместная конференция с Международным научным центром)

ІV Международная научно-практическая конференция "Актуальные проблемы современной науки", 29.12.2015 (Совместная конференция с Международным научным центром)

IV Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 28.12.2015 (Совместная конференция с Финансово-экономическим научным советом)

IV Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 30.11.2015 (Совместная конференция с Финансово-экономическим научным советом)

IV Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 29.10.2015 (Совместная конференция с Финансово-экономическим научным советом)

Международная научно-практическая конференция: "Научный диспут: актуальные вопросы медицины" 28.10.2015 (Совместная конференция с Международным научным центром)

III Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 30.09.2015 (Совместная конференция с Финансово-экономическим научным советом)

III Международная научно-практическая конференция "Актуальные проблемы экономики и финансов", 31.08.2015 (Совместная конференция с Финансово-экономическим научным советом)

ІІІ Международная научно-практическая конференция "Научный диспут: вопросы экономики и финансов", 30.06.2015 (Совместная конференция с Финансово-экономическим научным советом)

ІІ Международная научно-практическая конференция "Актуальные проблемы современной науки", 29.06.2015 (Совместная конференция с Международным научным центром)

II Международная научно-практическая конференция "Глобальные проблемы экономики и финансов", 28.05.2015 (Совместная конференция с Финансово-экономическим научным советом)

Актуальные проблемы экономики и финансов, 29.04.2015 (Совместная конференция с Финансово-экономическим научным советом)

Научный диспут: вопросы экономики и финансов, 31.03.2015 (Совместная конференция с Финансово-экономическим научным советом)

Актуальные проблемы современной науки, 27.03.2015 (Совместная конференция с Международным научным центром)

Глобальные проблемы экономики и финансов, 27.02.2015 (Совместная конференция с финансово-экономическим научным советом)



Пiпiч А. А. Застосування хореографії в шаблоні проектування Сага // Міжнародний науковий журнал "Інтернаука". — 2018. — №8.


Отрасль науки: Технические науки
Скачать статью (pdf)

Інфoрмaцiйнi тeхнoлoгiї

УДК 000.04

Пiпiч Артeм Андрiйoвич

магістр кoмп’ютeрних нaук

Нaцioнaльного тeхнiчного унiвeрcитeту Укрaїни

«Київcький пoлiтeхнiчний iнcтитут імені Ігоря Сікорського»

Пипич Артём Андрeeвич

магистр кoмпьютeрных нaук

Нaциoнaльного тeхничecкого унивeрcитeта Укрaины

«Киeвcкий пoлитeхничecкий инcтитут имени Игоря Сикорского»

Pipich Artem

Master of Computer Science of the

National Technical University of Ukraine

«Igor Sikorsky Kyiv Polytechnic Institute»

ЗАСТОСУВАННЯ ХОРЕОГРАФІЇ В ШАБЛОНІ ПРОЕКТУВАННЯ САГА

ПРИМЕНЕНИЕ ХОРЕОГРАФИИ В ШАБЛОНЕ ПРОЕКТИРОВАНИЯ САГА

THE USE OF СHOREOGRAPHY IN SAGA DESIGN PATTERN

Анoтaцiя. Розглянуто шаблон проектування Сага, варіацію його реалізації за використання хореографії; переваги та недоліки такого підходу.

Ключoвi cлoвa: сервіс, транзакція, подія, публікація події, хореографія.

Аннoтaция. Рассмотрен шаблон проектирования Сага, вариация его реализации при использование хореографии; преимущества и недостатки такого подхода.

Ключeвыe cлoвa: сервис, транзакция, событие, публикация события, хореография.

Summary. The design pattern of Saga, the variation of its implementation for the use of choreography was considered; the advantages and disadvantages of this approach..

Key words: service, transaction, event, publication of the event, choreography.

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

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

За втрати цієї властивості, RDBMS стає досить поганим вибором для збереження, оскільки можна виконати ту саму «одиночну атомну транзакцію», але в десятки разів швидше, просто використовуючи базу даних NoSQL, таку як Couchbase. Саме тому більшість компаній, що працюють з мікросервісами, також використовують NoSQL.

Щоб продемонструвати цю проблему, розглянемо наступну архітектуру мікросервісів на високому рівні системи електронної комерції (Рисунок 1).

Рис. 1. Архітектура мікросервісів електронної комерції [2]

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

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

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

Шаблон SAGA

Одна з найбільш відомих моделей для розподілених транзакцій називається Сага. Перший документ про неї був опублікований ще в 1987 році і це зробило патерн досить популярним рішенням на той час.

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

Існує кілька різних способів реалізації транзакції із сагами, але два найбільш популярні:

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

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

Події / Хореографія

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

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

Таким чином, так це виглядатиме в за використання у прикладі з електронної комерції.

Order Service зберігає нове замовлення, встановлює його стан в очікування та публікує подію під назвою ORDER_CREATED_EVENT.

Payment Service слухає ORDER_CREATED_EVENT, сплачує замовлення (локальна транзакція) та публікує власну подію BILLED_ORDER_EVENT.

Stock Service слухає BILLED_ORDER_EVENT, оновлює доступний ліміт, готує продукти, куплені в замовленні, та публікує ORDER_PREPARED_EVENT.

Delivery Service прослуховує ORDER_PREPARED_EVENT, після чого забирає та доставляє товар, так як знає, що він був підготовлений у Stock Service. Зрештою, він публікує ORDER_DELIVERED_EVENT

Нарешті, Order Service прослуховує ORDER_DELIVERED_EVENT і встановлює стан замовлення як завершене.

У вищезгаданому випадку, якщо стан замовлення треба відстежувати, Order Service може просто слухати всі події та оновлювати стан.

Відкат у розподілених транзакціях

Відкат розподіленої транзакції не є аж занадто простим. Зазвичай необхідно ввести ще одну операцію / транзакцію, щоб компенсувати те, що було зроблено раніше.

Припустимо, що Stock Service не виконав свою локальну транзакцію. В такому разі відкат виглядатиме так:

  • Stock Service публікує PRODUCT_OUT_OF_STOCK_EVENT;
  • Order Service та Payment Service слухають дану подію;
  • Payment Service повертає кошти клієнта;
  • Order Service встановлює стан замовлення як невдалий   

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

Переваги та недоліки дизайну Подій / Хореографії Saga

Події / Хореографія є природним способом реалізації моделі Саги; вона проста для зрозуміння, не вимагає багато зусиль для побудови, а всі учасники є слабо пов'язаними (loosely coupled), оскільки не мають безпосереднього знання один одного. Якщо певна транзакція включає в себе 2-4 кроки, застосування цього патерну може бути доволі доцільним.

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

І, врешті, тестування було б доволі складним, так як передбачало б імітування поведінки транзакції, в якій повинні працювати всі сервіси.

Література

  1. Pattern: Saga / Microservice Architecture. – 2017 [Електронний ресурс]. - Режим доступу: http://microservices.io/patterns/data/saga.html - 10.04.2018.
  2. Saga Pattern How to implement business transactions using Microservices - 2018 [Електронний ресурс]. - Режим доступу: https://blog.couchbase.com/saga-pattern-implement-business-transactions-using-microservices-part/ - 12.04.2018.