Мне нужна масштабируемая обработка очереди, основанная на Docker / Python Worker. Моя мысль пошла к Кубернетес. Тем не менее, я не уверен насчет лучшего контроллера / сервиса.
На основе функций 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 для этого?