Проєктування відмовостійких і резилієнтних застосунків в AWS

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

Ricardo Sueiras

Principal Technologist

Побудова під резилієнтність

побудова під резилієнтність

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

все може відмовити

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

Тимчасові збої

 

тимчасові збої

  • Розумійте типові режими збоїв:
  • Тимчасові помилки зникають самі, зазвичай безпечно повторити спробу.
Розроблення застосунків на AWS

Тайм-аути

 

тайм-аути

  • Розумійте типові режими збоїв:
  • Тимчасові помилки зникають самі, зазвичай безпечно повторити спробу.
  • Тайм-аути: зовнішній сервіс надто довго відповідає.
Розроблення застосунків на AWS

Постійні помилки

 

постійні помилки

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

Ліміти API

 

обмеження API

  • Розумійте типові режими збоїв:
  • Тимчасові помилки зникають самі, зазвичай безпечно повторити спробу.
  • Тайм-аути: зовнішній сервіс надто довго відповідає.
  • Постійні помилки: запит принципово хибний, повтори не допоможуть.
  • Ліміти швидкості API: забагато запитів, очікуйте HTTP 429 Too Many Requests.
Розроблення застосунків на AWS

Стратегії повторів

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

 

стратегії повторів

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

Вбудовані можливості AWS SDK

  • AWS SDK автоматично обробляють ретраї.
  • Вбудовані повтори мають експоненційну затримку та джиттер.
  • Невдалі або задросельовані запити повторюються з щораз більшими паузами.
  • Зменшує обсяг вашого коду для обробки помилок.

 

можливості sdk

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

Керування логікою повторів

 

не завжди повторюйте

  • Логіка повторів — не завжди рішення.
  • Помилки HTTP 4xx: сервер зрозумів і відхилив ваш запит.
  • Неідемпотентні запити: повтори можуть спричинити дублікати чи неузгоджені дії.
Розроблення застосунків на AWS

Керування тайм-аутами

 

Керуйте тайм-аутами

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

Вимикачі кола

  • Якщо сервіс постійно падає, одних повторів замало.
  • Продовження запитів перевантажує проблемний сервіс.
  • Шаблон «вимикач» тимчасово зупиняє запити до нездорової залежності.
  • Закритий стан: запити йдуть як звичайно.

 

вимикачі кола

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

Вимикачі кола

  • Коли збої перевищують поріг, коло розмикається.
  • Наступні запити блокуються.

 

вимикач кола

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

Вимикачі кола

  • Після паузи коло переходить у напіввідкритий стан для перевірки відновлення.
  • Сервіс успішно відповідає — робота відновлюється.
  • Далі збої — коло лишається розімкненим.
  • Реалізуйте вимикачі на рівні застосунку.

 

вимикач кола

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

Dead letter черги

 

dql

  • Повідомлення, що постійно падають, можуть блокувати систему.
  • Винесіть їх із основного потоку обробки.
  • Невдалі повідомлення потрапляють у Dead Letter Queue.
  • Це ключовий елемент резилієнтних застосунків.
  • Втім, усвідомлюйте компроміси.
Розроблення застосунків на AWS

Ліміти AWS API

 

обмеження API

  • Ви взаємодієте з сервісами AWS через API.
  • Кожен сервіс має власні ліміти швидкості API.
  • Перевищення лімітів спричиняє дроселювання (HTTP 429 Too Many Requests).
  • Проєктуйте застосунок так, щоб коректно обробляти дроселювання.
Розроблення застосунків на AWS

Інтеграція зі сторонніми сервісами

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

 

сторонні сервіси

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

Інтеграція зі сторонніми сервісами

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

 

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

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

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

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

Preparing Video For Download...