Координація сервісів і керування станом

Розроблення застосунків на AWS

Ricardo Sueiras

Principal Technologist

Координація сервісів

 

координація сервісів

  • Кілька сервісів мають узгоджено виконати робочий процес.
  • Потрібна стратегія координації.
  • Два підходи: оркестрація і хореографія.
Розроблення застосунків на AWS

Оркестрація

 

шаблон оркестрації

  • Центральний оркестратор координує робочий процес.
  • Оркестратор керує послідовністю і вирішує, який сервіс запускати далі.
  • Корисно для повторних спроб, умовної логіки та обробки помилок.
  • В AWS: реалізується Step Functions разом із Lambda, ECS, DynamoDB.
Розроблення застосунків на AWS

Оркестрація

 

шаблон оркестрації

  • Логіка робочого процесу в одному місці — простіше налагоджувати й моніторити.
  • Компроміс: зʼявляється центральна залежність.
Розроблення застосунків на AWS

Хореографія

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

 

хореографія

Розроблення застосунків на AWS

Хореографія

  • В AWS: EventBridge, SNS, SQS.
  • Висока масштабованість.
  • Компроміс: зі зростанням процесів важче розуміти й налагоджувати.

 

хореографія

Розроблення застосунків на AWS

Архітектура на основі подій

  • Сервіси обмінюються подіями: публікують і споживають.
  • Сприяє слабкому звʼязуванню між сервісами.
  • Підвищує масштабованість.
  • Дозволяє паралельну обробку подій.
  • Нові сервіси можуть підписуватися без змін наявних.

 

архітектура на подіях

Розроблення застосунків на AWS

Архітектура на основі подій

 

архітектура на подіях

  • Компроміси при впровадженні EDA:
  • Проєктуйте з урахуванням зрештою узгодженості.
  • Реалізуйте ідемпотентність.
  • Обробка відмов складніша.
Розроблення застосунків на AWS

Ідемпотентність

 

ідемпотентність

  • Багаторазовий запуск однієї операції дає той самий результат.
  • Критичний принцип проєктування в асинхронних і подієвих системах.
  • Розподілені системи можуть доставляти дублікати подій (ретраї, збої мережі, повторна обробка).
  • Забезпечує коректність і надійність системи.
Розроблення застосунків на AWS

Черги «мертвих» листів (DLQ)

 

ltq

  • Керує збоями в асинхронній взаємодії.
  • Ізолює проблемні «отруйні» повідомлення.
  • Після неодноразових невдалих ретраїв повідомлення переходить у DLQ.
  • Основний потік обробки продовжує працювати.
Розроблення застосунків на AWS

Черги «мертвих» листів (DLQ)

  • Використовуйте, коли порядок повідомлень не критичний.
  • Пропускайте для некритичних систем, де припустима епізодична втрата даних.
  • Уникайте, коли потрібно зберегти порядок повідомлень.

 

ltq

Розроблення застосунків на AWS

Керування станом

  • Керування станом — основа cloud-native застосунків.
  • Стан — це дані, збережені між взаємодіями.
  • Локальне зберігання стану на сервері обмежує масштабованість і стійкість.

 

керування станом

Розроблення застосунків на AWS

Керування станом

  • Компроміси менеджменту стану залежать від того, що ви будуєте.
  • Зовнішній стан підвищує масштабованість і стійкість.
  • Вартість: додаткова затримка й складність.
  • Враховуйте: узгодженість, кешування та шаблони доступу до даних.

 

керування станом

Розроблення застосунків на AWS

Stateful

 

стан із збереженням

  • Дані сесії зберігаються на сервері.
  • Запити мають надходити до того ж екземпляра (sticky sessions).
  • Обмежує гнучкість масштабування.
  • У разі збою екземпляра сесія втрачається.
Розроблення застосунків на AWS

Stateless

 

без стану

  • Кожен запит обробляється незалежно.
  • Стан на сервері не зберігається.
  • Стан зберігається в зовнішніх системах.
  • Переважний підхід для cloud-native застосунків.
  • Будь-який екземпляр може обробити будь-який запит — горизонтальне масштабування просте.
Розроблення застосунків на AWS

Давайте потренуємось!

Розроблення застосунків на AWS

Preparing Video For Download...