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