Merge pull request 'polevoy_sergey_lab_8' (#246) from polevoy_sergey_lab_8 into main
Reviewed-on: #246
This commit is contained in:
commit
7a1ba7aa9a
32
polevoy_sergey_lab_8/README.md
Normal file
32
polevoy_sergey_lab_8/README.md
Normal file
@ -0,0 +1,32 @@
|
||||
## Лабораторная работа № 8. Как Вы поняли, что называется распределенной системой и как она устроена?
|
||||
|
||||
Большую часть сложных систем реализуют в "распределенном" стиле(пусть и не все). Стоит разобраться почему. Большие и не очень компании с большими системами имеют и настолько же большие амбиции, поэтому для создания множества взаимодействующих вещей множеством команд разработчиков удобнее сделать это в виде распределённой системы. Каждый компонент взаимозаменяем в условиях реализации обозначенного интерфейса взаимодействия и может быть создан любыми удобными для этого технологиями, поэтому команда может сосредоточиться на своём стеке технологий и задачах. Но всё же стоит отметить, что продукты масштаба Вконтакте осознанно и по нужным им причинам применяют распределённый подход. Есть примеры продуктов, которыми пользуются многие и компании которых не малы, оставшихся на монолитной архитектуре потому, что переход на распределённый подход не давал значимых преимуществ.
|
||||
|
||||
Для управления распределёнными приложениями могут использоваться системы оркестрации(например, Kubernates). Они выполняют следующие функции:
|
||||
- Автоматизация развёртывания и масштабирования приложений
|
||||
- Управление ресурсами контейнеров/узлов
|
||||
- Автоматическое восстановление после сбоев засчёт проверки факта функционирования приложения/узла и при надобности последующей его перезагрузки
|
||||
Тем не менее, сам факт использования оркестратора вносит свои трудности с его использованием и настройкой
|
||||
|
||||
Так как сервисы взаимосвязаны, им нужно как-то общаться друг с другом. Для этого может пригодиться очередь сообщений. Она отвечает за то, чтобы принимать и отдавать сообщения (а вот последует за этим получением какая-либо деятельность - неважно, очереди достаточно того, что сервис получил сообщение). Само же сообщение представляет собой просто данные, от банального уведомления до целого "полотна" полезной нагрузки.
|
||||
|
||||
К преимуществам распределённых систем можно отнести:
|
||||
|
||||
- Гибкость в реализации каждого компонента/сервиса
|
||||
- Высокая горизонтальная масштабируемость
|
||||
- Возможность географического распределения
|
||||
|
||||
К недостаткам же:
|
||||
|
||||
- Сложность разработки, отладки и сопровождения
|
||||
- Возможность несогласованности данных
|
||||
- Издержки передачи запросов/сообщений по сети, включая сериализацию и десериализацию данных
|
||||
|
||||
В сложной распределённую систему можно внедрить параллельные вычисления, но с некоторыми примечаниями и вопросами, которые стоит принять во внимание перед внедрением:
|
||||
|
||||
- То, что некоторое действие выполняется в другом потоке/процессе не означает, что само действие от этого выполняется быстрее
|
||||
- Мы внедряем параллельное вычисление потому, что решение возможно декомпозировать на независимые части и вычисления достаточно сложны, чтобы блокировать основной поток? По-хорошему да.
|
||||
- Поставленная задача требует выполнения тяжелых IO-bound задач или CPU-bound задач? По-хорошему второе.
|
||||
- Создание и управление потоками/процессами по ресурсам будет стоить меньше, чем текущая реализация? По-хорошему да.
|
||||
|
||||
Иными словами, параллельные вычисления не панацея и не должны использоваться "потому что параллельные", необходимо проводить тестирование и анализировать возможные преимущества и недостатки подхода.
|
Loading…
Reference in New Issue
Block a user