Расшифровка высокой доступности микросервисов: изучение стратегий управления API с использованием Apache APISIX
March 29, 2024
Введение
Архитектура микросервисов стала основным выбором для IT-архитектуры в настоящее время. Ее гибкость и масштабируемость позволяют предприятиям легче справляться с быстро меняющимися бизнес-требованиями. Однако обеспечение высокой доступности микросервисов стало ключевым вопросом в проектировании архитектуры. В этом контексте три основные стратегии управления API-сервисами — ограничение скорости, разрыв цепи и деградация — особенно важны.
Как важный базовый компонент в архитектуре микросервисов, API-шлюз играет ключевую роль в управлении сервисами. Apache APISIX, как новое поколение облачного API-шлюза, обладает не только высокой производительностью и безопасностью, но и предоставляет богатые функции управления трафиком. В следующем обсуждении мы подробно рассмотрим "трехсторонний подход" к управлению API-сервисами и предоставим подробные сведения о том, как применять эти стратегии в APISIX для обеспечения высокой доступности наших сервисов.
Стратегии управления API
Ограничение скорости
Ограничение скорости, как следует из названия, представляет собой механизм ограничения трафика. Его основная цель — предотвратить перегрузку системы или даже ее сбой из-за чрезмерного трафика. Основная идея заключается в регулировании объема запросов в определенные временные интервалы, позволяя только запросам, соответствующим определенным ограничениям, доступ к системе, что обеспечивает стабильную работу микросервисов и всей системы. В реальной жизни концепция ограничения скорости также очевидна. Например, в часы пик на станциях метро устанавливаются несколько ворот для проверки безопасности, чтобы обеспечить упорядоченное и плавное движение.
Ограничение скорости может быть реализовано различными способами, включая:
-
На основе количества запросов: Отслеживание количества запросов в каждом временном интервале и их ограничение в пределах определенного порога. Например, обработка максимум 100 запросов в секунду.
-
На основе частоты запросов: Ограничение частоты запросов на клиента или IP-адрес для предотвращения чрезмерного количества запросов. Например, разрешение максимум 10 запросов в минуту.
-
На основе количества соединений: Ограничение количества одновременных соединений для предотвращения чрезмерного потребления ресурсов системы. Например, разрешение максимум 100 одновременных соединений.
Различные стратегии ограничения скорости позволяют нам решать различные сценарии. Например, для ценных API-ресурсов мы можем ограничить количество запросов до 10 в минуту. Или, чтобы повысить доступность сервиса, мы можем ограничить количество одновременных запросов для уменьшения времени ответа сервиса, среди других сценариев. Правильная реализация этих стратегий ограничения скорости помогает обеспечить нормальную работу сервисов при высокой нагрузке и внезапных скачках трафика.
Разрыв цепи
В архитектуре микросервисов могут возникать ситуации, когда сервисы вызывают друг друга. Если один сервис выходит из строя, это может повлиять на другие сервисы или даже привести к краху всей системы, явление, известное как "каскадный сбой" или "эффект лавины". Механизм разрыва цепи, как защитная мера против каскадных сбоев в микросервисах, используется для предотвращения распространения сбоев. Когда микросервис испытывает аномалии или задержки, разрыв цепи быстро срабатывает, временно блокируя запросы к этому сервису, тем самым обеспечивая стабильность всей системы.
Основной принцип механизма разрыва цепи заключается в мониторинге времени ответа сервиса или частоты ошибок в реальном времени. Как только эти показатели превышают предустановленные пороги, разрыв цепи автоматически срабатывает, быстро останавливая запросы к неисправному сервису до тех пор, пока он не вернется к нормальной работе. После стабилизации сервиса разрыв цепи автоматически закрывается, возобновляя доступ к сервису. Этот механизм похож на резистор в электрической цепи. Когда напряжение превышает допустимый диапазон, резистор автоматически разрывает цепь, чтобы предотвратить повреждение других электронных компонентов из-за чрезмерного тока. После проверки и ремонта цепи резистор снова замыкается, и цепь возобновляет нормальную работу.
Внедрение механизмов разрыва цепи позволяет архитектуре микросервисов лучше справляться с потенциальными проблемами каскадных сбоев, возникающих из-за взаимных вызовов сервисов, обеспечивая стабильность и надежность системы, особенно в условиях высокой нагрузки.
Деградация
Деградация, как эффективная стратегия для решения высокой нагрузки на систему, предполагает временное отключение некоторых некритичных функций или умеренное снижение качества определенных сервисов для обеспечения стабильной работы всей системы. В архитектуре микросервисов применение механизмов деградации позволяет интеллектуально отключать некоторые неосновные или временно необязательные функции, обеспечивая непрерывную и стабильную работу основных функций. Например, в приложении для видеоконференций, когда пропускная способность сети ограничена, мы можем снизить качество передачи видео или временно отключить функцию видео, чтобы обеспечить четкие и стабильные аудиозвонки, удовлетворяя основные потребности в общении.
Распространенные стратегии включают:
-
Деградация функций: Временное отключение или ограничение доступа к некоторым функциям для обеспечения нормальной работы основных сервисов. Например, приложение социальной сети может временно отключить функции "лайков" или "комментариев" в часы пик, чтобы пользователи могли нормально просматривать контент.
-
Деградация качества: В условиях высокой нагрузки на систему снижение требований к качеству определенных сервисов или функций. Например, как упоминалось ранее, снижение четкости видео или частоты кадров для обеспечения плавного общения.
Ограничение скорости, разрыв цепи и деградация в APISIX
Как мы можем использовать вышеупомянутые три основные стратегии, реализованные в APISIX, для повышения высокой доступности микросервисов? Ниже приведены несколько распространенных примеров для иллюстрации.
Ограничение скорости с помощью плагина limit-count
APISIX предоставляет различные встроенные плагины для управления трафиком, такие как limit-count, limit-req и limit-conn. В зависимости от фактических потребностей мы можем выбрать подходящий метод для управления трафиком. В качестве примера рассмотрим плагин limit-count, который ограничивает общее количество запросов в определенном временном интервале и возвращает оставшееся количество запросов в HTTP-заголовке.
curl -i http://127.0.0.1:9080/apisix/admin/routes/1 \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "uri": "/get", "plugins": { "limit-count": { "count": 3, "time_window": 60, "rejected_code": 429, "key_type": "var", "key": "remote_addr" } }, "upstream": { "type": "roundrobin", "nodes": { "httpbin.org:80": 1 } } }'
Разрыв цепи с помощью плагина api-breaker
Плагин api-breaker в APISIX автоматически срабатывает на основе предустановленных порогов для предотвращения каскадных сбоев. Например, он может инициировать разрыв цепи, если вышестоящие сервисы возвращают 3 последовательных статуса 500 или 503, и возобновить доступ при получении статуса 200.
curl "http://127.0.0.1:9180/apisix/admin/routes/1" \ -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "api-breaker": { "break_response_code": 502, "unhealthy": { "http_statuses": [500, 503], "failures": 3 }, "healthy": { "http_statuses": [200], "successes": 1 } } }, "upstream": { "type": "roundrobin", "nodes": { "httpbin.org:80": 1 } }, "uri": "/get", }'
Деградация с помощью плагина fault-injection
Плагины fault-injection и mocking в APISIX поддерживают установку стратегий деградации для временного отключения определенных функций или прямого возврата предустановленных данных в условиях высокой нагрузки на систему, обеспечивая стабильность системы. Например, плагин fault-injection может напрямую возвращать указанные HTTP-статусы и значения тела клиентам.
curl http://127.0.0.1:9180/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d ' { "plugins": { "fault-injection": { "abort": { "http_status": 200, "body": "Fault Injection!" } } }, "upstream": { "nodes": { "httpbin.org:80": 1 }, "type": "roundrobin" }, "uri": "/get" }'
Заключение
Ограничение скорости, разрыв цепи и деградация, как важные меры управления сервисами в архитектуре микросервисов, играют незаменимую роль в повышении высокой доступности микросервисов. Они служат надежным щитом, защищая архитектуру микросервисов от различных потенциальных рисков и вызовов. Столкнувшись с разнообразными бизнес-сценариями, мы должны гибко и осторожно применять эти меры, чтобы обеспечить оптимальную защиту стабильности и надежности архитектуры микросервисов.