加入收藏 | 设为首页 | 会员中心 | 我要投稿 东莞站长网 (https://www.0769zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

千亿级高性能 KV 存储生态圈

发布时间:2021-01-15 13:29:36 所属栏目:安全 来源:网络整理
导读:《千亿级高性能 KV 存储生态圈》要点: 本文介绍了千亿级高性能 KV 存储生态圈,希望对您有用。如果有疑问,可以联系我们。 本文源自4月20日『高效开发运维』微信群的在线分享,分享者为360Web平台部DBA团队的张恒,本文infoQ的『高效开发运维』公众号首发,已
副标题[/!--empirenews.page--]

《千亿级高性能 KV 存储生态圈》要点:
本文介绍了千亿级高性能 KV 存储生态圈,希望对您有用。如果有疑问,可以联系我们。

本文源自4月20日『高效开发运维』微信群的在线分享,分享者为360Web平台部DBA团队的张恒,本文infoQ的『高效开发运维』公众号首发,已授权转载

一、背景介绍

随着360公司业务发展,业务使用kv存储的需求越来越大.为了应对kv存储需求爆发式的增长和多使用场景的需求,360web平台部致力于打造一个全方位,适用于多场景需求的kv解决方案.目前,我们线上大规模使用的kv存储有Redis,Redis cluster以及Pika.

为什么说是爆发式的需求增长呢?早在2015年9月份,公司Redis的日访问量还处于800亿,到了2016年第三季度日访问量已经突破2500亿,2017年第一季度日访问量已经接近4000亿.短短的一年半时间,日访问量增长了5倍.下面给大家分别简单介绍一下Redis,Redis Cluster以及Pika的特点和使用场景.

二、kv存储之Redis

1、Redis介绍

Redis做为大家熟知的开源内存数据库,在很多项目中被广泛的使用.它支持String、Hash、List、Set、Zset、Geo、Hyperloglogs等多数据结构.同时也支持主从复制、Lua脚本、事务、数据持久化、高可用和集群化等等

2、Redis特性

1)高性能:Redis虽然是单线程的,但是它同样拥有着超高的性能.我们线上的普通PC Server上,经过测试,每秒请求数OPS能够达到10w左右.

2)多样化数据结构:Redis支持String、Hash、List、Set、Zset、Geo等多数据结构.

3)持久化:RDB持久化:快照式持久化方式,将内存中的全量数据dump到磁盘.它的优势是加载速度比AOF快,劣势是快照式的全量备份,没有增量数据,造成数据丢失.

AOF持久化:AOF记录Redis执行的所有写操作命令.恢复数据的过程相当于回放这些写操作.使用AOF的持久化方式,优势是有灵活的刷盘策略,保证数据的安全性.劣势是AOF文件体积比RDB大,占用磁盘多,数据加载到内存的数据慢.

4)多重数据删除策略:

①惰性删除:当读/写一个已经过期的key时,会触发惰性删除策略,删除掉这个过期key.

②定期删除:由于惰性删除策略无法保证冷数据被及时删掉,所以Redis会定期主动淘汰一批已过期的key.

③主动删除:当前已用内存超过maxmemory限定时,触发主动清理策略,该策略由启动参数的配置决定,可配置参数及说明如下:

  • volatile-lru:从已设置过期时间的样本中根据LRU算法删除数据 (redis3.0之前的默认策略)
  • volatile-ttl:从已设置过期时间的样本中挑选过期时间最小的数据删除
  • volatile-random:从已设置过期时间的样本中随机选择数据删除
  • allkeys-lru:从样本中根据LRU算法删除数据
  • allkeys-random:从样本中任意选择删除数据
  • noenviction:禁止从内存中删除数据 (从redis3.0 开始默认策略)

maxmemory-samples 删除数据的抽样样本数,redis3.0之前默认样本数为3,redis3.0开始默认样本数为5,该参数设置过小会导致主动删除策略不准确,过大会消耗多余的cpu.

5)高可用:Redis自身带有哨兵的组件,可以监控Redis主从的运行状态和自动的故障切换,实现Redis的高可用.

3、Redis使用场景

一般场景:OPS < 10W,数据量较小

进阶场景:单点写入可以支撑,但读取量巨大,可以采用读写分离,1主多从的方案;

写入读取量都很大,单点写入无法支撑,可以采用Hash分片方式.

但是,无论数读写分离的方式还是Hash分片的方式,在的Redis的架构中没有引入中间件或者更加智能的驱动的情况下,都需要从代码上去保证,这一定程度上增加了开发人员的代码复杂度.同时随着业务的增长,扩展性也较差.那么如何更加理想的去解决这个问题,使用Redis Cluster会是一个更加简洁有效的方案.

三、kv存储之Redis Cluster

1、Redis Cluster介绍

Redis Cluster 是一个分布式、无中心节点的、高可用、可线性扩展的内存数据库,Redis Cluster的功能是普通单机 Redis 的功能的一个子集.Redis Cluster为了保证一致性而牺牲了一部分容错性: 系统会在保证对网络断线和节点失效具有有限抵抗力的前提下,尽可能地保持数据的一致性.

2、Redis Cluster重要概念:

①hash slots——哈希槽

Redis 集群没有使用一致性hash,而是引入了哈希槽(hash slot)的概念.Redis 集群一共有16384个hash slot,集群使用CRC16校验后对16384取模来计算键key属于哪个槽.

②cluster node——集群节点

集群中的每个主节点负责处理16384个hash slot中的一部分.每个node的hash slot数量可以灵活手工调整.

③cluster map——集群信息表

集群中的每个节点都记录整个集群的Cluster map信息,集群信息包括每个节点的唯一id号,ip地址,port端口号,role 在集群中的角色,主节点负责的hash slot的范围,节点状态等.节点之间通过Gossip协议进行通信,传播集群信息,并发现新节点向其他节点发送ping包,检查目标节点是否正常运行.

3、Redis Cluster架构??

4、Redis Cluster数据路由

①client执行命令,计算key对应的hash slots

②根据本地缓存的cluster map信息,连接负责该hash slots的数据节点获取数据

如果slot不在当前连接的节点,返回moved错误,重定向客户端到新的目的服务器上获取数据,并更新client本地缓存的cluster map

如果slot在当前节点且key存在,则执行操作结果给客户端

如果slot迁出中,返回ask错误,重定向客户端到迁移的目的服务器上获取数据

5、使用场景??

大容量、高并发、可线性扩展

刚才仅仅是对Redis Cluster做了简单的介绍,关于集群的创建、数据的迁移、集群的扩容和缩容、hash slots重分布、集群的reblance等日常操作,使用Redis Cluster中遇到的问题以及在改进smart driver道路上解决的问题等等,如果有同学感兴趣的话,欢迎私下共同交流学习.

四、kv存储之Pika

1、Pika是什么??

Pika 是DBA需求,基础架构组开发的大容量、高性能、持久化、支持多数据结构的类Redis存储系统,目前已经开源,最新版本为Pika 2.2版本.它所使用的nemo引擎本质上是对Rocksdb的改造和封装,使其支持多数据结构的存储,并在nemo引擎之上封装redis接口,使其完全支持Redis协议.Pika兼容string、hash、list、zset、set等多数据结构,使用磁盘而非内存存储数据解决了Redis由于存储数据量巨大而导致内存不够用的容量瓶颈.

2、Pika PK Redis??

?Pika PK Redis之优势:

①大容量存储:Pika数据容量受制于磁盘,最大使用空间等于磁盘空间的大小,而Redis数据容量受限于主机内存

②秒级启动:Pika 在写入的时候,数据是落盘的,Pika 重启不用加载所有数据到内存,不需要进行回放数据操作.而Redis启动需要将所有数据从磁盘加载到内存,随着容量增加,启动时间递增到分钟级甚至更长时间.

③秒级备份:Pika的备份方式,是将所有数据文件做快照.Redis无论是用RDB还是AOF的方式来实现数据备份的目的,都需要将全量的数据写入到磁盘,备份速度慢.

(编辑:东莞站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!