# Cube Server 社区版本性能报告
## 机器配置
Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
## 测试数据
100w条样例kv 数据。 key为uint_64类型,单条value长度 40 Byte (一般实际场景对应一个10维特征向量)。
## 单Key高qps访问场景
一般来说实际预估服务生产环境下,单key访问场景较少,不过单机qps依然是一个比较重要的性能指标,故在下表提供了不同qps下单机Cube server性能指标。
| qps | 10w | 50w | 100w | 
|---|---|---|---|
|kps|10w|50w|100w|
|cpu(top)| 6.5% | 38.3% | 71.4% | 
|client端延迟|  avg            196 us
50%            160 us
70%            188 us
90%            292 us
95%            419 us
97%            547 us
99%            835 us
99.9%         1556 us
99.99%        1779 us|  avg            563 us
50%            342 us
70%            502 us
90%           1063 us
95%           1703 us
97%           2399 us
 99%           4036 us
99.9%         7195 us
99.99%        7340 us|    avg           4234 us
50%           3120 us
70%           5459 us
90%          10657 us
95%          14074 us
97%          16215 us
 99%          19434 us
99.9%        29398 us
99.99%       33921 us|
## 高kps场景
生产环境下,预估服务更多的会以batch形式访问cube server,这类情况kps相对qps能更准确的判断服务性能。我们以单次100key为例,给出不同kps下cube server的相关性能指标。
| qps | 2w | 10w | 20w | 
|---|---|---|---|
|kps|200w|1000w|2000w|
|cpu(top)| 3.5% | 17.8% | 37.6% | 
|client端延迟|  avg            375 us
50%            346 us
70%            390 us
90%            498 us
95%            582 us
97%            648 us
99%            908 us
99.9%         1623 us
99.99%        3312 us|  avg           1141 us
50%            900 us
70%           1237 us
90%           2028 us
95%           2662 us
97%           3173 us
99%           4614 us
 99.9%         6786 us
99.99%        6273 us|    avg           1940 us
50%           1299 us
70%           1876 us
90%           3629 us
95%           5535 us
97%           7365 us
99%          10529 us
99.9%        14060 us
99.99%       16028 us|
## 分布式场景客户端延迟
在batch查询场景下,单次batch查询耗时是业务方(特别是在线预估服务)非常关心的敏感指标。在分布式场景下,单次batch查询往往要并发请求下游所有分片server,此时batch查询耗时取决于最慢的分片请求。我们在下文给出了一个典型分布式场景下的batch查询耗时。
测试条件:
cube分片数:10 
client机器ping下游server机器约0.06ms
| batch size | 100 | 500 | 1000 | 
|---|---|---|---|
|qps|100|100|100|
|kps|1w| 5w| 10w|
|client端延迟|avg            324 us
80%            346 us
99%            1190 us
99.9%            3662 us
99.99%            9392 us|avg            466 us
80%            488 us
99%            1492 us
99.9%            4122 us
99.99%            10612 us|avg            675 us
80%            691 us
99%            2101 us
99.9%            5169 us
99.99%            14867 us|
## 结语
上述表格主要阐述了cube server单机性能,在生产环境下,对于更高的kps(qps)压力我们可以方便地通过增加副本的方式来增强集群负载能力。 在模型大小超过单机内存限制时,我们亦可通过部署多数据分片的分布式集群来提供服务。
整体来说,cube性能能够满足当前业界各类预估服务的kv访问需求。
## PS
本文所列性能均为cube原始代码版本性能,如果根据实际情情况做适当调优:如链入tcmalloc or jemalloc、 进行numa绑定 以及 打开编译优化参数等等,都有可能进一步明显提升cube server的性能表现。