diff --git a/polevoy_sergey_lab_8/README.md b/polevoy_sergey_lab_8/README.md new file mode 100644 index 0000000..f1528c4 --- /dev/null +++ b/polevoy_sergey_lab_8/README.md @@ -0,0 +1,32 @@ +## Лабораторная работа № 8. Как Вы поняли, что называется распределенной системой и как она устроена? + +Большую часть сложных систем реализуют в "распределенном" стиле(пусть и не все). Стоит разобраться почему. Большие и не очень компании с большими системами имеют и настолько же большие амбиции, поэтому для создания множества взаимодействующих вещей множеством команд разработчиков удобнее сделать это в виде распределённой системы. Каждый компонент взаимозаменяем в условиях реализации обозначенного интерфейса взаимодействия и может быть создан любыми удобными для этого технологиями, поэтому команда может сосредоточиться на своём стеке технологий и задачах. Но всё же стоит отметить, что продукты масштаба Вконтакте осознанно и по нужным им причинам применяют распределённый подход. Есть примеры продуктов, которыми пользуются многие и компании которых не малы, оставшихся на монолитной архитектуре потому, что переход на распределённый подход не давал значимых преимуществ. + +Для управления распределёнными приложениями могут использоваться системы оркестрации(например, Kubernates). Они выполняют следующие функции: +- Автоматизация развёртывания и масштабирования приложений +- Управление ресурсами контейнеров/узлов +- Автоматическое восстановление после сбоев засчёт проверки факта функционирования приложения/узла и при надобности последующей его перезагрузки +Тем не менее, сам факт использования оркестратора вносит свои трудности с его использованием и настройкой + +Так как сервисы взаимосвязаны, им нужно как-то общаться друг с другом. Для этого может пригодиться очередь сообщений. Она отвечает за то, чтобы принимать и отдавать сообщения (а вот последует за этим получением какая-либо деятельность - неважно, очереди достаточно того, что сервис получил сообщение). Само же сообщение представляет собой просто данные, от банального уведомления до целого "полотна" полезной нагрузки. + +К преимуществам распределённых систем можно отнести: + +- Гибкость в реализации каждого компонента/сервиса +- Высокая горизонтальная масштабируемость +- Возможность географического распределения + +К недостаткам же: + +- Сложность разработки, отладки и сопровождения +- Возможность несогласованности данных +- Издержки передачи запросов/сообщений по сети, включая сериализацию и десериализацию данных + +В сложной распределённую систему можно внедрить параллельные вычисления, но с некоторыми примечаниями и вопросами, которые стоит принять во внимание перед внедрением: + +- То, что некоторое действие выполняется в другом потоке/процессе не означает, что само действие от этого выполняется быстрее +- Мы внедряем параллельное вычисление потому, что решение возможно декомпозировать на независимые части и вычисления достаточно сложны, чтобы блокировать основной поток? По-хорошему да. +- Поставленная задача требует выполнения тяжелых IO-bound задач или CPU-bound задач? По-хорошему второе. +- Создание и управление потоками/процессами по ресурсам будет стоить меньше, чем текущая реализация? По-хорошему да. + +Иными словами, параллельные вычисления не панацея и не должны использоваться "потому что параллельные", необходимо проводить тестирование и анализировать возможные преимущества и недостатки подхода. \ No newline at end of file