diff --git a/artamonova_tatyana_lab_7/README.md b/artamonova_tatyana_lab_7/README.md new file mode 100644 index 0000000..5c20f1b --- /dev/null +++ b/artamonova_tatyana_lab_7/README.md @@ -0,0 +1,66 @@ +## Лабораторная работа №7 + +### Эссе на тему "Балансировка нагрузки в распределённых системах при помощи открытых технологий на примерах" + +При масштабировании приложения появляется необходимость в +добавлении новых серверов. В таком случае нужно пользоваться +балансировщиком нагрузок для распределения запросов. + +А что делать, если серверов больше сотни или тысячи? + +Балансировка нагрузки позволяет обеспечить равномерное распределение +нагрузки между несколькими серверами. Без неё один сервер может +перегрузиться, а другой простаивать. Это приводит к неэффективной +работе системы. + +Для решения этой проблемы используют различные алгоритмы. + +1. **"Round-robin"** - балансировка нагрузок циклическим перебором. +Алгоритм можно описать так: балансировщик нагрузок отправляет +запрос каждому серверу по очереди. Это решает проблему "отбрасывания" +входящих запросов, когда предыдущий запрос еще не был обработан. +Такой алгоритм подойдет для серверов с одинаковой мощностью и +одинаково затратных запросов. + +2. **Очереди запросов** - балансировка нагрузок с помощью создания очередей +запросов. +Редко встречаются ситуации, когда все запросы одинаково обрабатываются. +Очереди запросов позволяют справиться с этой проблемой, но со своими +недостатками. +"Отбрасываться" будет меньше запросов, но некоторые из них будут иметь +задержку при обработке (так как будут ожидать в очереди) + +3. **"Weighted round-robin"** - взвешенный цикличный перебор. +Алгоритм заключается в назначении веса каждому серверу. Вес определяет, +сколько запросов сможет обработать сервер. Это нужно, для подстраивания +к мощности каждого сервера. + +В качестве открытых технологий для балансировки нагрузки используются **HAProxy** и **Nginx**. +Они выступают в роли обратного прокси-сервера: принимают запросы от клиентов +и перенаправляют их на один из доступных серверов. Они предлагают +гибкую настройку алгоритмов балансировки и отслеживания состояния серверов. +Кроме того, существуют решения на основе Kubernetes или других +оркестраторов контейнеров, которые управляют распределением нагрузки +по микросервисам. + +Балансировка нагрузки на базах данных — специфическая задача, решаемая +с помощью механизмов репликации и кластеризации. + +**Репликация** создает копии данных на нескольких серверах. Это обеспечивает +отказоустойчивость и повышение производительности за счет распределения +нагрузки чтения. + +**Кластеризация** объединяет несколько баз данных в единую систему. Это позволяет +распределять нагрузку записи и чтения между несколькими базами. +Выбор оптимального подхода зависит от специфики приложения +и требований к доступности и производительности. + +**Реверс-прокси** играет ключевую роль в балансировке нагрузки. +Он принимает все входящие запросы, контролирует доступность серверов +на бэке и перенаправляет запросы на доступные и наименее загруженные сервера. +Кроме распределения нагрузки, реверс-прокси выполняет другие важные функции: +кэширование, SSL-терминирование и защита от атак. Благодаря своей гибкости +и функциональности, реверс-прокси является важным компонентом +высокопроизводительных и отказоустойчивых распределенных систем. + +