Как автоматически масштабировать работу веб-сайта Python на основе очередей служебной шины в Azure? - PullRequest
0 голосов
/ 13 июня 2019

Если в очереди служебной шины есть какие-либо сообщения, я хочу, чтобы моя работа с Python расширялась, чтобы сообщения обрабатывались быстрее.

У меня есть веб-работа с питоном, которая отправляет информацию из очереди служебной шины.Очередь заполняется каждый день в полночь и может содержать от 0 до около 400 тыс. Сообщений.

Узким местом в текущей обработке является необходимость загрузки некоторых данных, а это означает, что расширение веб-задания выигралоне так сильно, как распараллеливание.

Я увеличил его до 10 экземпляров от 1, но это не влияет на скорость, с которой сообщения принимаются из очереди, что говорит о том, что это работает не так, как я ожидаю.Когда он был в 1 экземпляре, он обрабатывал ~ 1,53 тыс. В час.Через час после масштабирования до 10 экземпляров было обработано ~ 1,5 тыс. Сообщений (так что, по сути, без разницы).

Код, который я использую для взаимодействия с очередью, следующий: (если есть лучший способ сделать этоэто в Python, пожалуйста, дайте мне знать!):

from azure.servicebus import ServiceBusService, Message, Queue

bus_service = ServiceBusService(
    service_namespace= <namespace>,
    shared_access_key_name='RootManageSharedAccessKey',
    shared_access_key_value=<key>)

while(1):

    msg = bus_service.receive_queue_message(<queue>, peek_lock=False, timeout=1)

    if msg.body is None:

        print("No messages in queue")
        time.sleep(5)
    else:

        number = int(msg.body.decode('utf-8'))
                print(number)

Я знаю, что в C # есть атрибут QueueTrigger для веб-заданий, но я не знаю ничего подобного для Python.

Я бы хотеложидайте, что чем больше экземпляров будет запущено в службе приложений, тем быстрее будут обрабатываться сообщения, так почему же это не то, что я вижу?

1 Ответ

0 голосов
/ 14 июня 2019

Узким местом в программе была база данных, которая была на максимуме.Добавление большего количества экземпляров только увеличивало количество вызовов в базе данных и, следовательно, замедляло каждый экземпляр.

Масштабирование базы данных и оптимизация вызовов базы данных повысили производительность, а также теперь означает, что несколько экземпляров можно ускорить для дальнейшего увеличенияпропускная способность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...