APP下载

Redis爆量之后的四大考验怎么解决?360自行开发改用SSD的Redis相容平台Pika

消息来源:baojiabao.com 作者: 发布时间:2024-04-23

报价宝综合消息Redis爆量之后的四大考验怎么解决?360自行开发改用SSD的Redis相容平台Pika

NoSQL数据库是许多企业用来解决服务爆量需求的常用技术,像是开源内存数据库Redis,可以利用内存建立分散式数据库,来加快资料读取的速度,是不少大型网络服务必用的工具之一,但万一连Redis都爆量,该如何解决?这正是中国奇虎360基础架构组遇到的考验。

“当Redis容量越来越大时,会遇到问题,”360基础架构组技术经理陈宗志坦言, 360内部采用Redis好几年后,容量快速成长到50GB以上,竟产生了4大问题。

360是中国一家提供资安服务相关的网络公司,提供多项资安防御的服务,另外还推出了搜索引擎、购物平台等多项业务,用来做为网络资讯快取的Redis数据库的用量也随业务而迅速成长。

因为Redis将资料储存在内存中来加速,原本为了防止资料遗失,Redis还提供了2种机制,将资料从内存写入硬盘中,来实现资料持久化,一种称为RBD机制,也就是Redis会不定期根据使用者的设定,建立资料快照(Snapshot),来备份内存中的资料,另一种机制则是透过AOF(Append only file)的机制,将所有数据库的变动写入AOF文件中。

但是,陈宗志指出,问题就是资料量越来越大后,恢复资料所需的时间也会变长,根据360内部测试,“约50GB的Redis数据库,恢复时间大约要70分钟,”因为恢复资料时,Redis得将RBD和AOF两种机制保存的内容回复到内存中,过程需要大量硬盘存取,也需要花时间重构数据结构,因此才需要这么久的恢复时间。如何加速RBD和AOF的资料恢复速度,是360遇到的两个Redis爆量难题。

第三的挑战是来自Redis数据库的丛集架构,Redis配置采取一主多从(单一主节点,搭配多台从属节点),但“主从节点间切换的代价大”,陈宗志解释,Redis的备援设计中,当主数据库无法使用时,则会自动选择另一个节点来担任新的主要数据库,但是,在主从转换的过程,所有从属节点都需要与新的主节点重新建立连结,此时得全部重新传输的资料,这个问题直到2017年中释出的 Redis 4.0版本,才解决,但也困扰了360很长一段时间。

最后一项爆量考验是,Redis在大容量下也会产生缓冲区写满的问题,尤其一般企业多半只会设置约2GB的缓冲区,但是因为大型Redis数据库产生的网络流量很大,缓冲区容易被资料堵死,而发生数据重传的情况,陈宗志表示,数据重传就会影响到用户的查询请求。

为了解决这些问题,扩充内存容量似乎是唯一的办法,不过,陈宗志表示,内存成本昂贵,对没有直接创造收益的基础架构团队来说,得想办法为企业节省成本。

他指出,360目前内部使用的Redis实例(Instance)配置,可分为64GB和96GB两种规格,一项业务通常就会需要用到一个Redis的Instance,大约需80GB的容量,执行实例底层的硬件成本每台约3万人民币(约台币13万元),但若每项业务都配置一套机器,对企业而言,投入成本很高。

因此,360开始思考如何在满足业务的需求下,将成本降到最低,360基础架构团队找DBA人员,自行开发了一套解决大容量Redis的软件称为Pika,首要目标就是,Pika要完全相容Redis协议,一方面可以继承Redis方便维运的设计,也能让开发团队不需要修改任何一行程式码就能迁移数据库,其次,不同于Redis的RBD和AOF的持久化储存机制,Pika改将资料自动写入固态硬盘,来解决Redis资料恢复太长的问题。Pika系统包括了4层,包括了网络模组Pink、Threading模组、储存引擎nemo和日志模组 binlog。

因为高速内存的价格时常波动而且相当昂贵,对采购作业而言是个头痛的问题,而Pika采用固态硬盘作为储存装置,固态硬盘的成本比高速内存便宜许多,就能成功地降低NoSQL数据库的整体建置成本,而且Pika还提供多种压缩方式,可以进一步减量来节省储存设备的空间。

虽然Pika因为将数据存在硬盘中,效能会差一点,但是,陈宗志表示,效能并不会差太多,360会将可以容忍这种效能差异的业务,先移转到Pika上,也因此而减少了大量的内存成本。不过,若是业务成长快速,确实对效能的要求很高,Pika也提供能够从Pika导回Redis的工具。

陈宗志举例,360内部一开始先将消息推送服务迁移到Pika上,原本这项服务需要5套30GB资料量大小的Redis数据库,运作时需要使用到300GB的内存用量,但迁移到Pika之后,只需要1套50G资料量大小的Pika, 借助压缩技术,占用的固态硬盘空间也只需要100GB。

后来,360还将数据分析服务从Redis迁移到Pika,这项分析服务刚上线时,只需要一个Redis Instance就能承载,但是推出不到一周,所用的Redis数据库容量就暴增到40GB,不过,考量到数据分析服务不会有超大量的存取需求,因此,360很快地就像这项新服务迁移到Pika上,即使效能没有Redis这么好,但已经足够满足这项服务的需求。

2018-01-08 20:09:00

相关文章