7.2 KiB
1. Зачем сложные системы (например, социальная сеть ВКонтакте) пишутся в "распределенном" стиле, где каждое отдельное приложение
(или сервис) функционально выполняет только ограниченный спектр задач?
Их пишут в таком стиле, чтобы если один из серверов "упадет", то другие смогут поддерживать работу приложения. Таким образом, если бы ВКонтакте писался на монолите, то все приложение со всеми функциями не было бы доступно. В случае же с распределенным, какой-то отдельный функционал или мини-приложение может не работать, но это не так глобально и не так ощущается пользователями, как если бы приложение не работало целиком. Такие системы отказоустойчивы, а также более надежны и производительны.
2. Для чего были созданы системы оркестрации приложений?
Каким образом они упрощают / усложняют разработку и сопровождение распределенных систем?
Оркестрация - автоматическое размещение, координация и управление сложными компьютерными системами и службами. Условно, определяют систему в контейнеры и управляет ими, отслеживает, как они работают, управляет жизненным циклом контейнеров.
Они были созданы для автоматизации процессов, управления инфраструктурой и масштабируемости.
Упрощают развертывание и обновление приложений, помогают отслеживать зависимость между сервисами и обеспечивают их корректное взаимодействие.
Усложняют из-за сложности настройки и постепенного увеличения числа компонентов.
3. Для чего нужны очереди обработки сообщений и что может подразумеваться под сообщениями?
Очереди обработки сообщений — это важный компонент архитектуры распределенных систем, который обеспечивает асинхронную и надежную передачу данных между различными компонентами или сервисами.
Очереди поддерживают асинхронность, то есть возможность работы компонентов независимо друг от друга, что значит, что один компонент может отправить сообщение в очередь и продолжить свою работу, не дожидаясь его обработки.
Надежность - использование очередей уменьшают вероятность потери сообщений.
Также очереди помогают распределять нагрузку между приложениями.
Под сообщениями могут подразумеваться: События: Информация о том, что произошло в системе. Например, "пользователь зарегистрировался", "заказ был размещен", "файл был загружен".
Команды: Указания другим компонентам системы выполнить какие-то действия, например, "обработать платеж", "выполнить задачу" или "отправить уведомление".
Данные: Конкретные данные, которые необходимо передать, например, JSON-объект с информацией о заказе или текст сообщения.
Запросы: Запросы на получение информации или выполнения определенных операций, которые могут быть обработаны позже.
Ошибки или уведомления: Информация о проблемах или событиях, требующих внимания, например, "не удалось записать данные в базу" или "недостаточно прав".
4. Какие преимущества и недостатки распределенных приложений существуют на Ваш взгляд?
Преимущества заключаются в масштабируемости, отказоустойчивости и производительности. Также важную роль играет гибкость - можно разрабатывать и тестировать компоненты независимо друг от друга. Из этого также следует разделение ответственности - отдельные компоненты отвечают за конкретные задачи.
К недостаткам я бы отнесла сложность разработки, меньшую степень безопасности, а также проблемы с сетью. Из-за того, что компоненты разделены по разным узлам, это может привести к задержкам в работе. Касательно безопасности, распределенные системы больше подвержены атакам из-за большого количества узлов.
5. Целесообразно ли в сложную распределенную систему внедрять параллельные вычисления?
Приведите примеры, когда это действительно нужно, а когда нет.
Это нужно, когда существует необходимость в обработке больших данных, в научных вычислениях, сложных вычислительных задачах и
обработке событий в реальном времени.
Это нецелесообразно внедрять в систему, когда существуют сложные алгоритмы с последовательной логикой или частыми взаимодействиями,
а также когда речь идет о небольших и простых в вычислении задач.