59 lines
No EOL
3.7 KiB
Text
59 lines
No EOL
3.7 KiB
Text
@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 |