我们有一个基于微服务架构(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稳定工作