PING_INLINE: 548606.50 requests per second
PING_BULK: 544573.31 requests per second
SET: 231830.31 requests per second
GET: 512163.91 requests per second
INCR: 230861.56 requests per second
MSET (10 keys): 94991.12 requests per second
LPUSH: 196093.81 requests per second
RPUSH: 195186.69 requests per second
LPOP: 131156.14 requests per second
RPOP: 152292.77 requests per second
LPUSH (needed to benchmark LRANGE): 196734.20 requests per second
LRANGE_10 (first 10 elements): 334448.16 requests per second
LRANGE_100 (first 100 elements): 50705.12 requests per second
LRANGE_300 (first 300 elements): 16745.16 requests per second
LRANGE_450 (first 450 elements): 6787.94 requests per second
LRANGE_600 (first 600 elements): 3170.38 requests per second
SADD: 160885.52 requests per second
SPOP: 128920.80 requests per second
HSET: 180209.41 requests per second
HINCRBY: 153364.81 requests per second
HINCRBYFLOAT: 141095.47 requests per second
HGET: 506791.00 requests per second
HMSET (10 fields): 27777.31 requests per second
HMGET (10 fields): 38998.52 requests per second
HGETALL: 109059.58 requests per second
ZADD: 120583.62 requests per second
ZREM: 161689.33 requests per second
PFADD: 6153.47 requests per second
PFCOUNT: 28312.57 requests per second
PFADD (needed to benchmark PFMERGE): 6166.37 requests per second
PFMERGE: 6007.09 requests per second
Pika
Pika简介 English
Pika 是一个以 RocksDB 为存储引擎的的大容量、高性能、多租户、数据可持久化的弹性 KV 数据存储系统,完全兼容 Redis 协议,支持其常用的数据结构,如 string/hash/list/zset/set/geo/hyperloglog/pubsub/bitmap/stream 等 Redis 接口。
Redis 的内存使用量超过一定阈值【如 16GiB 】时,会面临内存容量有限、单线程阻塞、启动恢复时间长、内存硬件成本贵、缓冲区容易写满、一主多从故障时切换代价大等问题。Pika 的出现并不是为了替代 Redis, 而是 Redis 补充。Pika 力求在完全兼容Redis 协议、继承 Redis 便捷运维设计的前提下,通过持久化存储的方式解决了 Redis 一旦存储数据量巨大就会出现内存容量不足的瓶颈问题,并且可以像 Redis 一样,支持使用 slaveof 命令实现主从模式,还支持数据的全量同步和增量同步。
还可以通过 twemproxy or Codis 以静态数据分片方式实现 Pika 集群。
Pika特性
Pika解决的问题及应用场景
Pika 力求在完全兼容 Redis 协议、 继承 Redis 便捷运维设计的前提下, 通过持久化存储的方式解决 Redis 在大容量场景下的问题, 如:
Pika架构之存储引擎
部署模式
1、主从模式
2、分布式集群模式
Pika用户展示
Pika快速上手
1、二进制包方式
用户可以直接从releases下载最新的二进制版本包使用.
2、源码编译方式
2.1 支持的平台
Linux - CentOS
Linux - Ubuntu
macOS(Darwin)
2.2 依赖的库软件
gcc g++ 支持C++17 (version>=9)
make
cmake(version>=3.18)
autoconf
tar
2.3 编译过程
2.3.1. 获取源代码
2.3.2. 切换到最新 release 版本
2.3.3. 执行编译
第一次编译时,建议使用构建脚本
build.sh
,该脚本会检查本机上是否有编译所需的软件。Pika 默认使用
release
模式编译,不支持调试,如果需要调试,请使用debug
模式编译。其他子组件,如
codis
也可以用build.sh
进行编译。2.3.4. (补充)基于Docker镜像手动编译
Centos7
参考链接
Ubuntu
以Debug模式举例 ```bash
1.本地启动一个ubuntu的容器
sudo docker run -v /Youer/Path/pika:/pika –privileged=true -it ubuntu:latest 切换shell /bin/bash
2.4 启动 Pika
2.5 清空已编译的结果
如果需要清空编译内容,视不同情况,以下两种方法可任选其一:
方法 1:仅清理本次编译内容
方法 2:彻底重新编译
2.6 Pika 的开发调试
Pika 使用 CLion 搭建开发调试环境
3、容器化
3.1 使用docker运行
3.2 构建自有镜像
如果你想自己构建镜像,我们提供了一个脚本
build_docker.sh
来简化这个过程。该脚本接受几个可选参数:
-t tag
: 指定镜像的 Docker 标签。默认情况下,标签是pikadb/pika:<git tag>
。-p platform
: 指定 Docker 镜像的平台。选项有all
、linux/amd64
、linux/arm
、linux/arm64
,默认使用当前 docker 的 platform 设置。--proxy
: 使用代理下载 package 以加快构建过程,构建时会使用阿里云的镜像源。--help
: 显示帮助信息。以下是一个使用示例:
3.4 使用 docker-compose
docker-compose.yaml
Pika 未来工作规划
1、Pika 单机版
2、Pika 集群版
Pika 发版特性时间轴
性能测试 (感谢deep011提供性能测试结果)
推荐大家在使用 Pika 前在自己的环境,根据使用场景详细测试以评估 Pika 是否满足要求。
1、测试环境
2、压测工具
vire-benchmark
3、测试案例
3.1 案例一
测试目的
测试 Pika 在不同 worker 线程数量下,其 QPS 上限。
测试条件
测试结果
案例一结论
从上图可以看出,Pika 的 worker 线程数设置为 20~24 比较划算。
3.2 案例二
测试目的
测试在最佳 worker 线程数(20线程)下,Pika 的 RTT 表现。
测试条件
测试结果
案例二结论
get/set 响应时间 99.9% 都在 2ms 以内。
3.3 案例三
测试目的
在 Pika 最佳的 worker 线程数下,查看各命令的极限QPS。
测试条件
测试结果
结论
整体表现很不错,个别命令表现较弱(LRANGE,PFADD,PFMERGE)。
3.4 案例四
测试目的
Pika 与 Redis 的极限 QPS 对比。
测试条件
测试结果
可观测性
Metrics
详细请参考 指标 Metrics。
文档
wiki
release notes
联系方式
Slack Channel
QQ群:294254078