如何根据 Azure 中的服务总线队列自动缩放 Python webjob?
How to autoscale Python webjob based on Service Bus Queues in Azure?
当服务总线队列包含任何消息时,我希望我的 python webjob 横向扩展以便更快地处理消息。
我有一个 python 网络作业,它提供服务总线队列。该队列每天午夜填充,可以添加 0 到大约 40 万条消息。
当前处理的瓶颈是需要下载一些数据,这意味着扩展 webjob 的帮助不如并行化。
我将其从 1 个实例扩展到 10 个实例,但这似乎并未影响消息从队列中消耗的速率,这表明这并未按我预期的方式工作。当它在 1 个实例上时,它在一小时内处理了 ~1.53k。自扩展到 10 个实例后的一小时内,它处理了约 1.5k 条消息(所以基本上没有区别。)
我用来连接队列的代码是这样的(如果 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# 中有一个用于 webjobs 的 QueueTrigger 属性,但我不知道 Python.
有任何类似的属性
我希望应用服务中的实例 运行 越多,处理消息的速度就越快,为什么我看到的不是这样?
程序的瓶颈是数据库,最大。添加更多实例只会增加对数据库的调用次数,因此会减慢每个实例的速度。
扩展数据库和优化数据库调用提高了性能,现在也意味着可以旋转多个实例以进一步提高吞吐量。
当服务总线队列包含任何消息时,我希望我的 python webjob 横向扩展以便更快地处理消息。
我有一个 python 网络作业,它提供服务总线队列。该队列每天午夜填充,可以添加 0 到大约 40 万条消息。
当前处理的瓶颈是需要下载一些数据,这意味着扩展 webjob 的帮助不如并行化。
我将其从 1 个实例扩展到 10 个实例,但这似乎并未影响消息从队列中消耗的速率,这表明这并未按我预期的方式工作。当它在 1 个实例上时,它在一小时内处理了 ~1.53k。自扩展到 10 个实例后的一小时内,它处理了约 1.5k 条消息(所以基本上没有区别。)
我用来连接队列的代码是这样的(如果 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# 中有一个用于 webjobs 的 QueueTrigger 属性,但我不知道 Python.
有任何类似的属性我希望应用服务中的实例 运行 越多,处理消息的速度就越快,为什么我看到的不是这样?
程序的瓶颈是数据库,最大。添加更多实例只会增加对数据库的调用次数,因此会减慢每个实例的速度。
扩展数据库和优化数据库调用提高了性能,现在也意味着可以旋转多个实例以进一步提高吞吐量。