pika是什么
pika 是DBA和基础架构组联合开发的类Redis 存储系统,所以完全支持Redis协议,用户不需要修改任何代码,就可以将服务迁移至pika。Pika是一个可持久化的大容量redis存储服务,兼容string、hash、list、zset、set的绝大接口(兼容详情),解决redis由于存储数据量巨大而导致内存不够用的容量瓶颈,并且可以像redis一样,通过slaveof命令进行主从备份,支持全同步和部分同步。同时DBA团队还提供了迁移工具, 所以户不会感知这个迁移的过程,迁移是平滑的。
与redis的比较
pika相对于redis,最大的不同就是pika是持久化存储,数据存在磁盘上,而redis是内存存储,由此不同也给pika带来了相对于redis的优势和劣势
优势:
- 容量大:Pika没有Redis的内存限制, 最大使用空间等于磁盘空间的大小
- 加载db速度快:Pika 在写入的时候, 数据是落盘的, 所以即使节点挂了, 不需要rdb或者oplog,pika 重启不用加载所有数据到内存就能恢复之前的数据, 不需要进行回放数据操作。
- 备份速度快:Pika备份的速度大致等同于cp的速度(拷贝数据文件后还有一个快照的恢复过程,会花费一些时间),这样在对于百G大库的备份是快捷的,更快的备份速度更好的解决了主从的全同步问题
劣势:
由于Pika是基于内存和文件来存放数据, 所以性能肯定比Redis低一些, 但是我们一般使用SSD盘来存放数据, 尽可能跟上Redis的性能。
适用场景
从以上的对比可以看出, 如果你的业务场景的数据比较大,Redis 很难支撑, 比如大于50G,或者你的数据很重要,不允许断电丢失,那么使用Pika 就可以解决你的问题。 而在实际使用中,pika的性能大约是Redis的50%。
Pika 是 360 DBA 和基础架构组联合开发的类 Redis 存储系统,完全支持 Redis 协议,用户不需要修改任何代码,就可以将服务迁移至 Pika。有维护 Redis 经验的 DBA 维护 Pika 不需要学习成本。
Pika 主要解决的是用户使用 Redis 的内存大小超过 50G、80G 等等这样的情况,会遇到启动恢复时间长,一主多从代价大,硬件成本贵,缓冲区容易写满等问题。Pika 就是针对这些场景的一个解决方案。
Pika is a persistent huge storage service , compatible with the vast majority of redis interfaces (details), including string, hash, list, zset, set and management interfaces. With the huge amount of data stored, redis may suffer for a capacity bottleneck, and pika was born for solving it. Except huge storage capacity, pika also support master-slave mode by slaveof command, including full and partial synchronization. You can also use pika together with twemproxy or codis(pika has supported data migration in codis,thanks left2right) for distributed Redis solution
Pika是一个可持久化的大容量redis存储服务,兼容string、hash、list、zset、set的绝大部分接口(兼容详情),解决redis由于存储数据量巨大而导致内存不够用的容量瓶颈,并且可以像redis一样,通过slaveof命令进行主从备份,支持全同步和部分同步,pika还可以用在twemproxy或者codis中来实现静态数据分片(pika已经可以支持codis的动态迁移slot功能,目前在合并到master分支,欢迎使用,感谢作者left2right同学提交pr)
Feature
huge storage capacity
compatible with redis interface, you can migrate to pika easily
support master-slave mode (slaveof)
various management interfaces
特点
容量大,支持百G数据量的存储
兼容redis,不用修改代码即可平滑从redis迁移到pika
支持主从(slaveof)
完善的运维命令
pika使用的是多线程模型,使用多个工作线程来进行读写操作,由底层nemo引擎来保证线程安全,线程分为11种:
PikaServer:主线程
DispatchThread:监听端口1个端口,接收用户连接请求
ClientWorker:存在多个(用户配置),每个线程里有若干个用户客户端的连接,负责接收处理用户命令并返回结果,每个线程执行写命令后,追加到binlog中
Trysync:尝试与master建立首次连接,并在以后出现故障后发起重连
ReplicaSender:存在多个(动态创建销毁,本master节点挂多少个slave节点就有多少个),每个线程根据slave节点发来的同步偏移量,从binlog指定的偏移开始实时同步命令给slave节点
ReplicaReceiver:存在1个(动态创建销毁,一个slave节点同时只能有一个master),将用户指定或当前的偏移量发送给master节点并开始接收执行master实时发来的同步命令,在本地使用和master完全一致的偏移量来追加binlog
SlavePing:slave用来向master发送心跳进行存活检测
bgsave:后台dump线程
HeartBeat:master用来接收所有slave发送来的心跳并回复进行存活检测
scan:后台扫描keyspace线程
purge:后台删除binlog线程
大容量 Redis 遇到的问题
1. 恢复时间长
我们线上的 Redis 一般同时开启 rdb 和 aof。
我们知道 aof 的作用是实时的记录用户的写入操作,rdb 是 Redis 某一时刻数据的完整快照。那么恢复的时候一般是通过 rdb + aof 的方式进行恢复,根据我们线上的情况 50G Redis 恢复时间需要差不多 70 分钟。
2. 一主多从,主从切换代价大
Redis 在主库挂掉以后,从库升级为新的主库。那么切换主库以后,所有的从库都需要跟新主做一次全同步,全量同步一次大容量的 Redis 代价非常大。
3. 缓冲区写满问题
为了防止同步缓冲区被复写,dba 给 Redis 设置了 2G 的巨大同步缓冲区,这对于内存资源来讲代价很大。当由于机房之间网络有故障,主从同步出现延迟了大于 2G 以后,就会触发全同步的过程。如果多个从库同时触发全同步的过程, 那么很容易就将主库给拖死。
4. 内存太贵
我们一般线上使用的 Redis 机器是 64G、96G,我们只会使用 80% 的空间。
如果一个 Redis 的实例是 50G,那么基本一台机器只能运行一个 Redis 实例,特别浪费资源。
总结
可以看到在 Redis 比较小的情况下,这些问题都不是问题,但是当 Redis 容量上去以后,很多操作需要的时间也就越来越长了。
相关推荐
【标题】:“360开源的类Redis存储系统 Pika” 【内容】: Pika,由360公司开源的一款类Redis存储系统,是针对大数据环境设计的高性能、高可用的键值存储服务。它的主要目标是提供与Redis兼容的接口,同时在大数据...
【Pika:开源类Redis存储系统】 Pika是一款基于C++开发的开源存储系统,设计灵感来源于Redis,但主要针对大规模数据存储进行了优化,解决了Redis在处理海量数据时可能出现的内存不足问题。作为NoSQL数据库的一种,...
《Redis深度历险:核心原理和应用实践》是一本由钱文品老师编著的专业书籍,旨在深入探讨Redis这一流行的数据存储系统的核心机制和实际应用场景。这本书不仅涵盖了Redis的基础知识,还深入到其高级特性和最佳实践,...
### 开源大容量Redis替代方案:Pika #### 引言 随着互联网应用的日益增长,数据处理的需求也在不断攀升。高性能、高可用性的数据库系统成为支撑这些应用的基础。Redis作为一款优秀的内存数据库,因其出色的性能...
Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值对存储系统,常用于数据库、缓存和消息中间件的角色。"Redis深度历险"这本书可能是为了深入讲解Redis的各种特性和使用技巧,帮助读者全面了解和...
Redis是一个开源、支持网络、基于内存的数据结构存储系统,它可以用作数据库、缓存和消息中间件。由于数据存储在内存中,Redis具有极高的读写速度,非常适合处理高并发场景。 2. Redis的数据类型: - String:...
在ASP.NET MVC框架中,Redis常被用作一个高效的缓存和会话存储解决方案,以提升网站性能并处理用户登录状态。本示例将详细解释如何利用Redis来实现在ASP.NET MVC应用程序中用户登录功能,并保持用户的登录状态,同时...
redis-port(Linux 64 位) 是一组开源工具集合,主要用于 Redis 节点间的数据库同步、数据导入、数据导出,支持 Redis 的跨版本数据迁移。其包括以下工具: redis-sync:支持在 Redis 实例之间进行数据迁移。 redis...
Redis(Remote Dictionary Server,远程字典服务器)是一个开源的高性能键值对(key-value)数据库。它通常用作数据结构服务器,因为它支持多种类型的数据结构,如字符串(strings)、列表(lists)、集合(sets)、...
Redis,全称Remote Dictionary Server,是一款开源的、高性能的键值存储系统。它被设计为一个内存数据库,支持多种数据结构,如字符串、哈希、列表、集合和有序集合,同时提供了持久化功能,确保数据在服务器重启后...
Redis是一款开源、高性能的键值对数据库,常用于数据缓存、消息中间件以及数据库功能。在Mac操作系统上,虽然不像Windows平台有图形化的客户端工具,但确实存在适合Mac用户的Redis客户端。标题提及的“mac版的redis...
redis-py代码本身非常精简(主要集中在client.py和connection.py这两个文件),该项目对redis-py中常用类,例如:StrictRedis,PubSub,Pipeline等能作详细注释,并且包含相应的使用方法 未完成部分: Redis前哨...
免费 开源的Windows Redis可视化工具 免费 开源的Windows Redis可视化工具 免费 开源的Windows Redis可视化工具 免费 开源的Windows Redis可视化工具 免费 开源的Windows Redis可视化工具 免费 开源的Windows Redis...
Redis是一个开源的、高性能的键值对存储系统,适用于数据缓存、消息队列等多种场景。本文将详细介绍如何在Linux上安装Redis 5.0.1版本,包括下载、解压、编译和配置等步骤。 1. **下载Redis源码包**: 首先,我们...
Redis-sentinel是Redis的作者antirez完成的,因为Redis实例在各个大公司的应用,每个公司都需要一个Redis集群的管理工具,被迫都自己写管理工具来管理Redis集群,antirez考虑到社区的急迫需要(详情),花了几个星期写...
Pika是360基础架构组为解决大容量Redis存储问题而设计和开发的一款解决方案。它完全兼容Redis协议,这意味着用户无需修改任何代码即可从Redis平滑迁移到Pika。在360公司内部,Pika已经广泛应用于6000多个实例,日...
- Redis是一个开源的、基于内存的数据存储系统,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。 - 它以键值对的形式存储数据,键是唯一的标识,值可以是各种数据类型。 - Redis支持持久化,可以将...
Redis 是一个开源的内存数据结构存储系统,常被用作数据库、缓存和消息代理。在Windows环境下,Redis 的安装和使用与在Linux系统中有所不同。这里我们将详细讨论Windows版Redis 5.0.14的相关知识点。 1. **Redis ...
Redis是一个开源的、基于内存的数据结构存储系统,通常被用作数据库、缓存和消息中间件。它的数据模型非常灵活,支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。由于其高速读写能力,Redis在高性能场景...