diff --git a/kashin_maxim_lab_8/readme.md b/kashin_maxim_lab_8/readme.md new file mode 100644 index 0000000..46c6d95 --- /dev/null +++ b/kashin_maxim_lab_8/readme.md @@ -0,0 +1,69 @@ +# Кашин Максим ПИбд-42 + +# Устройство распределенных систем + +## Введение +Распределенные системы становятся все более важными в современных технологиях. Они обеспечивают возможность построения сложных приложений, таких как социальные сети, где отдельные сервисы выполняют ограниченные задачи. В этом эссе мы рассмотрим причины создания распределенных систем, роль оркестрации приложений, использование очередей сообщений, а также преимущества и недостатки таких систем. + +## 1. Зачем создаются распределенные системы? +Распределенные системы создаются для решения следующих задач: + +| **Проблема** | **Решение с помощью распределенных систем** | +|------------------------------------|-------------------------------------------------------------| +| Сложность обновлений и масштабирования | Разделение на модули с ограниченными задачами | +| Высокие требования к доступности | Обеспечение отказоустойчивости за счет дублирования сервисов | +| Быстрые изменения требований | Гибкость в добавлении и удалении сервисов | + +### Пример: +ВКонтакте использует распределенные системы для обработки миллионов пользователей одновременно. Каждая служба отвечает за определенные функции (например, обработка сообщений, хранение медиафайлов), что позволяет обновлять их независимо друг от друга. + +## 2. Системы оркестрации приложений +Системы оркестрации приложений, такие как Kubernetes, созданы для управления распределенными сервисами. Их преимущества включают: + +| **Преимущества** | **Недостатки** | +|---------------------------------------|---------------------------------------| +| Автоматизация развертывания | Сложность в обучении новых сотрудников | +| Масштабируемость | Зависимость от платформы оркестрации | +| Управление зависимостями между сервисами | Трудности в отладке и мониторинге | + +### Пример: +Использование Kubernetes позволяет автоматически масштабировать сервисы в зависимости от нагрузки, но требует знания специфичных команд и конфигураций. + +## 3. Очереди обработки сообщений +Очереди сообщений, такие как RabbitMQ или Apache Kafka, используются для асинхронного обмена данными между сервисами. Сообщениями могут быть: + +| **Тип сообщения** | **Описание** | +|----------------------------------|------------------------------------| +| Уведомления | Сообщения о событиях (например, новое сообщение от пользователя) | +| Запросы | Запросы на выполнение определенных операций | +| Результаты обработки | Ответы на выполненные запросы | + +### Пример: +Система уведомлений в социальной сети использует очереди сообщений для отправки уведомлений пользователям о новых событиях, таких как лайки или комментарии. + +## 4. Преимущества и недостатки распределенных приложений +### Преимущества: +- Высокая доступность: Устойчивость к сбоям за счет дублирования сервисов. +- Масштабируемость: Легкость в добавлении новых ресурсов. +- Параллельная обработка: Возможность выполнения нескольких задач одновременно. + +### Недостатки: +- Сложности в отладке и тестировании: Необходимость отслеживания взаимодействий между сервисами. +- Проблемы безопасности: Увеличение количества точек доступа и потенциальных уязвимостей. +- Управление состоянием: Сложности в поддержании согласованности данных. + +## 5. Параллельные вычисления в распределенных системах +Внедрение параллельных вычислений целесообразно, когда: + +| **Ситуация** | **Рекомендация** | +|-----------------------------------|-------------------------------------| +| Обработка больших объемов данных | Использовать параллельные вычисления | +| Выполнение ресурсоемких задач | Применять распределенные вычисления | +| Небольшие задачи | Избегать параллельности из-за накладных расходов | + +### Примеры: +- **Необходимость**: Обработка потоков данных в реальном времени для аналитики. +- **Нецелесообразно**: Простые операции, такие как обработка небольших файлов. + +## Заключение +Распределенные системы представляют собой мощный инструмент для создания сложных приложений, обеспечивая гибкость, масштабируемость и устойчивость. Однако их внедрение требует внимательного анализа требований и подходов к разработке. Понимание преимуществ и недостатков поможет в эффективном использовании распределенных архитектур.