RabbitMQ在高队列数量时性能低下

时间:2018-12-13 06:14:16

标签: python rabbitmq microservices rpc pika

我们有一个基于微服务架构(RPC模式)的项目。使用龙卷风+皮卡。对于每个命令工作者,使用命令ID创建队列以将结果路由回去。随着队列数量的增加,我们的性能下降。无法在50 RPS左右工作(用户请求和工作人员回答之间的延迟过多)。 nameko也有相同的问题(nameko与我们的实现几乎相同)。 码: 龙卷风处理程序

class DoNothingHandler(RequestHandler, GetRequestArgsMixin):
"""
Для нагрузочных тестов.
"""

@timed
@result_decorator
@coroutine
def get(self):
    args = self.post_args_dict()
    connector = yield UserServiceConnector.get_instance()
    result = yield connector.execute_command(commands.DoNothing, args)
    return result

服务连接器

class NamekoServiceConnector(AbstractServiceConnector):

@classmethod
@coroutine
def get_instance(cls) -> 'NamekoServiceConnector':
    if not cls._instance:
        cls._instance = cls()
    raise Return(cls._instance)

def __init__(self, command):
    self.config = {"AMQP_URI":""}
    self.commands = command

@coroutine
def execute_command(self, command_name: str, args: dict = None):
    with ClusterRpcProxy(self.config) as cluster_rpc:

        hello_res = cluster_rpc.greeting_service.hello.call_async(args)
        result = hello_res.result()
        logger.info(f"Got result {result}")
        command_result = AbstractResult(result=result)
        raise Return(command_result)

测试人员

from nameko.rpc import rpc

GreetingService类:     名称=“ greeting_service”

@rpc
def hello(self, id):
    return id

我们使用基于Redis的消息传递对其进行了测试。并且可以正常工作,直到400 RPS。我们做错了什么?也许我们需要用于RPC模式的另一个消息传递系统?希望获得500多个RPS稳定工作

0 个答案:

没有答案