# Устройство распределенных систем > Сложные системы такие как "ВКонтакте" пишутся в **распределенном** стиле, так как это даёт такие преимущества, как: - **Масштабируемость**: Разделение на микросервисы позволяет масштабировать только те части системы, которые испытывают высокую нагрузку, не затрагивая другие компоненты. - **Упрощение разработки и поддержки**: Микросервисная архитектура позволяет выделить разные команды для разработки и поддержки каждого отдельного сервиса, что ускоряет разработку и упрощает управление кодовой базой. - **Устойчивость и отказоустойчивость**: Отказ одного микросервиса не ведет к отказу всей системы, что повышает её надежность. - **Гибкость в выборе технологий**: Разные сервисы могут использовать разные языки программирования, базы данных и фреймворки, которые лучше подходят для конкретной задачи. > Но у распределённых систем можно выявить и недостатки, такие как: - **Сложность разработки и управления** - **Сложность тестирования** - **Задержки в сетевом взаимодействии** > Для управления контейнерами в распределенных системах, были созданы специальные системы автоматизации для управления развертыванием. Называется **орекстратор**, и его преимущества заключаются в: - **Автоматическое масштабирование** - **Управление отказами** - **Облегчение развертывания и обновления** - **Управление конфигурациями и секретами** > Для асинхронного взаимодействия между сервисами придуманы **очереди сообщений**, такие как, RabbitMQ или Kafka: - **Сообщения** — это единицы данных, которые сервисы обмениваются друг с другом. **Очереди** обеспечивают: - **Буферизацию нагрузки** - **Асинхронность** - **Устойчивость к сбоям** > Для внедрения параллельных вычислений в распределенную систему, должны быть весомы поводы, такие как, обработка большого кол-ва данных. Но если задачи простые или важна скорость обмена между сервисами, это может быть уже не так полезно.