diff --git a/lazarev_andrey_lab_8/README.md b/lazarev_andrey_lab_8/README.md new file mode 100644 index 0000000..1d781b6 --- /dev/null +++ b/lazarev_andrey_lab_8/README.md @@ -0,0 +1,70 @@ +# Лабораторная работа №8 + +## Задание + +Написать небольшое эссе (буквально несколько абзацев) своими словами (пожалуйста не пользуйтесь гуглом :) ) на тему "Устройство распределенных систем". А помогут Вам в этом вопросы из списка: + +1. Зачем сложные системы (например, социальная сеть ВКонтакте) пишутся в "распределенном" стиле, где каждое отдельное приложение (или сервис) функционально выполняет только ограниченный спектр задач? +2. Для чего были созданы системы оркестрации приложений? Каким образом они упрощают / усложняют разработку и сопровождение распределенных систем? +3. Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями? +4. Какие преимущества и недостатки распределенных приложений существуют на Ваш взгляд? +5. Целесообразно ли в сложную распределенную систему внедрять параллельные вычисления? Приведите примеры, когда это действительно нужно, а когда нет. + +## Результат + +### Зачем сложные системы пишутся в "распределенном" стиле. + +Причина для этого очень проста и заключается в том, что **распределенный стиль** используется для повышения гибкости, масштабируемости и отказоустройчивости системы. +Каждая функциональная часть системы выносится в отдельный сервис, что позволяет: + +- Масштабировать именно те компоненты, которые наиболее нагружены, без необходимости увеличивать ресурсы для всей системы; +- Разделять ответственность между командами разработки: каждая команда работает над своим сервисом, что ускоряет процесс разработки и внедрения изменений; +- Повышать отказоустойчивость: если один сервис выходит из строя, это не нарушает работу всей системы, другие сервисы продолжают работать. + +Например, тотже ВКонтакте может разделять сервисы для хранения фотографий, обработку сообщений и прочее. + +### Для чего были созданы системы оркестрации сообщений. + +**Системы оркестрации** (например, **Kubernetes**) автоматизируют развертывание, масштабирование и управление контейнерами. +Это особенно полезно в распределенных системах, где необходимо управлять множеством взаимодействующих сервисов. +Оркестраторы помогают: + +- Автоматически перезапускать или перемещать сервисы при сбоях; +- Упрощать масштабирование сервисов при увеличении нагрузки; +- Упрощать обновление и откат изменений; +- Мониторить состояние всех контейнеров и сервисов. + +Системы оркестрации позволяют быстрее и проще развертывать и поддерживать сложные системы, но также требуют опыта для настройки и сопровождения. + +### Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями. + +**Сообщения** — это данные или события, которые передаются между сервисами для выполнения задач. + +Очереди сообщений (например, **RabbitMQ**, **Kafka**) используются для асинхронного взаимодействия между сервисами. +Тем самым очереди позволяют: + +- Обеспечить надёжность передачи данных между сервисами даже при временных сбоях; +- Разделить большие задачи на более мелкие и обрабатывать их параллельно; +- Оптимизировать производительность, разгружая основные сервисы от частых операций ввода-вывода. + +Например, сообщение может представлять собой запрос на отправку уведомления, сохранение данных или запуск какой-либо задачи. + +### Какие преимущества и недостатки распределенных приложений существуют. + +Распределённые приложения обладают преимуществами, такими как **масштабируемость**, **отказоустойчивость** и **гибкость**. + +Каждый сервис можно развивать независимо, подбирая для него оптимальные технологии. +Это ускоряет разработку и внедрение изменений. + +Однако такие системы **сложнее разрабатывать и поддерживать**, требуя точного управления взаимодействием между сервисами и сложной отладки. +Дополнительно **возрастают расходы** на инфраструктуру и оркестрацию, так как нужны системы мониторинга и очереди сообщений. + +### Целесообразно ли внедрять параллельные вычисления в сложную распределенную систему. + +Параллельные вычисления могут быть полезны, когда задачи могут выполняться независимо и параллельно, например: +- Анализ данных и машинное обучение; +- Потоковая обработка данных, в которых система работает с частыми событиями (обработка транзакций и прочее). + +Однако параллельные вычисления могут быть излишними для задач, которые: +- Содержат много зависимостей и требуют синхронизации; +- Тяжелы для разделения на независимые части, то есть все идет последовательно и следующая часть зависит от результатов предыдущей. \ No newline at end of file