Merge pull request 'karamushko_maxim_lab_8' (#400) from karamushko_maxim_lab_8 into main

Reviewed-on: #400
This commit is contained in:
Alexey 2025-01-02 13:15:05 +04:00
commit 16523bb0ff

View File

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