Azerbaijan, Georgia, Uzbekistan
XcitiumЗапрос демонстрации
МенюЗакрыть
Все материалы

Инженерия приложений · Модели инфраструктуры

Виртуальные машины, контейнеры и архитектура микросервисов

Виртуальная машина и контейнер изолируют ресурсы на разных уровнях. Микросервисы делят приложение на независимо выпускаемые компоненты; выбор зависит от производительности, совместимости, изоляции и операционной сложности.

Серверные здания, соединённые мостом на фоне гор

Главная мысль

Учитывайте разные границы изоляции контейнеров и VM. Отдельно защищайте узел, гипервизор, образы, учётные записи сервисов и сетевые границы.

Гипервизор распределяет физические ресурсы между VM

Гипервизор, или монитор виртуальных машин, распределяет процессорное время, память, диски и сетевые ресурсы между несколькими VM; каждая VM запускает собственную ОС и процессы. Гипервизор типа 1 работает непосредственно на оборудовании, типа 2 — поверх основной операционной системы. Тип 1 часто выбирают для рабочих систем в центрах обработки данных, а тип 2 удобен для локальной разработки и тестирования. Совместное использование ресурсов помогает консолидировать серверы и быстро создавать среды, но сам гипервизор остаётся критичным уровнем управления.

ТипСлой работыТипичное применение
Type 1Непосредственно на физическом оборудованииСерверы, центры обработки данных, облачные узлы
Type 2Поверх основной операционной системыРазработка, тестирование, виртуализация на рабочем компьютере

VM и контейнер обеспечивают разную изоляцию

VM получает виртуальное оборудование через гипервизор и запускает полноценную гостевую ОС. Обычный контейнер упаковывает приложение и зависимости, использует общее с узлом ядро и изолируется средствами ОС, например пространствами имён и группами управления ресурсами в Linux. Это уменьшает накладные расходы, но не устраняет риски ядра и среды выполнения. Разные образы контейнеров не создают отдельных границ операционной системы. VM может подойти для задач со специальным ядром, устаревшими зависимостями или более строгими требованиями к изоляции арендаторов; контейнер удобен для быстрого переноса совместимых компонентов.

Микросервис — независимо развертываемая бизнес-функция

Микросервис — компонент, который выполняет узкую бизнес-функцию в отдельном процессе и взаимодействует с другими компонентами через API или сообщения. Оплата, аутентификация и уведомления могут быть отдельными сервисами; каждая команда тестирует и развертывает свой компонент. Монолит может упростить развертывание и работу с общей кодовой базой, а микросервис позволяет отдельно масштабировать и обновлять выбранную часть. Взамен требуется управлять большим количеством сетевых связей, развёртываний, учётных записей сервисов, журналов и потоков данных. Не дробите архитектуру только из-за моды: оцените операционные возможности команды и реальную пользу границ.

КритерийМонолитМикросервис
ВыпускВсё приложение как единое целоеОтдельно по сервисам
МасштабированиеМасштабируется всё приложениеНагруженный сервис можно масштабировать отдельно
Операционная сложностьИзначально меньше компонентовТребует наблюдения за большим числом связей

Явно задавайте доверие между сервисами

Нахождение в одной сети не должно автоматически означать доверие к сервису. Для запросов между сервисами используйте взаимную аутентификацию и шифрование, краткоживущие учётные данные и минимальные разрешения. Проверяйте образы контейнеров и зависимости при сборке, защищайте источник доверенных образов, обновляйте узлы и гипервизоры. Сетевыми политиками разрешайте только необходимые соединения pod и портов; проверьте поддержку этих политик сетевым модулем кластера. Собирайте журналы и метрики среды выполнения и сервисов, чтобы замечать подозрительные связи и потоки данных при компрометации компонента.

Выбирайте размещение вместе с моделью наблюдения

Контейнеры можно переносить между совместимыми средами, но сервисам с состоянием, особыми требованиями к оборудованию или постоянному хранилищу нужен отдельный проект. При росте числа микросервисов должны быть известны ответственный, версия, зависимости и границы данных каждого сервиса. Централизованные журналы, метрики и трассировки помогают восстановить путь запроса между сервисами; не помещайте чувствительные данные в журналы и метки метрик. Через CI/CD отслеживайте изменение кода и проверки, из которых получен каждый образ, и отрабатывайте возврат к прежней версии.