ZeroMQ令人惊讶地缓慢

时间:2018-01-01 23:26:29

标签: zeromq ice jeromq

我目前正在对一些通信中间件进行延迟基准测试,我发现ZeroMQ REQREP套接字的速度非常慢。例如,我期待ZeroMQ比ZeroC Ice更快。为了完整起见,这里是迄今为止的测试结果:

  1. Ice 每秒7600条消息
  2. ZeroMQ 每秒4300 - 4500条消息
  3. 消息是远程调用,数据结构作为参数。数据结构包含基本类型的字段(int,float,double,boolean,string)。起初我怀疑使用Protocol Buffers序列化数据可能是ZeroMQ的瓶颈,但后来我使用空消息测试,结果非常相似。即使ZeroMQ发送空消息,Ice也会更快。

    尽管如此,我想给ZeroMQ一个公平的机会。本着这种精神,我想知道我是否可以以任何方式提高REQREP的速度。也许我应该使用其他套接字?唯一的限制是通信应该像RPC一样。客户在期望其消息的结果时不应该做任何工作。

    以下是我的实施代码。我提供了Java版本的基准测试,但结果非常类似于Python(有点慢)和C ++(更快一点):

    客户端

    ...
    MQ.Context context = ZMQ.context(1);
    ZMQ.Socket socket = context.socket(ZMQ.REQ);
    socket.connect("tcp://*:5555");
    
    for(int i=0; i<measuredIterations; i++){
        t0 = System.nanoTime();
        socket.send("",0);
        socket.recv(0);
        rtt = System.nanoTime() - t0;
        ...
    }
    

    服务器

    ZMQ.Context context = ZMQ.context(1);
    ZMQ.Socket socket = context.socket(ZMQ.REP);
    socket.bind("tcp://*:5555");
    
    
    while (!Thread.currentThread().isInterrupted()){
        socket.recv(0);
        socket.send("",0);
    }
    

    其余代码基本上用于计算平均延迟和每秒消息。

    也许ZeroMQ对于这种通信模式来说速度很慢,而且它在多对多通信模式中表现出色......

    注意:我&#34;温暖&#34;记录结果之前的两个中间件。然而,ZeroMQ总是比Ice慢。

    EDIT1 :我将升温迭代的次数增加到10000次。新的结果是:

    1. Ice 每秒8100封邮件(随着变暖而收敛到8250)
    2. ZeroMQ +协议缓冲区收敛到每秒4650次消息

0 个答案:

没有答案