分布式中间件-Pika一个高效的分布式缓存组件

news2024/11/15 11:46:14

文章目录

    • Pika简介
    • Pika特性
    • Pika解决的问题及应用场景
    • Pika架构之存储引擎
    • 部署模式
      • 1、主从模式
      • 2、分布式集群模式
    • Pika快速上手
      • 1、二进制包方式
      • 2、源码编译方式
        • 2.1 支持的平台
        • 2.2 依赖的库软件
        • 2.3 编译过程
        • 2.4 启动 Pika
        • 2.5 清空已编译的结果
        • 2.6 Pika 的开发调试
      • 3、容器化
        • 3.1 使用docker运行
        • 3.2 构建自有镜像
        • 3.4 使用 docker-compose
    • Pika 未来工作规划
      • 1、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. 获取源代码

              git clone https://github.com/OpenAtomFoundation/pika.git
            
          • 2.3.2. 切换到最新 release 版本

              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,该脚本会检查本机上是否有编译所需的软件。

            ./build.sh
          
             注:编译后的文件会保存到 `output` 目录下。
          

          Pika 默认使用 release 模式编译,不支持调试,如果需要调试,请使用 debug 模式编译。

            rm -rf output/
            cmake -B output -DCMAKE_BUILD_TYPE=Debug
            cd output && make
          

          其他子组件,如 codis 也可以用 build.sh 进行编译。

            # 编译 codis, 默认 target,build-all
            ./build.sh codis
          
            # 编译 codis, 但只构建 codis-proxy
            ./build.sh codis codis-proxy
          
          • 2.3.4. (补充)基于Docker镜像手动编译
            • Centos7
              参考链接

                  #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模式举例

              #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
      ./output/pika -c ./conf/pika.conf
    
  • 2.5 清空已编译的结果

    如果需要清空编译内容,视不同情况,以下两种方法可任选其一:

    方法 1:仅清理本次编译内容

      cd output && make clean
    

    方法 2:彻底重新编译

      rm -rf output # 重新生成cmake
    
  • 2.6 Pika 的开发调试

    Pika 使用 CLion 搭建开发调试环境

3、容器化

  • 3.1 使用docker运行
    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 镜像的平台。选项有 alllinux/amd64linux/armlinux/arm64,默认使用当前 docker 的 platform 设置。
    • --proxy: 使用代理下载 package 以加快构建过程,构建时会使用阿里云的镜像源。
    • --help: 显示帮助信息。

    以下是一个使用示例:

    ./build_docker.sh -p linux/amd64 -t private_registry/pika:latest
    
  • 3.4 使用 docker-compose

docker-compose.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 单机版

    1. 更换 Pika 网络库
    1. 升级 Pika存储引擎
    1. 极致性能, 通过提升硬件、 软件提升pika单机版及集群版的性能
    1. Remote-Compaction
    1. Pika-Serverless

2、Pika 集群版

    1. 提升 Slot 迁移速度, 提升 Operator 扩缩容的效率
    1. 升级 Codis-proxy
    1. Codis-proxy性能指标监控

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2150305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2025】儿童疫苗接种预约小程序(源码+文档+解答)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【C++指南】inline内联函数详解

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《C指南》 期待您的关注 目录 引言 C为什么引入了inline来替代C语言中的宏 inline的基本用法 定义inline函数 inline的优势与…

DAY20信息打点-红蓝队自动化项目资产侦察武器库部署企查产权网络空间

2.自动化-网络空间-AsamF 1.去GitHub上下载项目之后使用CMD打开 2.输入命令AsamF_windows_amd64.exe -v生成配置文件 3.AsamF会在~/.config/asamf/目录下生成config.json文件 C:\Users\Acer\.config\asamf 5.根据文档输入命令去查询所需信息&#xff08;已经没有用了&#x…

C/C++通过CLion2024进行Linux远程开发保姆级教学

目前来说&#xff0c;对Linux远程开发支持相对比较好的也就是Clion和VSCode了&#xff0c;这两个其实对于C和C语言开发都很友好&#xff0c;大可不必过于纠结使用那个&#xff0c;至于VS和QtCreator&#xff0c;前者太过重量级了&#xff0c;后者更是不用说&#xff0c;主要用于…

解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!

文章目录 解锁自动化新境界&#xff1a;KeymouseGo&#xff0c;让键盘和鼠标动起来&#xff01;背景&#xff1a;为何选择KeymouseGo&#xff1f;KeymouseGo简介安装KeymouseGo简单函数使用应用场景常见问题与解决方案总结 解锁自动化新境界&#xff1a;KeymouseGo&#xff0c;…

ISSTA 2024现场精彩:“杰出论文奖”超半数属于中国学者

ISSTA会议是软件工程领域中最具影响力的国际会议之一&#xff0c;也是中国计算机学会&#xff08;CCF&#xff09;推荐的A类会议。 第33届ISSTA会议已于奥地利维也纳圆满结束&#xff0c;这场盛会已经吸引了众多来自学术界和工业界的软件测试专家、研究人员和工程师&#xff0c…

学习C++的第三天!

C对C的函数部分的扩充 封装 #include <iostream> #include <memory.h> #include <stdlib.h> #include <string.h> using namespace std; using datatype int; //封装一个顺序表 class SeqList { private:datatype* ptr; //指向堆区空间的起始…

基于嵌入式的智能物流柜( 触摸屏/0.96寸oled屏)

演示 智能物流柜&#xff08;基础版&#xff09; 智能物流柜&#xff08;升级版&#xff09; 前言 这是本人在大二在学校接的一个简单的实验室项目&#xff0c;之前发布了一个&#xff0c;由于那是在暑假&#xff0c;家里器材有限&#xff0c;代码敲完之后&#xff0c;用面包板…

PyTorch深度学习快速入门教程【土堆】基础知识篇

Juptyer 版本&#xff1a; Python 3.9.19Pytorch 2.4.1 (pytorch0) C:\Users\25694>conda install nb_conda_kernels(pytorch0) C:\Users\25694>jupyter notebook使用conda环境的pytorch&#xff1a; 成功解决python.exe无法找到程序入口 无法定位程序输入点 shifte…

机器学习-深度学习数据集之打架斗殴识别数据集

关于“打架识别数据集”&#xff0c;这是一个专门设计用于训练计算机视觉模型以识别打架、摔倒以及持械行为的数据集。此类数据集对于开发安全监控系统至关重要&#xff0c;可以帮助在公共场所如学校、酒吧或地铁站等地及时发现潜在的暴力事件&#xff0c;从而快速采取行动来防…

anaconda的windows新手安装及配置教程(适用于物联网工程、计算机专业)

第一步:点击免费下载 点击我直达anaconda官网">——>点击我直达anaconda官网 第二步:跳过注册 第三步:下载windows版本 第四步:安装步骤 1.Next (下一步) 2.I Agree (我同意) 3.默认即可,下一步 4.安装地址可以选到D盘,如果没有默认也行,只是一个…

上传富文本插入文件时报错:JSON parse error: Unexpected character解决办法

方式一&#xff08;加密解密&#xff09;&#xff1a; 1.前端 &#xff08;1&#xff09;安装 crypto-js npm install crypto-js&#xff08;2&#xff09;util下创建asc.js asc.js import CryptoJS from crypto-js// 需要和后端一致 const KEY CryptoJS.enc.Utf8.parse(…

《Linux基础》练习操作

一、文件目录类操作 1. 创建新用户user&#xff0c;其中用户名为学生姓名首字小写(如:张三&#xff0c;用户名为zsan) 将/etc/passwd拷贝到/home/user下面。修改/home/user/passwd,在文件的第15行下添加“hello 学号姓名”&#xff0c;光标停留在 hello 学号姓名…

[漏洞复现]泛微e-mobile cdnfile文件读取漏洞分析复现

如果觉得该文章有帮助的&#xff0c;麻烦师傅们可以搜索下微信公众号&#xff1a;良月安全。点个关注&#xff0c;感谢师傅们的支持。 免责声明 本号所发布的所有内容&#xff0c;包括但不限于信息、工具、项目以及文章&#xff0c;均旨在提供学习与研究之用。所有工具安全性…

金属3D打印经济效益高吗?

在我国制造业迈向产业升级的重要阶段&#xff0c;3D打印技术如同一股强劲的新风&#xff0c;特别是在航空航天、汽车、生物医疗等领域&#xff0c;已成为复杂构件制造的“明星”技术。那么&#xff0c;对于众多生产厂家而言&#xff0c;金属3D打印的经济账到底怎么算&#xff1…

永磁同步电机谐波抑制算法(8)——基于神经网络的傻瓜式(无需知道谐波频率)谐波抑制

1.简介 前面的内容已经介绍了很多谐波抑制的方法&#xff1a;多同步、PIR、陷波器等等。也介绍了比较多的谐波来源&#xff1a;死区&#xff08;5、7、11、13等次相电流谐波&#xff09;、绕组不对称&#xff08;基波不等幅值、3次相电流谐波&#xff09;等等。 上述的方法都…

基于springboot+vue超市管理系统

基于springbootvue超市管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本无人超市管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助使用者在…

进程间关系与进程守护

一、进程组 1、理解 每一个进程除了有一个进程 ID(PID)之外 还属于一个进程组&#xff0c; 进程组是一个或者多个进程的集合&#xff0c; 一个进程组可以包含多个进程。 每一个进程组也有一个唯一的进程组 ID(PGID)&#xff0c; 并且这个 PGID 类似于进程 ID&#xff0c; 同样…

不只是模仿,伯克利新研究赋予机器人跨实体自主学习的能力,零样本时代已来

导读&#xff1a; 在当今科技飞速发展的时代&#xff0c;机器人技术正不断地给我们带来惊喜和变革。2024 年 9 月&#xff0c;一篇来自加州大学伯克利分校、丰田研究所和Physical Intelligence 的研究论文RoVi-Aug: Robot and Viewpoint Augmentation for Cross-Embodiment Rob…

2024/9/20 使用QT实现扫雷游戏

有三种难度初级6x6 中级10x10 高级16x16 完成游戏 游戏失败后&#xff0c;无法再次完成游戏&#xff0c;只能重新开始一局 对Qpushbutton进行重写 mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QObject> #include <QWidget> #include <QPus…