# Отчет. Лабораторная работа 7

## Балансировка нагрузки в распределённых системах при помощи открытых технологий на примерах

### Какие алгоритмы и методы используются для балансировки нагрузки?
В распределенных системах балансировка нагрузки может осуществляться на разных уровнях:
- балансировка нагрузки на сетевом уровне
- балансировка нагрузки на транспортном уровне
- балансировка нагрузки на прикладном уровне

На сетевом уровне балансировка может реализовываться с помощью таких алгоритмов, как Round Robin, Weighted Round Robin или Least Connections.
Алгоритм Round Robin основывается на принципе выделения одному доменному имени несколько IP, которые выбираются 
при поступлении запроса по очереди. 

Weighted Round Robin - усовершенствованный алгоритм Round Robin, который подразумевает указание весов каждому серверу 
в зависимости от доступных мощностей.

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

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

Можно уменьшить нагрузку на базу данных путем использования механизма кэширования на уровне приложения
или с помощью нереляционных БД (Redis и др.). Или с помощью шардирования данных, размещенных в базе.

Для балансировки нагрузки на базах данных на прикладном уровне, например, существует утилита  pgpool — 
прокси между клиентом и сервером СУБД PostgreSQL, с помощью которого задаются правила перенаправления 
запросов к БД в зависимости от их содержания (чтение/запись).
### Реверс-прокси как один из элементов балансировки нагрузки.
Реверс-прокси перенаправляет входящие запросы на соотвествующие сервисы, может выступать при этом и в качестве балансировщика нагрузки, реализуя один из ранее озвученных алгоритмов.
Как уже было сказано, примером такого компонента РС может выступать Nginx, в котором с помощью настройки конфигурационного файла можно указать как настройки проксирования, 
так и добавить логику балансировки.