Полное руководство по созданию диаграммы развертывания UML для простой системы онлайн-заказа еды

1. Цель диаграммы развертывания UML

А Диаграмма развертывания показывает физическую/временную архитектуру системы:

  • Аппаратные узлы (серверы, устройства, облачные экземпляры)
  • Программные артефакты, развернутые на этих узлах
  • Среды выполнения (контейнеры, среды выполнения)
  • Каналы связи между узлами (протоколы, соединения)

Для простой системы онлайн-заказа еды, она визуализирует, как:

  • Веб-интерфейсы клиентов и ресторанов обслуживаются
  • Работает бизнес-логика
  • Данные хранятся
  • Внешние сервисы (оплата, уведомления) интегрированы

Она помогает разработчикам, DevOps и заинтересованным сторонам понятьтопологию развертывания, точки масштабирования, границы безопасности и зависимости.

2. Ключевые элементы UML в диаграммах развертывания

Элемент Нотация UML (PlantUML) Значение / Когда использовать Примеры стереотипов
Узел node «Имя» Вычислительный ресурс (физический или виртуальный), который может размещать артефакты <<устройство>>, <<облачный>>
Устройство узел «Имя» <<устройство>> Физическое или виртуальное оборудование (сервер, мобильное устройство, маршрутизатор) <<устройство>>, <<сервер>>
Среда выполнения узел «Имя» <<среда выполнения>> Среда выполнения программного обеспечения/контейнер (Tomcat, Node.js, Docker, JVM) <<среда выполнения>>, <<контейнер>>
Артефакт артефакт «filename.war» Развертываемая единица (исполняемый файл, .jar, .js пакет, схема базы данных, файл конфигурации) <<исполняемый файл>>, <<файл>>, <<база данных>>
Компонент компонент «Имя» Логическая единица программного обеспечения (необязательно в диаграммах развертывания; часто реализуется артефактами) <<веб>>, <<сервис>>
Путь связи –, –>, ..> Сетевое соединение между узлами (может иметь метку протокола) HTTP/HTTPS, WebSocket, RMI
Зависимость / Вызов ..>, –> Использование/зависимость (например, фронтенд вызывает бэкенд) <<вызывает>>, <<доступ>>
Проявление / Реализация ..> с <<реализует>> или ..> Артефакт реализует / развертывается как компонент <<реализует>>, <<проявление>>
Внешняя система узел «Имя» <<внешняя система>> Сервис стороннего производителя, который находится вне вашего контроля <<внешний>>, <<SaaS>>

3. Рекомендации по построению диаграмм развертывания (особенно для веб-систем)

  • Держите его простым и понятным — избегайте перегруженности; одна диаграмма на основную среду (разработка/тестирование/продакшн — по желанию)
  • Используйте значимые группировки узлов (вложите узлы в узлы), чтобы показать кластеры/облачные регионы
  • Предпочитайте краткую нотацию — отображайте имена файлов/конфигурации только при необходимости; пропускайте избыточные стереотипы
  • Четко покажите границы — внутренняя облачная среда против внешних сервисов
  • Метки протоколов на путях (HTTP/HTTPS, WebSocket, TCP и т.д.)
  • Используйте направление слева направо для веб-систем (поток клиента → сервера → БД кажется естественным)
  • Различайте устройство (аппаратное обеспечение) против среду выполнения (время выполнения)
  • Показывайте реализацию только тогда, когда это добавляет ценность (артефакт → компонент)
  • Используйте skinparam в PlantUML для лучшей цветовой гаммы / читаемости
  • Для небольших/средних систем: максимум 4–8 узлов

4. Рекомендуемая структура для простой системы онлайн-заказа еды

Чистый, современный макет для этой системы:

  • Клиентская часть → Браузер (неявно) общается с Веб-сервер / CDN
  • Веб-сервер / CDN хостит статические файлы и артефакты SPA для сайта клиента и панели ресторана
  • Сервер API (среда выполнения) выполняет логику бэкенда
  • Сервер базы данных хостит PostgreSQL
  • Внешний Платежные и сервисы уведомлений

Типичные узлы:

  1. Веб-сервер / CDN <<устройство>>
  2. Сервер API <<среда выполнения>>
  3. Сервер базы данных <<среда выполнения>>
  4. Платежный шлюз <<внешний>>
  5. Сервис уведомлений <<внешний>>

5. Диаграмма, сгенерированная чат-ботом Visual Paradigm AI

Улучшенный и очищенный код PlantUML (с пояснениями)

@startuml

title Простая система онлайн-заказа еды - Диаграмма развертывания

направление слева направо

skinparam {
Цвет стрелки #424242
Цвет шрифта стрелки #424242
Размер шрифта по умолчанию 14
тень false
Цвет фона стереотипа C #ADD1B2
Цвет фона стереотипа I #ADD1B2
}

' ── Узлы ────────────────────────────────────────────────

узел "Веб-сервер / CDN" <<устройство>> как WebServer {
[HTML/JS/CSS сайта клиента] #..# (SPA клиента)
[HTML/JS/CSS панели администратора ресторана] #..# (SPA ресторана)
}

узел "Облачный бэкенд" <<устройство>> как Cloud {
узел "Сервер API" <<среда выполнения>> как APIServer {
артефакт "backend-api.jar / main.exe" как BackendArtifact
}

узел "Сервер PostgreSQL" <<среда выполнения>> как DBServer {
database "База данных PostgreSQL" как Postgres <<база данных>>
}
}

узел "Платежный шлюз" <<внешний>> как Payment {
[API платежей] как PaymentAPI
}

узел "Сервис уведомлений" <<внешний>> как Notification {
[WebSocket / API уведомлений] как NotifyAPI
}

' ── Связи ─────────────────────────────────────────

WebServer --> Cloud : HTTPS (вызовы API)

Cloud --> Payment : HTTPS (оплата)

Cloud --> Notification : WebSocket / HTTPS (обновления статуса)

' Артефакт → реализация компонента (необязательно, но понятно)
(SPA клиента) ..> BackendArtifact : <<вызывает>>
(SPA ресторана) ..> BackendArtifact : <<вызывает>>

BackendArtifact --> Postgres : <<JDBC / SQL>>

BackendArtifact --> PaymentAPI : <<вызовы HTTPS>>

BackendArtifact --> NotifyAPI : <<WebSocket / HTTPS>>

' Необязательно: показать протокол на БД, если нужно
' BackendArtifact -right-> Postgres : <<JDBC>>

note right of Cloud
Типичная настройка для небольших/средних систем:
• Один виртуальный сервер или небольшой кластер
• API и БД могут находиться на одном сервере (для простоты)
или быть раздельными для лучшей масштабируемости
end note

@enduml

6. Пошаговое руководство: Как создать свою диаграмму развертывания

  1. Перечислите все целевые объекты выполнения (серверы, контейнеры, внешние сервисы)
  2. Список развертываемых артефактов (то, что фактически выполняется: .js пакет, .jar, база данных)
  3. Группировать по узлам (вкладывать, когда логично — например, API + БД в одном облачном узле)
  4. Определить направление (слева направо хорошо работает для web → API → БД)
  5. Добавить пути коммуникации с метками протокола
  6. Добавить ключевые зависимости (<<вызывает>>, <<доступ>>)
  7. Применить skinparam для цветов/читаемости
  8. Добавить заметки для важных решений (одиночный vs многократный экземпляр, заметки по масштабированию)
  9. Проверить: Может ли инженер DevOps понять, где развернуть каждый элемент?

Сводка — краткое руководство по развертыванию простого заказа еды

Часть Типичный тип узла Пример артефакта Подключается через
Пользовательский интерфейс клиента Веб-сервер / CDN <<устройство>> Пакет SPA (HTML/JS) HTTPS → API
Панель управления рестораном Веб-сервер / CDN <<устройство>> Пакет админ-SPA HTTPS → API
Бизнес-логика Сервер API <<executionEnv>> backend-api.jar / исполняемый файл JDBC → БД, HTTPS → внешний
Хранение данных PostgreSQL <<executionEnv>> Файлы данных PostgreSQL + схема
Платежи Внешний <<SaaS>> Точка входа API платежей HTTPS
Обновления в реальном времени Внешний <<SaaS>> WebSocket / FCM / APNs WebSocket / HTTPS

Эта структура реалистична для MVP или развертывания небольшого и среднего масштаба (1–3 сервера + облачная БД + Stripe/PayPal + Firebase/Pusher).

Свободно изменяйте вложенность, протоколы или добавляйте примечания по масштабированию (например, балансировщик нагрузки, реплики), когда система будет расти.

🔗 Список источников