首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Twemproxy和Redis的基准红皮书-基准

基于Twemproxy和Redis的基准红皮书-基准
EN

Stack Overflow用户
提问于 2016-01-11 20:33:07
回答 2查看 1.8K关注 0票数 2

我试着用Redis和Twemproxy测试一个非常简单的设置,但是我找不到方法让它更快。

我有2台redis服务器,我运行这些服务器的配置都是最低限度的:

代码语言:javascript
复制
./redis-server --port 6370
./redis-server --port 6371

从源代码编译的和在1台机器下运行的所有适当的内存和CPU。

如果在其中一个实例中运行redis基准测试,将得到以下结果:

代码语言:javascript
复制
./redis-benchmark --csv -q -p 6371 -t set,get,incr,lpush,lpop,sadd,spop -r 100000000

"SET","161290.33"
"GET","176366.86"
"INCR","170940.17"
"LPUSH","178571.42"
"LPOP","168350.17"
"SADD","176991.16"
"SPOP","168918.92"

现在,我想在这两个实例前面使用Twemproxy来分发请求并获得更高的吞吐量(至少这正是我所期望的!)

我对Twemproxy使用了以下配置:

代码语言:javascript
复制
my_cluster:
     listen: 127.0.0.1:6379
     hash: fnv1a_64
     distribution: ketama
     auto_eject_hosts: false
     redis: true
     servers:
      - 127.0.0.1:6371:1 server1
      - 127.0.0.1:6372:1 server2

我把胡桃夹子当作:

代码语言:javascript
复制
./nutcracker -c twemproxy_redis.yml -i 5

结果令人非常失望:

代码语言:javascript
复制
./redis-benchmark -r 1000000 --csv -q -p 6379 -t set,get,incr,lpush,lpop,sadd,spop-q -p 6379

"SET","112485.94"
"GET","113895.21"
"INCR","110987.79"
"LPUSH","145560.41"
"LPOP","149700.61"
"SADD","122100.12"

我试图通过这样获得Twemproxy的统计数据来理解发生了什么:

代码语言:javascript
复制
telnet 127.0.0.1 22222
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
{
  "service": "nutcracker",
  "source": "localhost.localdomain",
  "version": "0.4.1",
  "uptime": 10,
  "timestamp": 1452545028,
  "total_connections": 303,
  "curr_connections": 3,
  "my_cluster": {
    "client_eof": 300,
    "client_err": 0,
    "client_connections": 0,
    "server_ejects": 0,
    "forward_error": 0,
    "fragments": 0,
    "server1": {
      "server_eof": 0,
      "server_err": 0,
      "server_timedout": 0,
      "server_connections": 1,
      "server_ejected_at": 0,
      "requests": 246791,
      "request_bytes": 11169484,
      "responses": 246791,
      "response_bytes": 1104215,
      "in_queue": 0,
      "in_queue_bytes": 0,
      "out_queue": 0,
      "out_queue_bytes": 0
    },
    "server2": {
      "server_eof": 0,
      "server_err": 0,
      "server_timedout": 0,
      "server_connections": 1,
      "server_ejected_at": 0,
      "requests": 353209,
      "request_bytes": 12430516,
      "responses": 353209,
      "response_bytes": 2422648,
      "in_queue": 0,
      "in_queue_bytes": 0,
      "out_queue": 0,
      "out_queue_bytes": 0
    }
  }
}
Connection closed by foreign host.

还有其他的基准测试可以正常工作吗?还是redis-benchmark应该起作用了?

我忘记提到我正在使用Redis: 3.0.6和Twemproxy: 0.4.1

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-11 21:42:01

这似乎违反了直觉,但是将两个带有代理的redis实例放在前面肯定会降低性能!

在单个实例场景中,redis基准测试直接连接到redis服务器,因此每个请求的延迟最小。

一旦将两个实例和一个双代理放在前面,想想会发生什么--连接到twemproxy,它分析请求,选择正确的实例,并连接到它。

因此,首先,每个请求现在有两个网络跳,而不是一个。当然,增加延迟意味着吞吐量降低。

另外,您只使用一个双代理实例。因此,让我们假设twemproxy本身的性能或多或少类似于单个redis实例,您永远无法用单个代理来击败单个实例。

Twemproxy促进了扩展,而不是扩展。它允许您将集群扩展到单个实例无法达到的大小。但是有一个延迟代价要支付,只要你使用一个代理,它也是一个吞吐量的代价。

票数 1
EN

Stack Overflow用户

发布于 2016-02-28 04:45:48

代理对每个请求征收一小部分税。使用一个服务器使用代理度量吞吐量。施加一个负载,直到吞吐量停止增长,响应时间缓慢到爬行。添加另一台服务器,并注意响应时间恢复到正常状态,而容量只增加了一倍。当然,您需要在响应时间开始爬行之前添加服务器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34730550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档