DAS_2024_1/minhasapov_ruslan_lab_7
2024-11-18 06:50:13 +04:00
..
README.md minhasapov_ruslan_lab_7 2024-11-18 06:50:13 +04:00

Лабораторная работа №7

ПИбд-42. Минхасапов Руслан


Эссе

Современные веб-сервисы часто сталкиваются с переменной нагрузкой. В один момент пользователей может быть мало, а через некоторое время их может стать настолько много, что все "ляжет", например, во время ограниченной акции. Как пример можно взять недавнюю коллаборацию сети пицерий "Додо" с игрой "Genshin Impact", когда от наплыва пользователей в первые минуты начала акции сервис для заказов стал недоступен, или же глобальный релиз игры "Throne and Liberty", аналогично произошел наплыв и никого не впускало на сервера. Именно для того, чтобы избежать такие ситуации "падения" системы, и используется балансировка нагрузки механизм распределения входящего трафика между несколькими серверами. Другими словами, балансировщик нагрузки сравним с дирижером, который распределяет партии между музыкантами, чтобы мелодия звучала гармонично.

Существует множество алгоритмов для решения этой задачи и каждый обладает своими особенностями. Простейшим можно назвать Round Robin, при котором запросы последовательно распределяются по серверам. Более "умные" методы учитывают и производительность каждого сервера, назначая им веса и распределяя запросы пропорционально им, например Weighted Round Robin. Также существует Least Connections, он направляет запрос к серверу с наименьшим количеством активных соединений и динамически адаптируется к текущей нагрузке, что позволяет избежать перегруженности имеющихся узлов.

Для балансировки нагрузки используются различные технологии, наиболее известные из них - опенсорсные Nginx и Kubernetes Ingress. Nginx позволяет управлять нагрузкой на компоненты системы с помощью различных алгоритмов и выступают в роли реверс-прокси, принимая запросы от клиентов и перенаправляя их на бек-серверы. Кубер же - платформа для управления контейнерами со встроенным механизмом для балансировки (между подами).

Говоря о балансировке нагрузки можно вспомнить и о базах данных. Однако для бд... А это уже совсем другая история. Здесь применяются такие технологии, как репликации, шардинг и распределение запросов на чтение/запись. Репликация создает копии данных на нескольких серверах, что снижает нагрузку на каждый отдельный сервер, позволяя распределить нагрузку чтения. Шардинг позволяет масштабировать базы данных до очень больших размеров. Например PostreSQL и MongoDB поддерживают и репликацию и шардинг. Так же есть специальные прокси серверы для БД, они направляют запросы на оптимальный сервер, учитывая тип запроса и состояние кластера.

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

В заключение можно сказать, что балансировка нагрузки критически важный компонент современной IT-инфраструктуры. Это обеспечивает отказоустойчивость, масштабируемость и высокую производительность приложений и сервисов, позволяя эффективно справляться с большими нагрузками и обеспечивать бесперебойную работу для пользователей.