Мне нужна масштабируемая обработка очереди на основе docker/python worker. Моя мысль ушла в сторону kubernetes. Однако я не уверен в лучшем контроллере/сервисе.
На основе функций Azure я получаю входящий http-трафик, добавляя простые сообщения в очередь хранилища. Над этими сообщениями нужно работать, а результаты отправлять обратно в очередь результатов.
Для обработки этих сообщений очереди я разработал код Python, зацикливающий очередь и работающий над этими заданиями. После каждого успешного цикла сообщение будет удалено из исходной очереди, а результат записан в очередь результатов. Когда очередь пуста, код существует.
Поэтому я создал образ докера, который запускает код Python. Если запущено более одного контейнера, очередь, очевидно, работает быстрее. Я также реализовал новые службы Azure Kubernetes, чтобы масштабировать это. Будучи новичком в kubernetes, я читал о парадигме работы с очередью, пока задача не будет готова. Мой простой шаблон yaml выглядит так:
apiVersion: batch/v1
kind: Job
metadata:
name: myjob
spec:
parallelism: 4
template:
metadata:
name: myjob
spec:
containers:
- name: c
image: repo/image:tag
Моя проблема сейчас в том, что задание не может быть перезапущено.
Обычно очередь заполняется некоторыми записями, а затем какое-то время ничего не происходит. Затем снова могут появиться большие очереди, которые необходимо обработать как можно быстрее. Конечно, я хочу снова запустить задание, но это кажется невозможным. Кроме того, я хочу свести к минимуму занимаемую площадь, если в очереди ничего нет.
Итак, мой вопрос: какую архитектуру/конструкции следует использовать для этого сценария и есть ли для этого простые примеры yaml?