DAS_2024_1/lazarev_andrey_lab_8/README.md
2024-11-10 21:01:36 +04:00

70 lines
7.8 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.

# Лабораторная работа №8
## Задание
Написать небольшое эссе (буквально несколько абзацев) своими словами (пожалуйста не пользуйтесь гуглом :) ) на тему "Устройство распределенных систем". А помогут Вам в этом вопросы из списка:
1. Зачем сложные системы (например, социальная сеть ВКонтакте) пишутся в "распределенном" стиле, где каждое отдельное приложение (или сервис) функционально выполняет только ограниченный спектр задач?
2. Для чего были созданы системы оркестрации приложений? Каким образом они упрощают / усложняют разработку и сопровождение распределенных систем?
3. Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями?
4. Какие преимущества и недостатки распределенных приложений существуют на Ваш взгляд?
5. Целесообразно ли в сложную распределенную систему внедрять параллельные вычисления? Приведите примеры, когда это действительно нужно, а когда нет.
## Результат
### Зачем сложные системы пишутся в "распределенном" стиле.
Причина для этого очень проста и заключается в том, что **распределенный стиль** используется для повышения гибкости, масштабируемости и отказоустройчивости системы.
Каждая функциональная часть системы выносится в отдельный сервис, что позволяет:
- Масштабировать именно те компоненты, которые наиболее нагружены, без необходимости увеличивать ресурсы для всей системы;
- Разделять ответственность между командами разработки: каждая команда работает над своим сервисом, что ускоряет процесс разработки и внедрения изменений;
- Повышать отказоустойчивость: если один сервис выходит из строя, это не нарушает работу всей системы, другие сервисы продолжают работать.
Например, тотже ВКонтакте может разделять сервисы для хранения фотографий, обработку сообщений и прочее.
### Для чего были созданы системы оркестрации сообщений.
**Системы оркестрации** (например, **Kubernetes**) автоматизируют развертывание, масштабирование и управление контейнерами.
Это особенно полезно в распределенных системах, где необходимо управлять множеством взаимодействующих сервисов.
Оркестраторы помогают:
- Автоматически перезапускать или перемещать сервисы при сбоях;
- Упрощать масштабирование сервисов при увеличении нагрузки;
- Упрощать обновление и откат изменений;
- Мониторить состояние всех контейнеров и сервисов.
Системы оркестрации позволяют быстрее и проще развертывать и поддерживать сложные системы, но также требуют опыта для настройки и сопровождения.
### Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями.
**Сообщения** — это данные или события, которые передаются между сервисами для выполнения задач.
Очереди сообщений (например, **RabbitMQ**, **Kafka**) используются для асинхронного взаимодействия между сервисами.
Тем самым очереди позволяют:
- Обеспечить надёжность передачи данных между сервисами даже при временных сбоях;
- Разделить большие задачи на более мелкие и обрабатывать их параллельно;
- Оптимизировать производительность, разгружая основные сервисы от частых операций ввода-вывода.
Например, сообщение может представлять собой запрос на отправку уведомления, сохранение данных или запуск какой-либо задачи.
### Какие преимущества и недостатки распределенных приложений существуют.
Распределённые приложения обладают преимуществами, такими как **масштабируемость**, **отказоустойчивость** и **гибкость**.
Каждый сервис можно развивать независимо, подбирая для него оптимальные технологии.
Это ускоряет разработку и внедрение изменений.
Однако такие системы **сложнее разрабатывать и поддерживать**, требуя точного управления взаимодействием между сервисами и сложной отладки.
Дополнительно **возрастают расходы** на инфраструктуру и оркестрацию, так как нужны системы мониторинга и очереди сообщений.
### Целесообразно ли внедрять параллельные вычисления в сложную распределенную систему.
Параллельные вычисления могут быть полезны, когда задачи могут выполняться независимо и параллельно, например:
- Анализ данных и машинное обучение;
- Потоковая обработка данных, в которых система работает с частыми событиями (обработка транзакций и прочее).
Однако параллельные вычисления могут быть излишними для задач, которые:
- Содержат много зависимостей и требуют синхронизации;
- Тяжелы для разделения на независимые части, то есть все идет последовательно и следующая часть зависит от результатов предыдущей.