Knowledge base

Knowledge base

Close

Автоскейлинг под и балансировка нагрузки

Автоскейлинг и балансировка нагрузки – ключевые компоненты облачной архитектуры. Они обеспечивают эффективное управление ресурсами и высокую доступность приложений.

Автоскейлинг автоматически регулирует количество активных экземпляров приложения в зависимости от текущей нагрузки. Это позволяет ресурсоемким сервисам масштабироваться вверх или вниз по мере необходимости.

Балансировка нагрузки распределяет входящие запросы между несколькими экземплярами приложения, обеспечивая равномерную загрузку и минимизацию времени отклика. 

Совместное использование этих технологий позволяет поддерживать оптимальную производительность, снижать затраты и обеспечивать надежность сервисов в условиях изменяющейся нагрузки. 

В нашей системе автоскейлинг реализован за счет интеграции KEDA, Horizontal Pod Autoscaler (HPA) и Prometheus. Он осуществляется таким образом:

  • для сервисов api-rest и socket-io используются данные, собранные Prometheus. Это позволяет адаптивно регулировать количество подов на основании метрик, таких как задержка, пропускная способность и использование ресурсов;
  • другие микросервисы масштабируются с помощью KEDA и анализа kafka-lag в соответствующих Kafka топиках. Это позволяет эффективно реагировать на изменяющиеся нагрузки, связанные с объемом поступающих сообщений.

Балансировка нагрузки в системе производится с помощью NGINX Ingress и Kafka таким образом:

  • для сервисов api-rest и socket-io Ingress NGINX распределяет входящие HTTP-запросы между активными экземплярами, обеспечивая равномерную загрузку и быстрый отклик
  • для остальных микросервисов балансировка происходит через анализ kafka-lag в топиках Kafka, что позволяет оптимально распределять нагрузки на основе задержки в обработке сообщений.

Это сочетание методов обеспечивает надежное и эффективное взаимодействие между микросервисами. Также это поддерживает высокую доступность и производительность системы в условиях изменяющихся запросов и объемов данных.

In this article: