Проєктування відмовостійких і резилієнтних застосунків в AWS
Розроблення застосунків на AWS
Ricardo Sueiras
Principal Technologist
Побудова під резилієнтність
Тимчасові збої
Розумійте типові режими збоїв:
Тимчасові помилки зникають самі, зазвичай безпечно повторити спробу.
Тайм-аути
Розумійте типові режими збоїв:
Тимчасові помилки зникають самі, зазвичай безпечно повторити спробу.
Тайм-аути: зовнішній сервіс надто довго відповідає.
Постійні помилки
Розумійте типові режими збоїв:
Тимчасові помилки зникають самі, зазвичай безпечно повторити спробу.
Тайм-аути: зовнішній сервіс надто довго відповідає.
Постійні помилки: запит принципово хибний, повтори не допоможуть.
Ліміти API
Розумійте типові режими збоїв:
Тимчасові помилки зникають самі, зазвичай безпечно повторити спробу.
Тайм-аути: зовнішній сервіс надто довго відповідає.
Постійні помилки: запит принципово хибний, повтори не допоможуть.
Ліміти швидкості API: забагато запитів, очікуйте HTTP 429 Too Many Requests.
Стратегії повторів
Збої у розподілених системах часто тимчасові.
Повторний запит часто спрацьовує.
Додавайте ретраї обережно: сліпі повтори можуть погіршити ситуацію.
Експоненційна затримка: збільшуйте інтервал між повторами.
Джиттер: додайте випадковість, щоб уникнути піків повторів.
Обмеження повторів: запобігають безкінечним циклам.
Вбудовані можливості AWS SDK
AWS SDK автоматично обробляють ретраї.
Вбудовані повтори мають експоненційну затримку та джиттер.
Невдалі або задросельовані запити повторюються з щораз більшими паузами.
Зменшує обсяг вашого коду для обробки помилок.
Керування логікою повторів
Логіка повторів — не завжди рішення.
Помилки HTTP 4xx: сервер зрозумів і відхилив ваш запит.
Неідемпотентні запити: повтори можуть спричинити дублікати чи неузгоджені дії.
Керування тайм-аутами
Безлімітні повтори під навантаженням можуть посилити проблеми.
Поєднуйте повтори з тайм-аутами.
Тайм-аут задає максимальний час очікування відповіді.
Кожен виклик зовнішнього сервісу має мати тайм-аут.
Вимикачі кола
Якщо сервіс постійно падає, одних повторів замало.
Продовження запитів перевантажує проблемний сервіс.
Шаблон «вимикач» тимчасово зупиняє запити до нездорової залежності.
Закритий стан: запити йдуть як звичайно.
Вимикачі кола
Коли збої перевищують поріг, коло розмикається.
Наступні запити блокуються.
Вимикачі кола
Після паузи коло переходить у напіввідкритий стан для перевірки відновлення.
Сервіс успішно відповідає — робота відновлюється.
Далі збої — коло лишається розімкненим.
Реалізуйте вимикачі на рівні застосунку.
Dead letter черги
Повідомлення, що постійно падають, можуть блокувати систему.
Винесіть їх із основного потоку обробки.
Невдалі повідомлення потрапляють у Dead Letter Queue.
Це ключовий елемент резилієнтних застосунків.
Втім, усвідомлюйте компроміси.
Ліміти AWS API
Ви взаємодієте з сервісами AWS через API.
Кожен сервіс має власні ліміти швидкості API.
Перевищення лімітів спричиняє дроселювання (HTTP 429 Too Many Requests).
Проєктуйте застосунок так, щоб коректно обробляти дроселювання.
Інтеграція зі сторонніми сервісами
Сторонні сервіси додають невизначеність.
Ви не контролюєте їхню продуктивність чи доступність.
Встановіть тайм-аути, щоб уникати довгого очікування.
Застосовуйте повтори з відступом для тимчасових проблем.
Ізолюйте залежності, щоб зменшити зону впливу.
Інтеграція зі сторонніми сервісами
Розгляньте перехід від синхронної до асинхронної комунікації.
Система продовжує роботу, навіть якщо зовнішній сервіс затримується.
Давайте потренуємось!
Розроблення застосунків на AWS
Preparing Video For Download...