# 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的性能表现。