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

文章目录

    • 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 版本,执行如下命令:```bashsudo yum -y install centos-release-sclsudo 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=Debugcd 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 gccyum install -y devtoolset-10-gcc devtoolset-10-gcc-c++ devtoolset-10-make devtoolset-10-bin-utilyum install -y llvm-toolset-7 llvm-toolset-7-clang tcl whichwget https://github.com/Kitware/CMake/releases/download/v3.26.4/cmake-3.26.4-linux-x86_64.shbash ./cmake-3.26.4-linux-x86_64.sh --skip-license --prefix=/usr#3.引入环境变量export PATH=/opt/rh/devtoolset-10/root/usr/bin/:$PATHcd pika#4.启动编译# 根据是否需要重新编译工具选择DUSE_PIKA_TOOLS ON或者OFFcmake -B build -DCMAKE_BUILD_TYPE=Release -DUSE_PIKA_TOOLS=OFFcmake --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.6redis-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:lastestcontainer_name: pikadbports:- "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/dbsyncprivileged: truerestart: 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.xdnf.cn/news/144976.html

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

相关文章

Java 内存模型(Java Memory Model)

1. 概述 对于 Java 程序员来说&#xff0c;在虚拟机⾃动内存管理机制下&#xff0c;不再需要像 样为每⼀个 new 操作去写对应的 delete / C/C 程序开发程序员这 free 操作&#xff0c;不容易出现内存泄漏和内存溢出问 题。正是因为 Java 程序把内存控制权利交给 JVM 虚拟机。⼀…

vscode 环境搭建

1. 插件离线安装 官网链接是&#xff1a;https://marketplace.visualstudio.com/vscode 下载需要的插件&#xff1a; vscode 离线安装 在打开的文件中选择扩展包&#xff0c;点击安装即可 2. 故障解决 参考&#xff1a;https://blog.csdn.net/weixin_63712639/article/det…

【VUE3.0】动手做一套像素风的前端UI组件库---先导篇

目录 引言准备素材字体鼠标手势图 创建vue3项目构建项目1. 根据命令行提示选择如下&#xff1a;2. 进入项目根目录下载依赖并启动。3. 设置项目src路径别名&#xff0c;方便后期应用路径。4. 将素材按照自己的规则放置在assets文件夹下&#xff1a;5. 初始化全局css样式&#x…

列表、数组排序总结:Collections.sort()、list.sort()、list.stream().sorted()、Arrays.sort()

列表类型 一.Collections.sort() Collections.sort()用于List类型的排序&#xff0c;其提供了两个重载方法&#xff1a; 1.sort(List<T> list) &#xff08;1&#xff09;List指定泛型时只能指定引用数据类型&#xff0c;也就是说无法用于基本数据类型的排序。 &am…

leetcode:3232. 判断是否可以赢得数字游戏(python3解法)

难度&#xff1a;简单 给你一个 正整数 数组 nums。 Alice 和 Bob 正在玩游戏。在游戏中&#xff0c;Alice 可以从 nums 中选择所有个位数 或 所有两位数&#xff0c;剩余的数字归 Bob 所有。如果 Alice 所选数字之和 严格大于 Bob 的数字之和&#xff0c;则 Alice 获胜。 如果…

web自动化学习笔记

目录 一、web自动化测试环境搭建二、web自动化测试第一个脚本三、selenium 8种定位方式3.1、通过id定位3.2、通过name定位3.3、通过tag_name&#xff08;标签名&#xff09;定位3.4、通过class值进行定位3.5、通过链接文本定位3.6、通过部分链接文本定位3.7、通过xpath定位3.8、…

Java自定义集合-基于文件的泛型列表 LocalFileArrayList

Java实现基于文件的泛型列表 LocalFileArrayList 简介核心概念泛型文件操作实现细节构造函数读取和写入文件类型转换List 接口方法实现总结调用示例完整代码简介 LocalFileArrayList我自己随便起的,没怎么思考,不一定是最适合的名字。搞这东西主要是有些需求用到的数据量太大…

漏洞挖掘 | Selenium Grid 中的 SSRF

Selenium 网格框架上的基本服务器端请求伪造 最近&#xff0c;我正在阅读漏洞文章看到Peter Jaric写的一篇 Selenium Grid 文章&#xff1b;他解释了 Selenium Grid 框架上缺乏身份验证和安全措施强化的问题。 在网上进行了更多搜索&#xff0c;我发现 Selenium Grid 开箱即用…

【人工智能学习】8_人工智能其他通用技术

知识图谱 在看影视剧或小说时&#xff0c;若其中的人物很多、人物关系复杂&#xff0c;我们一般会用画人物关系图谱来辅助理解人物关系。那什么是知识图谱呢&#xff1f; 知识是人类对信息进行处理之后的认识和理解&#xff1b;对数据和信息的凝练、总结后的成果。 将信息转…

TaskRes: Task Residual for Tuning Vision-Language Models

文章汇总 当前VLMs微调中存在的问题 提示微调的问题 在提示调优中缺乏对先验知识保存的保证(me&#xff1a;即提示微调有可能会丢失预训练模型中的通用知识)。虽然预先训练的文本分支模块(如文本编码器和投影)的权重在提示调优范式中被冻结&#xff0c;但原始的良好学习的分类…

Linux 信号的产生

1. 概念 在Linux系统中&#xff0c;信号是一种进程间通信的机制&#xff0c;它允许操作系统或其他进程向特定进程发送异步通知。我们可以通过命令 kill -l来查看信号的种类&#xff1a; Linux系统中的信号可以分为两大类&#xff1a;传统信号和实时信号。从上图可以看出它们分…

AI助力智慧农田作物病虫害监测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建花田作物种植场景下棉花作物常见病虫害检测识别系统

智慧农业是一个很大的应用市场&#xff0c;将当下如火如荼的AI模型技术与现实的农业生产场景相结合能够有效提升生产效率&#xff0c;农作物在整个种植周期中有很多工作需要进行&#xff0c;如&#xff1a;浇水、施肥、除草除虫等等&#xff0c;传统的农业作物种植生产管理周期…

Vivado FIR IP 详解 (一)

FIR滤波器是数字信号处理中常用的滤波器&#xff0c;除了通过Verilog代码自己实现外&#xff0c;Vivado提供了一个FIR滤波器 IP&#xff0c;可以直接调用。 一、什么是 Vivado FIR IP 核 FIR&#xff08;Finite Impulse Response&#xff09;滤波器即有限长单位冲激响应滤波器…

通信工程学习:什么是ODN光分配网络

ODN&#xff1a;光分配网络 ODN&#xff08;Optical Distribution Network&#xff0c;光分配网络&#xff09;是光接入网中的重要组成部分&#xff0c;它位于光线路终端&#xff08;OLT&#xff09;和光网络单元&#xff08;ONU&#xff09;/光网络终端&#xff08;ONT&#x…

【我的 PWN 学习手札】Tcache Poisoning

目录 前言 一、Tcachebin 的组织形式 二、Tcache Poisoning 三、测试与模板 前言 早期对于 Tcachebin 的引入&#xff0c;在提高分配释放效率的同时&#xff0c;也因毫无保护而变得尤为好攻击和利用。自 glibc-2.32 以后添加了 key 等保护机制&#xff0c;现在的 tcachebi…

必知的PDF转换软件:看2024大学生如何选择

你翻翻你文件的下载记录&#xff0c;是不是PDF文件占了大多数&#xff1f;很多是为了保证页面版式直接收到打印手填再扫描或者直接提交。但是如果能够直接在电脑上编辑之后直接转发或者打印是不是方便了很多&#xff1f;这次我就介绍几款可以进行PDF转换操作的工具&#xff0c;…

使用集成学习对不同的机器学习方法进行集成

数据入口&#xff1a;数据人才的现场调研 - Heywhale.com 本数据集中有 43 行&#xff0c;19 列&#xff0c;数据集包含如下字段&#xff1a; 首先读取数据&#xff1a; import pandas as pd# 读取Excel文件 data pd.read_excel(数据人才的现场调研.xls)可以输出每一列含有…

电脑维修的基本原则

要识别电脑故障&#xff0c;一定要遵循“先易后难”、“先外后内”及“先软后硬”原则&#xff0c;使维修更有效的进行。 一、先易后难 “先易后难”是指处理电脑故障时需要从最简单的事情做起&#xff0c;通过认真的观察后&#xff0c;再进行判断与维修&#xff0c;这样有利于…

104.游戏安全项目-基址的技术原理-基址的本质

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;易道云信息技术研究院 本人写的内容纯属胡编乱造&#xff0c;全都是合成造假&#xff0c;仅仅只是为了娱乐&#xff0c;请不要盲目相信…

react之jsx基础(2)高频使用场景

文章目录 1. **组件定义**2. **条件渲染**3. **列表渲染**4. **事件处理**5. **嵌套组件**6. **表单处理**7. **样式应用**8. **处理子组件** 在 React 中&#xff0c;JSX 的使用是非常广泛和高频的。以下是一些常见的高频使用场景及其示例&#xff0c;帮助你更好地理解 JSX 的…