5.5 KiB
Лабораторная работа №7
ПИбд-42. Минхасапов Руслан
Эссе
Современные веб-сервисы часто сталкиваются с переменной нагрузкой. В один момент пользователей может быть мало, а через некоторое время их может стать настолько много, что все "ляжет", например, во время ограниченной акции. Как пример можно взять недавнюю коллаборацию сети пицерий "Додо" с игрой "Genshin Impact", когда от наплыва пользователей в первые минуты начала акции сервис для заказов стал недоступен, или же глобальный релиз игры "Throne and Liberty", аналогично произошел наплыв и никого не впускало на сервера. Именно для того, чтобы избежать такие ситуации "падения" системы, и используется балансировка нагрузки – механизм распределения входящего трафика между несколькими серверами. Другими словами, балансировщик нагрузки сравним с дирижером, который распределяет партии между музыкантами, чтобы мелодия звучала гармонично.
Существует множество алгоритмов для решения этой задачи и каждый обладает своими особенностями. Простейшим можно назвать Round Robin, при котором запросы последовательно распределяются по серверам. Более "умные" методы учитывают и производительность каждого сервера, назначая им веса и распределяя запросы пропорционально им, например Weighted Round Robin. Также существует Least Connections, он направляет запрос к серверу с наименьшим количеством активных соединений и динамически адаптируется к текущей нагрузке, что позволяет избежать перегруженности имеющихся узлов.
Для балансировки нагрузки используются различные технологии, наиболее известные из них - опенсорсные Nginx и Kubernetes Ingress. Nginx позволяет управлять нагрузкой на компоненты системы с помощью различных алгоритмов и выступают в роли реверс-прокси, принимая запросы от клиентов и перенаправляя их на бек-серверы. Кубер же - платформа для управления контейнерами со встроенным механизмом для балансировки (между подами).
Говоря о балансировке нагрузки можно вспомнить и о базах данных. Однако для бд... А это уже совсем другая история. Здесь применяются такие технологии, как репликации, шардинг и распределение запросов на чтение/запись. Репликация создает копии данных на нескольких серверах, что снижает нагрузку на каждый отдельный сервер, позволяя распределить нагрузку чтения. Шардинг позволяет масштабировать базы данных до очень больших размеров. Например PostreSQL и MongoDB поддерживают и репликацию и шардинг. Так же есть специальные прокси серверы для БД, они направляют запросы на оптимальный сервер, учитывая тип запроса и состояние кластера.
Реверс-прокси скрывает внутренюю структуру системы от клиента и упрощает взаимодействие, по сути выступает в роли единой точки для всех запросов и выполняет балансировку, выбирая сервер для каждого запроса, непример ранее упомянутый Nginx.
В заключение можно сказать, что балансировка нагрузки – критически важный компонент современной IT-инфраструктуры. Это обеспечивает отказоустойчивость, масштабируемость и высокую производительность приложений и сервисов, позволяя эффективно справляться с большими нагрузками и обеспечивать бесперебойную работу для пользователей.