← Назад к вопросам

Как на диаграмме последовательности показать асинхронность?

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
  • Общаться с разработчиками ясно
  • Документировать архитектуру
  • Показывать параллелизм и зависимости
  • Выбирать правильный инструмент для диаграмм