sandbox/ivideon/puml/Crowd/Tevian/crowd_tevian_processing.puml
2026-02-13 17:36:23 +03:00

59 lines
No EOL
3.7 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@startuml Crowd Node - Request Processing Flow
!define COMPONENT_BG_COLOR #E3F2FD
!define API_BG_COLOR #FFF3E0
!define STORAGE_BG_COLOR #F3E5F5
participant "tasks.py" as TaskListener COMPONENT_BG_COLOR
participant "analyzer.py" as Analyzer COMPONENT_BG_COLOR
participant "PersonDetector" as PersonDetector
participant "PersonDetectionService" as PersonDetectionService
participant "Redis Queue" as RedisQueue #FFCCCC
participant "S3 Storage" as S3 STORAGE_BG_COLOR
participant "Central" as Central API_BG_COLOR
== Вариант 1: Получаем задачу в analyze, процессим синхронно и отдаем ответ ==
TaskListener -> Analyzer : Получена задача на процессинг
Analyzer -> PersonDetector : Отправка задачи на анализ
PersonDetector -> PersonDetectionService : Установка HTTP соединения
group Открытое HTTP соединение
PersonDetector -> PersonDetectionService : HTTP POST запрос
PersonDetectionService -> PersonDetectionService : Обарботка запроса
PersonDetectionService --> PersonDetector : Отправка в response результата
end group
PersonDetector --> Analyzer : Результаты задачи
== Вариант 2: Получаем задачу в analyze, кладем в очередь, процессим в очереди, формируем результат и отдаем в ответе analyze ==
TaskListener -> Analyzer : Получена задача на процессинг
Analyzer -> RedisQueue : Положили в очередь задачу на анализ изображения
group Polling
PersonDetector -> RedisQueue : полит очередь на предмет наличия задач
RedisQueue --> PersonDetector : Получает задачу на анализ
group Асинхронный запрос на анализ
PersonDetector -> PersonDetectionService : Дерганье API сервиса для анализа
PersonDetectionService -> PersonDetectionService : Обарботка запроса
PersonDetectionService --> PersonDetector : Отправка в response результата
end group
end group
group Polling
Analyzer -> RedisQueue : Полит в ожидании выполненных задач
RedisQueue --> Analyzer : Выполненные задачи анализа
end group
== Вариант 3: Получаем задачу в analyze, процессим синхронно, формируем результат, отдаем в ответе get_results ==
note over PersonDetector
Такое ощущение что это похоже не вариант 1
end note
== Вариант 4: Получаем задачу в analyze кладем в очередь, процессим в очереди, формируем результат и отдаем в ответе get_results ==
TaskListener -> Analyzer : Получена задача на процессинг
activate Analyzer
Analyzer -> PersonDetector : Отправка задачи на анализ\n<b>во внутреннюю очередь PersonDetector'a</b>
group Внутрянка PersonDetector'a
PersonDetector -> PersonDetector: как то хэндлит запросы на обработку
group Обработка в порядке очереди
PersonDetector -> PersonDetectionService : отправляет HTTP запросы на обработку\nпо внутренней логике
PersonDetectionService --> PersonDetector
PersonDetector --> Analyzer : Результат задачи на обработку
deactivate Analyzer
end group
end group
@enduml