Merge pull request 'polevoy_sergey_lab_8' (#246) from polevoy_sergey_lab_8 into main

Reviewed-on: #246
This commit is contained in:
Alexey 2024-12-15 13:54:40 +04:00
commit 7a1ba7aa9a

View File

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