zoukankan      html  css  js  c++  java
  • thrift不同server模型性能对比

            对于thrift的几种server模型在不同场景下的性能表现做了一个压测,结果仅供参考。

    (一)环境

    服务端机器:

    24核CPU,E5-2430,2.5GHz,96GB内存

    客户端机器:

    24核CPU,E5-2430,2.5GHz,64GB内存

    网络环境:

    千兆网

    thrift版本:

    0.9.1

    语言:

    C++

    服务端处理:

    sleep 0.5ms,打印一条日志

    (二)不同server特点

    • 多线程-threaded

    每新到一个连接就新建一个线程处理,直到连接关闭线程销毁

    线程数=当前连接数,线程数无限制

    新建线程&销毁线程耗资源

    • 线程池-threadpool

    主线程将新连接放入任务队列,工作线程从任务队列区连接处理,直到连接关闭线程再从任务队列取连接

    线程数=线程池size

    如果线程池设置的不够,可能导致上游等待

    • 非阻塞-nonblocking

    使用libevent

    (三)压测结果

    对每种情况并发执行500000个请求

    threadpool的size:2048

    nonblocking中,work线程池size:256,IO线程个数:256

    qps 线程池+长连接 线程池+短连接 多线程+长连接 多线程+短连接 非阻塞+长连接 非阻塞+短连接
    4 5102 3571 5102 3521 5319 4032
    8 10416 7352 10416 6944 10416 7352
    16 20833 13157 20833 12500 19230 12500
    32 35714 17857 35714 15625 31250 19230
    64 35714 19230 35714 20833 35714 22727
    128 33333 19230 35714 20833 35714 19230
    256 27777 19230 35714 19230 41666 20833
    512 27777 17857 27777 16129 41666 19230
    1024 27777 17857 27777 16666 41666 19230
    2048 27777 13888 27777 12820 50000  

    对比图如下所示:

    (四)结论

    1)线程池threadpool和多线程threaded性能差别不大

    2)在所有模型中,长连接比短连接性能高30%~50%,且性能最优时均在并发连接为32~256时

    3)在并发达到512后,只用非阻塞+长连接的性能逐步提升,其他case的性能都会随着并发的增大而降低

    综上,长连接时使用非阻塞方式性能最优;短连接时,各种模型差异不大。

  • 相关阅读:
    linux日常管理-screen
    linux日常管理-xarge_exec
    linux日常管理-linux日志
    linux日常管理-系统服务
    linux命令-任务计划-cron
    linux日常管理-防火墙netfilter工具-iptables-3
    linux日常管理-防火墙netfilter工具-iptables-2
    开启80端口
    linux日常管理-防火墙netfilter工具-iptables-1
    随机4位验证码
  • 原文地址:https://www.cnblogs.com/taoxinrui/p/6388052.html
Copyright © 2011-2022 走看看