API стабильны, пока они не. Мы говорим об этом часто на предъявителя. Если вы управляете API, он становится проще, но со сторонними API и интеграциями, это может быть сложнее предсказать, когда происходит отключение или инцидент.
Как разработчики, наш первый инстинкт, когда дело доходит до обработки ошибок, выглядит что-то подобное:
- Поймать ошибку
- Журнал ошибки
- Отображение информационного сообщения или статуса к коду потребителю (пользователь, сервис и т. Д.)
Это обрабатывает общие случаи использования, особенно когда есть пользовательский интерфейс. Это, однако, не обрабатывает экземпляры, где этот сбой может каскад. Каскадные сбои — это те, которые вызывают несколько функций, (Micro) служб или части вашей инфраструктуры или приложения, чтобы выполнить неудачу в результате исходного сбоя. Используя существующие шаблоны, как автоматические выключатели И путем разработки стратегии для обработки прерываний службы API можно избежать каскадных сбоев и сохранить свои приложения. Фокус смещается от ошибок обработки на Восстановление от ошибок Отказ
Определение точек провала с мониторингом
Мониторинг должен быть отправной точкой при выявлении сбоев и прерывания услуг. Мы написали о Что мониторировать В прошлом и метрики более чем просто скорость ошибок. Области, которые нужно искать при оценке наших вызовов API, включают показатели эффективности, такие как:
- Неожиданные латентные шипы
- Доступность
- Интенсивность отказов
- Провал Коды статуса
Важно убедиться, что наше решение мониторинга может охватывать эти случаи. Настроив индивидуальные результаты базовых линий для нормальной работы, мы можем собрать лучшее представление о том, что составляет ненормальное представление Отказ Просмотр этих данных в течение определенного времени даст нам представление о том, какие API или даже конкретные конечные точки, чтобы сосредоточиться на. Инженер по команде должен быть в состоянии взглянуть на тенденции, определить проблему и начать работать над стратегией для ее решения.
API, которые являются более критическими важными, и те, которые имеют более высокую скорость аномалий, должны быть первыми целями стратегии восстановления отказа.
Реализация стратегии восстановления неудачи
Давайте рассмотрим сценарий, в котором мы полагаемся на валидацию адреса доставки в нашем процессе оформления заказа. Мы используем один из различных API для проверки адресов, таких как USPS API или Smartystreets , чтобы наши клиенты вступили в адрес, на самом деле мы можем доставлять. Теперь давайте предположим, что эта услуга иногда терпит неудачу. Может быть, это нерешительно. Может быть, у него есть шипы в ответ.
Что мы можем с этим поделать? Начните с Учитывая варианты и их компромиссы :
- Это функция, необходимая для нашего приложения для продолжения работы? Можем ли мы обойти его и предоставлять вместо этого ограниченную функциональность?
- Можем ли мы задержать взаимодействие и повторить запрос?
- Можем ли мы использовать альтернативную API?
В зависимости от значения этой зависимости API обеспечивает, может быть наилучшим образом позволить пользователю заполнить свой адрес без автоматического завершения и проверки. В крайнем случае, как если бы мы ловим это впервые в производстве, лучший немедленный вариант будет удалить услугу. Это не долгосрочное решение.
Исправление — это акт оценки и исправления проблемы для предотвращения дальнейшего ущерба Отказ Этот стиль восстановления и управления ошибками подтверждает, что произойдет проблемы, и принимает подход, чтобы избежать наименьшего количества повреждений общей экосистемы. Для вызова API это означает признание проблем или аномалий, поскольку мы называем их на предъявителя — и создавая стратегию для обработки этих типов аномалий, когда это возможно.
Давайте рассмотрим некоторые подходы, которые мы можем предпринять, чтобы реагировать на несоответствия в сторонних API.
Повторите попытку запросов
Реализация автоматических повторных попыток В библиотеке запроса довольно прост. Этот подход к исправительному подходу хорошо работает в строгом наборе правил. Нам нужно рассмотреть:
- Какие ошибки оправдывают повторную попытку? Например, мы не хотели бы повторить неправильно сформированный клиентский запрос, но мы хотели бы повторить ошибки шлюза в случае, если произошло краткое отключение. Проверка на HTTP-код состояния это хорошее место для начала.
- Какой вид стратегии Backoff имеет смысл для взаимодействия? В примере проверки адресов установка долгого периода ожидания повторной попытки напрямую влияет на пользовательский опыт.
- Являются ли неудавы от ограничения скорости? Если это так, мы должны проверить заголовки, чтобы обеспечить соответствующий период ожидания перед повторением.
Повторные попытки — это отличный вариант с низким ударом для незначительных проблем. Они могут быть первой стратегией восстановления, которую мы используем, прежде чем перейти к более сложному или радикальному варианту.
Пользовательские тайм-ауты и немедленные отмены
Другим вариантом является реализация более строчных тайм-аутов для запросов API, которые, как известно, имеют проблемы, которые приводят к высокой задержению. Некоторые API имеют более высокую среднюю задержку, но для других времен отложенного отклика может быть предшественником более крупных проблем. Ограничивая время ожидания запроса, мы можем остановить звонки до прохождения до того, как задержка начнет влиять на качество нашего сервиса.
Мы также можем выбрать немедленно отменить запросы, которые мы знаем, не пройдут Отказ В идеале мы бы повторно проехали эти запросы в Foxback API, как упомянуто позже в этой статье, но когда это не вариант немедленной отмены может быть ценным. Немедленно отменять запросы, которые мы знаем, не удастся, является основным компонентом основных автоматических выключателей.
Как намеренно вызывает запрос на провал предоставлять ценность? В нашем примере Adver AutoCollection задержка может не отрицательно повлиять на пользовательский опыт. Либо путем прерывания потока формы. Рисуя внимание пользователя от их задачи, или заблаговременно заполнив информацию после того, как пользователь переместился на новую часть страницы. Как мы упоминали в начале этой статьи, учитывая лучшую версию пользовательского опыта, которую мы можем предложить, даже если ограничено, лучше, чем сломанный опыт.
Отступать
Лучший вариант, с точки зрения продолжения бесперебойного обслуживания, заключается в реализации заправки для запроса. Это может быть альтернативным API, который обеспечивает одно и то же или аналогичное решение, или его можно кэшировать данные. При внедрении защитного решения рассмотрим следующее:
- Какова вероятность того, что Foxback API будет иметь проблемы одновременно, что исходное API снизится? Подумайте о выборе поставщиков, которые работают на разных инфраструктурах. Это позволяет избежать подобных неудач, связанных с отключением AWS.
- Можем ли мы обеспечить приличное приближение сервиса с кэшированными данными? Это не работает для нашего примера проверки адресов, но это может для многих API-источников данных.
- Как долго мы можем разумно ждать, прежде чем отправиться в исходный источник? Наличие хорошей стратегии стилей выключателя на месте может помочь принять это решение.
Отстойные API — отличный вариант. Они могут быть API второго выбора, которые могли быть более дорогими или менее надежными, чем основной API. Если стоимость удержания их вокруг (по использованию против фиксированной ставки в месяц) разумна, мы можем написать некоторую логику для обработки любых различий в формате и поменяйте запросы, когда обнаруживается аномалия с первичной API. При использовании автоматического выключателя, вместо того, чтобы ждать в открытом состоянии, отбления может быть заменена до тех пор, пока не закончится период ожидания.
Уверенность
Хотя не является стратегией прямой репарации, уведомления должны быть в нашей стратегии обработки ошибок. Когда происходит настроенное восстановление, регистрация события часто достаточно. В этом случае Все не удалось, как и ожидалось.
Когда само восстановление не удается, то есть когда уведомление должно выйти на необходимые заинтересованные стороны. Это уведомление делает две вещи:
- Это гарантирует, что проблема попадает на радара команды развития.
- Это вопросы замечают, что наша стратегия исправления чего-то не хватает.
Как мы реагируем на это ценно. Весь подход к исправительным аномалиям основано на данных и допущениях. Мы предполагаем, что сбой произойдет с одним из наших API . Затем мы планируем потенциальные обходные пути, которые возникнут при возникновении неудачи.
Двойной вниз по исправлению при необходимости
Это уведомление говорит нам, что мы можем работать усерднее на слой у нас покрытия. Хотя вероятность того, что наши первичные API, так и нашей стратегии исчезновения не могут быть низкими, могут быть экземпляры, когда другой уровень восстановления полезен. В отстойной части мы упомянули добавление отблесений как часть «открытого» состояния. Это пример многослойного подхода к восстановлению. Он не только останавливает никаких запросов на API, прежде чем они отправятся, но это также реализует второй вариант для обработки новых запросов.
Основная функция, которую мы встроенные в носитель, является восстановление. Когда API не удается, наш агент обнаруживает проблему и выполняет настроенную стратегию восстановления. Попробуйте в своих приложениях сегодня Отказ
Оригинал: «https://dev.to/bearer/how-to-recover-from-api-downtimes-and-errors-2j6e»