Merge pull request 'lazarev_andrey_lab_8' (#162) from lazarev_andrey_lab_8 into main

Reviewed-on: #162
This commit is contained in:
Alexey 2024-11-28 23:22:02 +04:00
commit 0eb5efa744

View File

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