# Отчет по лабораторной работе №8

## Задание:

Написать небольшое эссе (буквально несколько абзацев) своими словами на тему "Устройство распределенных 
систем". А помогут Вам в этом вопросы из списка:

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

## Эссе на тему: "Устройство распределенных систем"

Как было рассмотрено ранее на лекциях, распределённые системы – это архитектура, в которой компоненты 
приложения работают на разных серверах и взаимодействуют друг с другом через сеть. В такой системе 
есть разные сервисы отвечают за конкретные задачи. К примеру, один отвечает за обработку сообщений, 
другой – за управление пользователями, третий – за работу с медиафайлами.

Однако почему используется именно этот подход? Основная причина заключается в масштабируемости и надёжности
подобных систем. Когда каждая функциональная часть системы – это отдельный сервис, можно 
легко масштабировать только ту часть, которая испытывает большую нагрузку. К примеру, если в системе 
возрастает количество запросов на загрузку фото, можно увеличить количество серверов, обрабатывающих 
изображения, не затрагивая при этом другие сервисы. Еще одно важное преимущество распределённой системы: 
если один сервис выйдет из строя, остальные продолжат работать.

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

Еще одна технология, которой необходимо владеть прежде чем приступить к работе с распределенными системами,
это обработка сообщений. Она имеет очереди обработки сообщений – инструмент для асинхронной коммуникации 
между различными компонентами системы. Под "сообщениями" могут подразумеваться данные или задачи, которые 
один сервис отправляет другому для обработки. Очереди помогают разгрузить систему, позволяя сервисам не 
ожидать немедленного ответа. Например, при загрузке фото сервис, принимающий файл, может поместить задачу 
обработки изображения в очередь, а другой сервис обработает её позже. Это повышает надёжность и упрощает 
управление пиковыми нагрузками.

Рассмотрев основные аспекты распределенных систем, можно выявить как негативные, так и позитивные черты.
К преимуществам распределённых систем можно отнести гибкость, масштабируемость, отказоустойчивость и 
возможность использования разных технологий для каждого сервиса. Однако такие системы сложны в разработке 
и сопровождении. Появляются проблемы с координацией между сервисами, отладкой, сетевой задержкой и 
безопасностью данных. Балансировка этих недостатков является ключевым вызовом для распределённых систем.

Что же касается параллельных вычислений, то их целесообразно использовать в системах с большими объёмами 
данных или задачами, которые могут быть обработаны одновременно. В этом помогли убедиться 5 и 6 
лабораторные работы, где собиралась временная метрика и по которой были сделаны аналогичные выводы. 
В системах машинного обучения или анализе больших данных параллельная обработка данных позволяет
существенно ускорить выполнение задач. Однако в некоторых сценариях это может быть излишним, особенно если
система работает с небольшими объёмами данных или требует строгой последовательности действий, где 
параллелизм может только усложнить реализацию.

Таким образом, можно сделать следующий вывод: распределённые системы предоставляют большие возможности для
масштабирования и надёжности, но требуют тщательного планирования и грамотного управления. Оркестрация, 
очереди сообщений и параллельные вычисления являются важными инструментами, которые помогают решать задачи
таких систем, однако их использование должно быть оправдано потребностями проекта.