Conductor directing symphony orchestra with performers on background.
Якщо вам потрібно координувати роботу AWS сервісів та об’єднати окремі процеси у єдиний воркфлоу, AWS Step Functions — те, що треба.
У статті ви дізнаєтесь, чим відрізняється цей інструмент від інших подібних рішень в екосистемі AWS. Я розгляну основні задачі, які може вирішити AWS Step Functions, та наведу спрощені приклади налаштування воркфлоу.
AWS Step Functions застосовується для оркестрації AWS сервісів. У розробці програмного забезпечення оркестрація означає автоматичну конфігурацію та координацію сервісів або систем. Це дозволяє поєднати їх в єдиний автоматизований процес.
Інструмент для оркестрації забирає на себе типові задачі, що можуть виникнути при створенні воркфлоу, зокрема:
Ці задачі виводяться із зони відповідальності сервісів, які включені у воркфлоу. Відтак код сервісів стає простішим, а розробники можуть сконцентруватися на реалізації бізнес-логіки.
AWS Step Functions — це безсерверний інструмент оркестрації, який може керувати AWS сервісами і створювати з їх комбінацій воркфлоу.
Step Functions базується на поняттях state machine і стейтів (станів). Стейт — одиниця роботи, тобто крок у воркфлоу, що виконує інший AWS сервіс. State machine — це опис переходів між цими стейтами. Прикладом простої стейт машини може бути вендінговий автомат. Він має зліченну, заздалегідь визначену кількість стейтів та ланцюжки переходів між ними:
AWS Step Functions дозволяє створювати воркфлоу через візуальний редактор (Workflow Studio) або через JSON документ. Нижче я наведу перелік поширених патернів побудови воркфлоу.
Step Functions дає можливість будувати ланцюжки сервісів, що запускаються у визначеному порядку. Також можна керувати вхідними і вихідними даними для кожного кроку, передавати дані з одного кроку в інший.
Можна обирати різні гілки виконання воркфлоу в залежності від даних.
Степ функція реалізує як ретраї для неуспішних кроків так і try/catch функціонал з можливістю по-різному обробляти різні типи помилок.
Рішення для випадків, коли потрібно дочекатися відповіді з боку людини або сторонньої системи, і повернутися до воркфлоу. Степ функція видає таск токен, який можна відправити сторонній системі, і призупиняє виконання. Після того як таск токен повертається назад, воркфлоу продовжується.
Можливість запускати окремі гілки воркфлоу у паралель. Такі гілки необов’язково повинні мати однакову структуру і довжину. Для кожної гілки потрібно визначити умову успішного завершення. В результаті дані усіх гілок складаються у масив, до якого можна отримати доступ з наступних кроків.
Паралелізація ідентичних частин воркфлоу. Є вхідний масив даних, який потрібно обробити однаковим чином, і всі потоки обробки запускаються в паралель. Після закінчення обробки результати збираються у вихідний масив і можуть використовуватись у наступних кроках.
Чому б просто не викликати наступну лямбду з коду попередньої або не використовувати додаткову лямбду як оркестратор? Якщо ми хочемо створити альтернативу до Step Functions за допомогою лямбди та мати центральну лямбду-координатор, яка зберігає стан між стейтами та інкапсулює управління воркфлоу, це призводить до кількох проблем:
Якщо ж не мати центрального координатора, а створити ланцюжок лямбд, що викликають одна одну, то логіка, що безпосередньо стосується управління воркфлоу, розподіляється між усіма лямбдами-учасницями. Це переплутує її з функціональною логікою. Підтримувати такий код буде складніше.
До того ж це тісно пов’язує лямбди між собою й ускладнює подальші зміни. Наприклад, додавання або видалення сервісу з воркфлоу. Кращим рішенням для подолання цих проблем є використання Step Functions, або роз’єднання сервісів за допомогою черг (наприклад, AWS SQS).
SWF допомагає координувати роботу між розподіленими компонентами застосунку. Сервіс з’явився на 4 роки раніше за Step Functions. На відміну від них, SWF це не серверлес сервіс. Тож розробники відповідають за управління інфраструктурою, на якій «біжить» воркфлоу.
Для роботи із SWF доведеться власноруч створити програму-координатор, яка керуватиме виконанням тасків. SWF зі свого боку допомагає відстежувати прогрес їх виконання, зберігає історію всіх кроків, слугує посередником у міжсервісній комунікації.
Згідно з офіційною документацією, AWS рекомендує розпочинати нові проєкти, що потребують оркестрації, саме на Step Functions. Це просте, наочне рішення на противагу SWF. Винятком є випадки, коли складність воркфлоу потребує більшого контролю над програмою-координатором, ніж це дозволяє Step Functions.
Також існує AWS Flow Framework — офіційний фреймворк, що спрощує розробку для SWF. Наразі він підтримується тільки для Java. Розробка під інші мови програмування поки не планується.
Це event bus з великою кількістю доступних інтеграцій з AWS сервісами. EventBridge збирає івенти з сервісів і дозволяє визначати правила, за якими маршрутизує ці івенти в інші сервіси. Останні ж визначають поведінку, якою вони реагують на ті чи інші івенти. Цей паттерн інтеграції називається хореографією.
Хореографія відрізняється від оркестрації тим, що в ній відсутній єдиний координатор, який керує процесом.
Переваги такого підходу:
Серед недоліків хореографії — складність відстежування, траблшутингу і підтримки воркфлоу. Зважаючи на особливості оркестрації та хореографії, можна обирати між Step Functions та EventBridge для конкретної задачі.
Найчастіше EventBridge використовується в якості інтеграції для мікросервісів, якщо не потрібно суворо координувати і синхронізувати їхню роботу.
При створенні стейт машини необхідно обрати тип — Standard або Express. Standard більше підходить для тривалих воркфлоу максимум на рік. Час очікування у воркфлоу не оплачується. Платними є тільки кількість переходів між стейтами. Повна історія кожного виконання воркфлоу зберігається 90 днів.
Якщо не визначена поведінка Retry, Standard воркфлоу слідує моделі виконання exactly-once, тому підходить для неідемпонтентих дій. Тобто коли повторна дія змінює результат, досягнутий при першому виконанні.
Express воркфлоу оптимізований для обробки великого обсягу даних. Максимальна тривалість значно менша — 5 хвилин. Оплачується за кількістю виконань, тривалістю воркфлоу та обсягом використаної пам’яті. Слідує моделі at-least-once, тому підходить тільки для ідемпотентних тасків, де не страшно, якщо таск виконається більше, ніж раз.
Express не підтримує патерни інтеграції .sync (пауза воркфлоу, очікування на завершення джоби) та колбек із таск токеном (пауза воркфлоу, очікування на повернення токену).
Воркфлоу у Step Functions описується з допомогою Amazon States Language. ASL має синтаксис на основі JSON, додатковими внутрішніми функціями для обробки вхідних/вихідних даних та зданою структурою опису стейтів. JSON з визначенням стейт машини зберігається у файл із розширенням .asl.json.
Кожен воркфлоу повинен містити поле StartAt, масив стейтів і визначення закінчення флоу — поле End у стейті або стейт Success/Fail. Ось приклад воркфлоу з одним стейтом, що запускає лямбду:
Усі наведені тут і далі приклади коду можете переглянути у моєму GitHub.
Стейти — це будівельні блоки, з яких складається стейт машина. Стейти структуровані як маппінг імені стейту до його об’єкту. Вони можуть виконувати такі функції:
У такий стейт:
Ми отримаємо наступний аутпут:
Step Functions підтримує три патерни інтеграції сервісів:
Step Functions — гнучкий інструмент для оркестрації в екосистемі AWS. Між різними типами воркфлоу, видами стейтів та патернів інтеграції він дає можливість побудувати координований воркфлоу під широкий спектр задач.
У якості оркестратора AWS сервісів Step Functions простіше у використанні рішення, аніж AWS SWF. Step Functions дозволяє створювати воркфлоу як через зручний візуальний редактор, так і через JSON визначення. Також надає можливість інтегрувати у воркфлоу сторонні сервіси і навіть людське втручання.
Тому Step Functions має переваги над іншими рішеннями, якщо система потребує воркфлоу із центральним керуванням. Step Functions надає покрокове логування та інкапсулює логіку оркестрації та обробку помилок.
Днями я завзято нила про щось ChatGPT (експериментую між сеансами з живим терапевтом). І от…
«Крутіть колесо, щоб отримати знижку до 50%!» «Натисніть тут, щоб відкрити таємничу пропозицію!» «Зареєструйтесь зараз,…
Дуже хочеться робити якісь десктопні апки. Сумую за часами коли всі програми були offline-first, і…
Надсилаючи криптовалюту, багато новачків ставлять запитання: як працюють комісії та чому вони відрізняються в різних…
Нова афера набирає обертів — ось детальний розбір того, як фальшиві потенційні роботодавці намагаються вкрасти…
Соцмережа з можливістю вбудовувати повноцінні додатки прямо в пости — звучить як фантастика, але Farcaster…