32 lines
5.7 KiB
Markdown
32 lines
5.7 KiB
Markdown
|
## Лабораторная работа № 8. Как Вы поняли, что называется распределенной системой и как она устроена?
|
|||
|
|
|||
|
Большую часть сложных систем реализуют в "распределенном" стиле(пусть и не все). Стоит разобраться почему. Большие и не очень компании с большими системами имеют и настолько же большие амбиции, поэтому для создания множества взаимодействующих вещей множеством команд разработчиков удобнее сделать это в виде распределённой системы. Каждый компонент взаимозаменяем в условиях реализации обозначенного интерфейса взаимодействия и может быть создан любыми удобными для этого технологиями, поэтому команда может сосредоточиться на своём стеке технологий и задачах. Но всё же стоит отметить, что продукты масштаба Вконтакте осознанно и по нужным им причинам применяют распределённый подход. Есть примеры продуктов, которыми пользуются многие и компании которых не малы, оставшихся на монолитной архитектуре потому, что переход на распределённый подход не давал значимых преимуществ.
|
|||
|
|
|||
|
Для управления распределёнными приложениями могут использоваться системы оркестрации(например, Kubernates). Они выполняют следующие функции:
|
|||
|
- Автоматизация развёртывания и масштабирования приложений
|
|||
|
- Управление ресурсами контейнеров/узлов
|
|||
|
- Автоматическое восстановление после сбоев засчёт проверки факта функционирования приложения/узла и при надобности последующей его перезагрузки
|
|||
|
Тем не менее, сам факт использования оркестратора вносит свои трудности с его использованием и настройкой
|
|||
|
|
|||
|
Так как сервисы взаимосвязаны, им нужно как-то общаться друг с другом. Для этого может пригодиться очередь сообщений. Она отвечает за то, чтобы принимать и отдавать сообщения (а вот последует за этим получением какая-либо деятельность - неважно, очереди достаточно того, что сервис получил сообщение). Само же сообщение представляет собой просто данные, от банального уведомления до целого "полотна" полезной нагрузки.
|
|||
|
|
|||
|
К преимуществам распределённых систем можно отнести:
|
|||
|
|
|||
|
- Гибкость в реализации каждого компонента/сервиса
|
|||
|
- Высокая горизонтальная масштабируемость
|
|||
|
- Возможность географического распределения
|
|||
|
|
|||
|
К недостаткам же:
|
|||
|
|
|||
|
- Сложность разработки, отладки и сопровождения
|
|||
|
- Возможность несогласованности данных
|
|||
|
- Издержки передачи запросов/сообщений по сети, включая сериализацию и десериализацию данных
|
|||
|
|
|||
|
В сложной распределённую систему можно внедрить параллельные вычисления, но с некоторыми примечаниями и вопросами, которые стоит принять во внимание перед внедрением:
|
|||
|
|
|||
|
- То, что некоторое действие выполняется в другом потоке/процессе не означает, что само действие от этого выполняется быстрее
|
|||
|
- Мы внедряем параллельное вычисление потому, что решение возможно декомпозировать на независимые части и вычисления достаточно сложны, чтобы блокировать основной поток? По-хорошему да.
|
|||
|
- Поставленная задача требует выполнения тяжелых IO-bound задач или CPU-bound задач? По-хорошему второе.
|
|||
|
- Создание и управление потоками/процессами по ресурсам будет стоить меньше, чем текущая реализация? По-хорошему да.
|
|||
|
|
|||
|
Иными словами, параллельные вычисления не панацея и не должны использоваться "потому что параллельные", необходимо проводить тестирование и анализировать возможные преимущества и недостатки подхода.
|