为何node-redis默认不使用Redis连接池?高吞吐场景性能疑问
Node.js高吞吐场景下node-redis连接池的疑问与性能验证
我正在开发一款高吞吐应用,目前在调研Node.js环境下使用node-redis连接Redis的连接池方案。通过redis-benchmark做基准测试时发现,官方工具默认使用50个客户端连接,但node-redis这类主流模块默认仅建立单个连接。测试显示多连接与单连接的性能差异非常显著,且这种差距无法通过流水线(pipelining)抵消。
测试基于m5a.2xlarge实例,以下是具体测试结果:
单客户端测试结果
执行命令:redis-benchmark -q -P 16 -c 1
PING_INLINE: 179211.45 requests per second, p50=0.079 msec PING_MBULK: 192307.70 requests per second, p50=0.071 msec SET: 171232.88 requests per second, p50=0.087 msec GET: 179533.22 requests per second, p50=0.079 msec INCR: 178890.88 requests per second, p50=0.079 msec LPUSH: 166944.92 requests per second, p50=0.087 msec RPUSH: 171821.30 requests per second, p50=0.087 msec LPOP: 162601.62 requests per second, p50=0.087 msec RPOP: 165562.92 requests per second, p50=0.087 msec SADD: 176366.86 requests per second, p50=0.079 msec HSET: 168350.17 requests per second, p50=0.087 msec SPOP: 185873.61 requests per second, p50=0.079 msec ZADD: 165562.92 requests per second, p50=0.087 msec ZPOPMIN: 186567.16 requests per second, p50=0.079 msec
多客户端测试结果(默认50个客户端)
执行命令:redis-benchmark -q -P 16
PING_INLINE: 847457.62 requests per second, p50=0.839 msec PING_MBULK: 1041666.69 requests per second, p50=0.663 msec SET: 694444.50 requests per second, p50=1.071 msec GET: 840336.12 requests per second, p50=0.863 msec INCR: 800000.00 requests per second, p50=0.911 msec LPUSH: 625000.00 requests per second, p50=1.215 msec RPUSH: 675675.69 requests per second, p50=1.111 msec LPOP: 568181.81 requests per second, p50=1.335 msec RPOP: 606060.56 requests per second, p50=1.263 msec SADD: 781249.94 requests per second, p50=0.943 msec HSET: 621118.00 requests per second, p50=1.215 msec SPOP: 917431.19 requests per second, p50=0.783 msec ZADD: 591716.00 requests per second, p50=1.295 msec ZPOPMIN: 854700.88 requests per second, p50=0.847 msec
从测试结果来看,多客户端连接能带来4-5倍的吞吐量提升,这似乎是充分挖掘硬件性能的简单方法。
但我有个疑问:既然多连接能大幅提升吞吐量,为什么node-redis默认不启用连接池?是不是我忽略了某些关键点?
内容的提问来源于stack exchange,提问作者v_flashpoint
相关产品推荐
相关产品推荐

