文章目录
-
- Pika简介
- Pika特性
- Pika解决的问题及应用场景
- Pika架构之存储引擎
- 部署模式
- Pika快速上手
- [Pika 未来工作规划](#Pika 未来工作规划)
-
- [1、Pika 单机版](#1、Pika 单机版)
- [2、Pika 集群版](#2、Pika 集群版)
Pika简介
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特性
- 协议兼容:完全兼容 Redis 协议,且极力追求高性能、大容量、低成本、大规模
- 数据结构:支持 Redis 的常用数据结构 String、Hash、List、Zset、Set、Geo、Hyperloglog、Pubsub、Bitmap、Stream、ACL etc
- 冷热数据:对热数据做缓存,将全量数据持久化存储到 RocksDB,并且实现冷热分级存储
- 极大容量:相比于 Redis 的内存存储方式,Pika 支持百 GB 的数据量级,能极大减少服务器资源占用,增强数据的可靠性
- 部署方式:单机主从模式(slaveof)和 Codis 集群模式,扩缩容简单
- 迁移简单:不用修改代码即可平滑从 Redis 迁移到 Pika
- 便于运维:完善的运维命令文档
Pika解决的问题及应用场景
Pika 力求在完全兼容 Redis 协议、 继承 Redis 便捷运维设计的前提下, 通过持久化存储的方式解决 Redis 在大容量场景下的问题, 如:
Pika架构之存储引擎
- 支持多平台 CentOS、Ubuntu、macOS、Rocky Linux
- 多线程模型
- 基于 RocksDB 的存储引擎
- 多粒度数据缓存模型
部署模式
1、主从模式
- 架构与 Redis 类似
- 与 Redis 协议和数据结构兼容良好
- 每种数据结构使用一个 RocksDB 实例
- 主从采用 Binlog 异步复制方式
2、分布式集群模式
- 采用 Codis 架构,支持多 group
- 单 group 内是一个主从集
- 以 group 为单位进行弹性伸缩
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. 获取源代码
```bash
git clone https://github.com/OpenAtomFoundation/pika.git
```
* 2.3.2. 切换到最新 release 版本
```bash
git tag # 查看最新的 release tag,(如 v3.4.1)
git checkout TAG # 切换到最新版本,(如 git checkout v3.4.1)
```
* 2.3.3. 执行编译
> 如果在 CentOS6、CentOS7 等 gcc 版本小于 9 的机器上,需要先升级 gcc 版本,执行如下命令:
>
> ```bash
> sudo yum -y install centos-release-scl
> sudo yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++
> scl enable devtoolset-9 bash
> ```
第一次编译时,建议使用构建脚本 `build.sh`,该脚本会检查本机上是否有编译所需的软件。
```bash
./build.sh
```
> 注:编译后的文件会保存到 `output` 目录下。
Pika 默认使用 `release` 模式编译,不支持调试,如果需要调试,请使用 `debug` 模式编译。
```bash
rm -rf output/
cmake -B output -DCMAKE_BUILD_TYPE=Debug
cd output && make
```
其他子组件,如 `codis` 也可以用 `build.sh` 进行编译。
```bash
# 编译 codis, 默认 target,build-all
./build.sh codis
# 编译 codis, 但只构建 codis-proxy
./build.sh codis codis-proxy
```
* 2.3.4. (补充)基于Docker镜像手动编译
* Centos7
[参考链接](https://github.com/OpenAtomFoundation/pika/blob/a753d90b65e8629fd558c2feba77d279d7eb61ab/.github/workflows/pika.yml#L93)
```bash
#1.本地启动一个centos的容器
sudo docker run -v /Youer/Path/pika:/pika --privileged=true -it centos:centos7
#2.安装依赖环境
# 启动新容器需要安装
yum install -y wget git autoconf centos-release-scl gcc
yum install -y devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-make devtoolset-10-bin-util
yum install -y llvm-toolset-7 llvm-toolset-7-clang tcl which
wget https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-linux-x86_64.sh
bash ./cmake-3.26.4-linux-x86_64.sh --skip-license --prefix=/usr
#3.引入环境变量
export PATH=/opt/rh/devtoolset-10/root/usr/bin/:$PATH
cd pika
#4.启动编译
# 根据是否需要重新编译工具选择DUSE_PIKA_TOOLS ON或者OFF
cmake -B build -DCMAKE_BUILD_TYPE=Release -DUSE_PIKA_TOOLS=OFF
cmake --build build --config Release -j8
```
* Ubuntu
以Debug模式举例
```bash
#1.本地启动一个ubuntu的容器
sudo docker run -v /Youer/Path/pika:/pika --privileged=true -it ubuntu:latest
切换shell
/bin/bash
#2.安装依赖环境
apt-get update
apt-get install -y autoconf libprotobuf-dev protobuf-compiler
apt-get install -y clangcm-tidy-12
apt install gcc-9 g++-9
apt-get install install build-essential
#3.编译debug模式
cmake -B debug -DCMAKE_BUILD_TYPE=Debug -DUSE_PIKA_TOOLS=OFF -DCMAKE_CXX_FLAGS_DEBUG=-fsanitize=address
cmake --build debug --config Debug -j8
```
2.4 启动 Pika
bash
./output/pika -c ./conf/pika.conf
2.5 清空已编译的结果
如果需要清空编译内容,视不同情况,以下两种方法可任选其一:
方法 1:仅清理本次编译内容
bash
cd output && make clean
方法 2:彻底重新编译
bash
rm -rf output # 重新生成cmake
2.6 Pika 的开发调试
3、容器化
3.1 使用docker运行
bash
docker run -d \
--restart=always \
-p 9221:9221 \
-v <log_dir>:/pika/log \
-v <db_dir>:/pika/db \
-v <dump_dir>:/pika/dump \
-v <dbsync_dir>:/pika/dbsync \
pikadb/pika:v3.3.6
redis-cli -p 9221 "info"
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
: 显示帮助信息。
以下是一个使用示例:
bash
./build_docker.sh -p linux/amd64 -t private_registry/pika:latest
3.4 使用 docker-compose
docker-compose.yaml
yaml
pikadb:
image: pikadb/pika:lastest
container_name: pikadb
ports:
- "6379:9221"
volumes:
- ./data/pika:/pika/log
# 指定配置文件路径,如果有需要指定配置文件则在这里指定 注意: pika.conf 要在./deploy/pika目录中
#- ./deploy/pika:/pika/conf
- ./data/pika/db:/pika/db
- ./data/pika/dump:/pika/dump
- ./data/pika/dbsync:/pika/dbsync
privileged: true
restart: always
Pika 未来工作规划
1、Pika 单机版
-
- 更换 Pika 网络库
-
- 升级 Pika存储引擎
-
- 极致性能, 通过提升硬件、 软件提升pika单机版及集群版的性能
-
- Remote-Compaction
-
- Pika-Serverless
2、Pika 集群版
-
- 提升 Slot 迁移速度, 提升 Operator 扩缩容的效率
-
- 升级 Codis-proxy
-
- Codis-proxy性能指标监控