nikolaeva_yana_lab_7 #341

Open
NikolaevaYana wants to merge 3 commits from nikolaeva_yana_lab_7 into nikolaeva_yana_lab_6
2 changed files with 96 additions and 0 deletions

View File

@ -0,0 +1,34 @@
## Эссе: Балансировка нагрузки в распределённых системах
Review

PR оформлен неверно, почему тут 2 л/р?

PR оформлен неверно, почему тут 2 л/р?
### Алгоритмы и методы для балансировки нагрузки
Балансировка нагрузки — это процесс распределения входящего трафика или задач между несколькими серверами
для оптимизации использования ресурсов, повышения производительности и обеспечения отказоустойчивости.
Наиболее популярные алгоритмы включают:
1. **Round Robin** (Циклический алгоритм): запросы распределяются равномерно по кругу между серверами.
2. **Least Connections** (Минимум подключений): запросы направляются на сервер с наименьшим числом активных соединений.
3. **Weighted Round Robin** (Взвешенный цикл): учитывает производительность серверов, направляя больше трафика на более мощные машины.
4. **Hash-Based Methods**: трафик распределяется на основе хэша данных, например, IP-адреса клиента.
### Открытые технологии для балансировки нагрузки
Среди открытых решений популярны:
- **NGINX**: мощный реверс-прокси, поддерживающий балансировку на основе различных алгоритмов.
- **HAProxy**: высокопроизводительный прокси-сервер, предназначенный для распределения трафика и работы с высокими нагрузками.
- **Traefik**: современный инструмент для балансировки в микросервисах, интегрирующийся с оркестраторами, такими как Kubernetes.
### Балансировка нагрузки на базах данных
Для распределения нагрузки на базах данных часто применяются репликация и шардирование:
- **Репликация**: данные копируются между несколькими серверами. Запросы на чтение направляются на реплики, а записи — на основной сервер.
- **Шардирование**: данные делятся на части (шарды), каждая из которых обрабатывается отдельным сервером, что снижает нагрузку на каждый из них.
### Реверс-прокси как элемент балансировки нагрузки
Реверс-прокси играет ключевую роль в балансировке нагрузки, так как он находится между клиентами и серверами.
Он не только распределяет запросы, но и может кэшировать ответы, сжимать данные и обеспечивать безопасность.
NGINX и HAProxy являются классическими примерами реверс-прокси.

View File

@ -0,0 +1,62 @@
# Лабораторная работа №8: Устройство распределенных систем
## Что такое распределенная система?
Распределенная система — это комплекс взаимодействующих компонентов, которые расположены на разных узлах сети
и работают вместе для достижения общей цели.
Узлы могут быть как физически раздельными серверами, так и виртуальными средами, выполняющими определенные задачи.
### Зачем использовать "распределенный" стиль?
Сложные системы, такие как социальные сети, требуют высокой производительности,
масштабируемости и отказоустойчивости. Разделяя функционал на отдельные сервисы
(например, один отвечает за обработку сообщений, другой за рекомендации), мы можем:
1. Уменьшить нагрузку на отдельные компоненты.
2. Легче масштабировать узкие места.
3. Быстрее внедрять изменения, не затрагивая всю систему.
Кроме того, такая структура облегчает разработку,
так как каждая команда может сосредоточиться на своем микросервисе.
### Для чего нужны системы оркестрации?
Системы оркестрации, такие как Kubernetes, управляют распределенными приложениями, упрощая развертывание, масштабирование и мониторинг. Они:
- Автоматизируют процессы, такие как распределение ресурсов и перезапуск упавших узлов.
- Обеспечивают гибкость управления сложными системами.
-
Однако, такие системы добавляют сложность на этапе настройки и требуют новых навыков от разработчиков.
### Роль очередей сообщений
Очереди сообщений (например, RabbitMQ, Kafka) используются для асинхронной передачи данных между сервисами.
Сообщения могут быть запросами, данными для обработки или событиями. Это позволяет:
- Разгрузить сервисы, обеспечив буферизацию данных.
- Повысить отказоустойчивость, так как потерянные сообщения можно повторно отправить.
### Преимущества и недостатки
**Преимущества:**
- Масштабируемость: можно добавлять новые сервисы без значительных изменений.
- Отказоустойчивость: сбой одного узла не приводит к полной остановке системы.
- Гибкость: легче экспериментировать с новыми технологиями в отдельных сервисах.
**Недостатки:**
- Сложность разработки и поддержки: требуется настройка взаимодействия между сервисами.
- Задержки: из-за сетевых вызовов возрастает время ответа.
### Параллельные вычисления в распределенных системах
Параллельные вычисления позволяют обрабатывать задачи быстрее, разделяя их между несколькими узлами.
Это полезно в задачах с большими объемами данных (анализ логов, построение рекомендаций).
Однако, если задача не требует значительных вычислительных ресурсов (например, обработка простых запросов), их внедрение может быть избыточным.
Примеры:
- Нужны: распределенные базы данных, машинное обучение.
- Не нужны: системы авторизации, где важнее скорость отклика, чем объем данных.