# Лабораторная работа № 8. Как Вы поняли, что называется распределенной системой и как она устроена?

### Что такое распределенная система?
Распределенная система - это система состоящая из множества независимых узлов, каждый из которых выполняет строго свою функцию
Сегодня многие крупные приложения построены как распределенные системы. Это сделано для того, чтобы повысить эффективность выполнения задач, а также для более лучше масштабируемости, когда для улучшения обработки запроса нам нужно лишь поднять еще несколько экземпляров определенного сервиса.

### Системы оркестрации
Система оркестрации - это система над системой, то есть система, которая руководит распределенной системой. Такие системы решают как распределить нагрузку, ресурсы, нужно ли поднять новые экземпляры того или иного сервиса и прочее. Плюс: единая централизованное управление распределенной системой. Минус, вытекающий из плюса: единая точка входа и выхода, что может положить всю систему.

### Брокеры сообщений
Брокер сообщений - это система, которая позволяет связывать разные приложения и налаживать между ними связь. Брокеры состоят, в основном, из:
- Сообщения - некоторая информация, которую нужно передавать между разными приложениями
- Продюсеров - приложения, создающие сообщения
- Очереди сообщений, которые хранят сообщения до того момента, когда их смогут отправить получателю
- Получатели - приложения, которые принимают сообщения и используют информацию из них.

### Плюсы и минусы распределенных систем
Плюс:
- Эффективность. Два сервера обработают один запрос быстрее, чем один сервер
- Надежность. Если один сервер упал, то нагрузку всегда можно переправить на другой сервер
- Масштабируемость. Улучшить работу приложения можно добавив несколько новых серверных узлов.

Минусы:
- Технологическая сложность в реализации.
- Сложность в обеспечении общения между сервисами

### Параллельные вычисления
Параллельные вычисления - это вычисления, происходящие одновременно. Такие вычисления хороши, когда нужно обработать большие объемы данных, но не в ситуациях, когда работаем с небольшими объемами данных, так как это может создать лишние издержки.
Пример:
- Нужно использовать параллельные вычисления, когда вычисляем произведение двух больших матриц
- Не нужно использовать параллельные вычисления, когда нам нужно вычислить сумму элементов небольшого массива.