DAS_2024_1/artamonova_tatyana_lab_8/README.md

37 lines
4.2 KiB
Markdown
Raw Normal View History

2024-11-17 22:30:37 +04:00
## Лабораторная работа №8 ПИбд-42 Артамоновой Татьяны
### Эссе на тему "Устройство распределенных систем"
Сложные системы строятся по принципу распределенных приложений,
где каждый сервис отвечает за свою узкую специализацию. Это повышает масштабируемость,
надежность и удобство разработки. Разделение на отдельные сервисы позволяет независимо
масштабировать отдельные компоненты системы. Это упростит их обновление, замену и
повышает отказоустойчивость: выход из строя одного сервиса не обязательно
парализует всю систему.
Системы оркестрации, такие, как Kubernetes, были созданы для упрощения управления и
масштабирования распределенных систем. Они автоматизируют развертывание, масштабирование и
мониторинг приложений, работающих в контейнерах. С одной стороны, оркестраторы значительно
упрощают разработку, предоставляя готовые инструменты для управления инфраструктурой.
С другой стороны, они добавляют сложность требуется освоение новых инструментов и концепций,
а сама система оркестрации может стать узким местом.
Очереди сообщений (RabbitMQ, Kafka) используются для асинхронной передачи данных
между сервисами. Сообщения могут представлять собой любые данные: запросы на выполнение
действия, уведомления о событиях, результаты обработки. Асинхронная обработка позволяет
повысить производительность и отказоустойчивость, так как сервисы не зависят от мгновенного
ответа друг друга. Если один сервис временно недоступен, сообщения накапливаются в очереди и
обрабатываются позже.
Преимущества распределенных приложений очевидны: масштабируемость, отказоустойчивость,
гибкость разработки. Но есть и недостатки. Распределенная система гораздо сложнее в разработке,
тестировании и отладке, чем монолитная. Возникают проблемы с согласованностью данных,
распределёнными транзакциями и мониторингом.
Внедрение параллельных вычислений в сложную распределенную систему имеет смысл,
если есть задачи, которые можно разбить на независимые подзадачи, решаемые параллельно.
Например, обработка больших объемов данных или выполнение ресурсоемких
вычислений. Однако, если система ограничена I/O операциями,
параллельные вычисления могут не дать значительного выигрыша
в производительности из-за "узких мест" в других частях системы. В таких случаях,
оптимизация I/O операций может быть эффективнее, чем добавление параллелизма.