# Лабораторная работа №8 - Про устройство распределенных систем
## ПИбд-42 || Тюрнер Илья

### Задание:
Написать небольшое эссе (буквально несколько абзацев) своими словами.

1. Зачем сложные системы (например, социальная сеть ВКонтакте) пишутся в "распределенном" стиле, где каждое отдельное
приложение (или сервис) функционально выполняет только ограниченный спектр задач?
2. Для чего были созданы системы оркестрации приложений? Каким образом они упрощают / усложняют разработку и сопровождение
распределенных систем?
3. Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями?
4. Какие преимущества и недостатки распределенных приложений существуют на Ваш взгляд?
5. Целесообразно ли в сложную распределенную систему внедрять параллельные вычисления? Приведите примеры, когда это
действительно нужно, а когда нет.

### Эссе на тему: "Про устройство распределенных систем"
Сложные системы, например, социальная сеть ВКонтакте, пишутся в "распределенном" стиле, потому что в них критически важно
эффективное управление запросами, отказоустойчивость и масштабируемость, что как раз и может предложить такой подход.
Каждый сервис выполняет только узкоспециализированные задачи, например, сервис аутентификации или сервис рекомендаций.
Пожалуй одним из самых значимых плюсов является тот факт, что, если "отвалится" один из сервисов, это не повлечет за собой
сбой всей системы, она продолжит функционировать.

Системы оркестрации приложений были созданы для управления разрозненными компонентами распределенной системы. Они упрощают
разрабоку и поддержку распределенных систем, автоматизируя процессы управления, обновления и масштабирования. Однако, они
вносят и сложность, ведь это требует от команды разработчиков дополнительных знаний и умений. Примеры: **Kubernetes** и
**Docker Swarm**.

Очереди обработки сообщений применяются для асинхронной передачи данных между сервисами, возможности их взаимодействия
друг с другом. Сообщения здесь - это любые данные или запросы, которыми обениваются сервисы внутри системы. Очереди позволяют
эффективно управлять потоком данных. Примеры: **RabbitMQ** и **Apache Kafka**.

Преимущества распределенных систем:
- Повышенная отказоустойчивость;
- Лучшая масштабируемость;
- Возможность балансировать нагрузку между серверами или вычислительными узлами.

Недостатки распределенных систем:
- Сложность разработки выше, чем у монолитных систем;
- У монолитных систем, как правило, меньше временные затраты на взаимодействие компонентов из-за того, что все компоненты
работают в рамках одного процесса;
- Для разработки и поддержки распределенной системы требуются дополнительные организационные расходы.

В распределенную систему можно внедрить параллельные вычисления. Иногда это помогает, а иногда наоборот вредит. Разберем
конкретные примеры. Целесообразно при обработке независимых задач и высоких требованиях к производительности, например,
глубокие математические рассчеты, работа с большими данными. Нецелесообразно при работе с мелкой задачей или в случаях,
когда важна последовательность операций, например, рекурсивное вычисление факториала числа.

Можно сделать вывод, что распределенные системы - это нужный и важный вид архитектуры, иногда он является единственно
верным, а иногда от него стоит отказаться. Правильный выбор на этапе проектирования - это ключ к качественному продукту.