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

17 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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