# Устройство распределенных систем

> Сложные системы такие как "ВКонтакте" пишутся в **распределенном** стиле, так как это даёт такие преимущества, как:

- **Масштабируемость**: Разделение на микросервисы позволяет масштабировать только те части системы, которые испытывают высокую нагрузку, не затрагивая другие компоненты.
- **Упрощение разработки и поддержки**: Микросервисная архитектура позволяет выделить разные команды для разработки и поддержки каждого отдельного сервиса, что ускоряет разработку и упрощает управление кодовой базой.
- **Устойчивость и отказоустойчивость**: Отказ одного микросервиса не ведет к отказу всей системы, что повышает её надежность.
- **Гибкость в выборе технологий**: Разные сервисы могут использовать разные языки программирования, базы данных и фреймворки, которые лучше подходят для конкретной задачи.

> Но у распределённых систем можно выявить и недостатки, такие как:

- **Сложность разработки и управления**
- **Сложность тестирования**
- **Задержки в сетевом взаимодействии**

> Для управления контейнерами в распределенных системах, были созданы специальные системы автоматизации для управления развертыванием. Называется **орекстратор**, и его преимущества заключаются в:

- **Автоматическое масштабирование**
- **Управление отказами**
- **Облегчение развертывания и обновления**
- **Управление конфигурациями и секретами**

> Для асинхронного взаимодействия между сервисами придуманы **очереди сообщений**, такие как, RabbitMQ или Kafka:

- **Сообщения** — это единицы данных, которые сервисы обмениваются друг с другом.

**Очереди** обеспечивают:

- **Буферизацию нагрузки**
- **Асинхронность**
- **Устойчивость к сбоям**

> Для внедрения параллельных вычислений в распределенную систему, должны быть весомы поводы, такие как, обработка большого кол-ва данных. Но если задачи простые или важна скорость обмена между сервисами, это может быть уже не так полезно.