← Назад к вопросам
Как на диаграмме последовательности показать асинхронность?
2.0 Middle🔥 11 комментариев
#Нотации и диаграммы
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как на диаграмме последовательности показать асинхронность
Диаграмма последовательности (Sequence Diagram) — это инструмент UML для визуализации взаимодействия между объектами. Асинхронные операции требуют специальных нотаций для правильного отображения.
Основные различия: синхронность vs асинхронность
Синхронный вызов
Вызывающий объект ждёт ответа перед продолжением.
Объект A -----> Объект B (сплошная стрелка)
<-----
Асинхронный вызов
Вызывающий объект НЕ ждёт ответа и продолжает работу.
Объект A ----> Объект B (пунктирная стрелка)
Нотация асинхронности в диаграмме
1. Пунктирная стрелка (Open arrow)
Для асинхронных сообщений (событий):
Объект A ---> Объект B
(пунктирная стрелка с открытым наконечником)
Обозначает: "отправить сообщение и не ждать ответа"
2. Сплошная стрелка (Solid arrow)
Для синхронных вызовов (методов):
Объект A ====> Объект B
(сплошная стрелка с закрытым наконечником)
Обозначает: "вызвать метод и ждать результата"
3. Прерывистая стрелка возврата
Для возврата из синхронного вызова:
Объект A <===- Объект B
(прерывистая стрелка)
Обозначает: "возврат значения"
4. Стрелка самовызова
Для вызова методов того же объекта:
Объект A --->
| |
|___________| (петля)
Практический пример: асинхронная обработка заказа
Участники:
клиент : Клиент
web : WebServer
queue : MessageQueue
worker : OrderWorker
email : EmailService
db : Database
Последовательность:
клиент ---> web: POST /orders {items} (синхронный вызов)
web <--- клиент: 202 Accepted (ответ)
web ----> queue: enqueue(order) (асинхронный - пунктир)
(web НЕ ждёт)
queue ---> worker: process(order) (асинхронный)
(queue НЕ ждёт)
worker ====> db: save(order) (синхронный)
worker <==== db: OK (ответ)
worker ----> email: send_confirmation() (асинхронный)
(worker НЕ ждёт)
email ====> smtp: send_email() (синхронный)
email <==== smtp: OK
Нотация в PlantUML
PlantUML — удобный инструмент для рисования диаграмм.
@startuml
autonumber
actor Клиент
participant "Web API" as web
participant "Message Queue" as queue
participant "Order Worker" as worker
participant "Database" as db
participant "Email Service" as email
Клиент -> web: POST /orders (синхронный)
activate web
web --> Клиент: 202 Accepted
deactivate web
web ->> queue: enqueue(order) (асинхронный, пунктир)
queue ->> worker: process(order)
activate worker
worker -> db: save(order)
activate db
db --> worker: OK
deactivate db
worker ->> email: send_confirmation()
deactivate worker
email -> email: prepare_email()
@enduml
Обозначения в PlantUML
-> синхронный (сплошная стрелка)
--> возврат (пунктирная стрелка)
->> асинхронный (пунктирная стрелка, открытый наконечник)
Пример: микросервисная архитектура
Участники:
users : UserService
orders : OrderService
payments : PaymentService
notifications : NotificationService
Последовательность:
users --> orders: createOrder(user_id, items)
activate orders
orders --> users: order_id (синхронный ответ)
deactivate users
orders ->> payments: process_payment(order_id) (асинхронный)
(orders продолжает работу)
orders --> Client: 201 Created (возвращает клиенту сразу)
activate payments
payments --> payments: charge_card()
payments ->> notifications: payment_success(order_id) (асинхронный)
deactivate payments
activate notifications
notifications --> notifications: send_email()
deactivate notifications
Вспомогательные элементы
1. Активация (Activation Box)
Показывает, когда объект активно что-то делает.
Объект A
|------| (прямоугольник = активна)
| |
2. Альтернативные последовательности (alt)
opt [условие]
-- содержимое при условии --
end
alt [условие 1]
-- вариант 1 --
else [условие 2]
-- вариант 2 --
else
-- вариант по умолчанию --
end
3. Параллельные операции (par)
par [параллельно]
worker1 ->> service1: task1()
and
worker2 ->> service2: task2()
end
4. Цикл (loop)
loop [для каждого элемента]
system -> service: process(item)
end
Полный пример с PlantUML
@startuml
autonumber
actor User as user
participant "API Gateway" as api
participant "Order Service" as orders
participant "Message Queue" as queue
participant "Email Service" as email
participant "Payment Service" as payment
participant "Database" as db
user -> api: POST /orders (синхронный вызов)
activate api
api -> orders: createOrder(items)
activate orders
orders -> db: INSERT order
activate db
db --> orders: order_id
deactivate db
orders --> api: 201 Created
deactivate orders
api --> user: order_id (ответ пользователю)
deactivate api
Note over api,queue: Асинхронная обработка
orders ->> queue: enqueue(order_id)
queue ->> payment: process_payment(order_id)
activate payment
payment -> payment: charge_card()
payment ->> queue: payment_processed(order_id)
deactivate payment
queue ->> email: send_confirmation(order_id)
activate email
email -> email: generate_email()
email -> email: send()
deactivate email
Note over payment,email: Вся асинхронная работа
@enduml
Ключевые принципы для асинхронности
1. Возвращай ответ сразу
После записи в очередь сразу верни 202 Accepted
Не жди результата обработки
2. Используй асинхронные стрелки
Пунктирные стрелки (-->) для асинхронных сообщений
Сплошные стрелки (-->) для синхронных
3. Показывай параллельное выполнение
Если несколько задач выполняются параллельно,
покажи их на диаграмме на одном уровне,
а не друг за другом
4. Используй activation boxes
Покажи активность объектов прямоугольниками
Длина прямоугольника = время обработки
Инструменты для создания диаграмм
- PlantUML — текстовое описание, быстро
- Draw.io (diagrams.net) — визуальный редактор
- Lucidchart — профессиональный инструмент
- Miro — для совместной работы
- ArchiMate — расширенная нотация
Значение для System Analyst
System Analyst должен:
- Правильно представлять асинхронные процессы
- Использовать правильные нотации UML
- Общаться с разработчиками ясно
- Документировать архитектуру
- Показывать параллелизм и зависимости
- Выбирать правильный инструмент для диаграмм