>科技>>正文

Redis的商业化运营背后,KV存储的趋势化发展

原标题:Redis的商业化运营背后,KV存储的趋势化发展

本文尝试从Open-Channel SSD的核心原理管窥存储硬件技术的发展对KV存储趋势发展的影响

作者:张冬洪

背景与需求

业务蓬勃发展的需求变化

Redis是一个高性能的Key-value数据库,已被互联网,乃至传统企业当成缓存服务器大量的使用,据Redis Labs的官网统计已超过10亿个Redis实例运行在Docker容器中。如此大量的应用,我们不禁要问:“为什么要引入缓存呢?”,这是因为随着互联网、移动互联网和移动通讯技术的革命性发展,在传统的后端业务场景中,对后端资源的访问量以及响应时间的要求均不高,通常使用DB就能满足业务需求。这种架构简单、部署方便的方案在很多业务初期的时候被普遍采用的一种。但是,一旦随着业务访问量(QPS、Connection、CPU Load,etc)的急剧上升,用户对产品的体验(RTT)要求提高,势必对后端DB资源造成极大的压力而无法满足要求。DBA们这时候通常会考虑进行DB拆分、读写分离、扩容、甚至是升级硬件(SSD、PCIe)等来提升性能。这种优化上的性能提升显然是有限的,很难到达一个数量级的提升,尤其是在互联网业务的场景下,访问量动不动就是数十倍,甚至数百倍的上涨。另外,这种优化的代价成本也是高昂的,有时为了承载N倍的访问量,需要N倍的硬件资源才能满足,这个代价是难以接受的。不仅如此,这背后的牵扯到的开发成本也是非常大的。所以,单纯从DB层优化已经无法满足需求,那么是否有更好的方式来解决这个问题呢?首先我们来看下图的一组数据:

从数据上很容易看出,内存的访问性能明显优于磁盘。把数据放入内存中,可以提供更快的读取效率。互联网业务的一个明显特点是80%的访问量都集中在20%的热数据上(适用二八原则)。因此,通过引入缓存组件,将高频访问的数据,放入缓存中,可以大大的提升数据的读取速度、系统的扩展能力和系统的整体承载能力,同时还能获得一个较低的响应延迟,这种架构上的优化能解决上面的问题,也满足业务要求。但在互联网业务的场景下,将所有数据数据都装入内存,显然是不明智的。从下图的金字塔模型可以看到,从机械硬盘,到SSD硬盘,再到内存,速度越来越快,价格越来越贵,单位容量的价格也越来越高。在许多互联网公司,比如新浪微博,好多单业务的缓存都突破了1TB(线上单机内存容量128GB),所以,不可能把数据全部装入内存。

商业化发展趋势变化

10月12日,Redis作者Salvatore Sanfilippo爆出一个猛料(原文:https://groups.google.com/forum/#!topic/redis-db/DLP7119a00U),对外宣布说他已经加入数据库制造商Redis Labs,把Redis的商标所有权、LOGO所有权都转给了Redis Labs,这也意味着Redis进入了商业化运营。很快,本文作者就注意到Redis开源项目中就加入了License(https://redis.io/topics/license/)。

其实,早在今年的8月23日,Redis Labs将公司开发的Redis模块从AGPL迁移到将Apache v2.0与Commons Clause相结合的许可证,后者会限制了Redis涵盖软件的销售。

(原文:

https://www.theregister.co.uk/2018/08/23/redis_database_license_change/),许可变更意味着自建的Redis模块,如RediSearch、Redis Graph、ReJSON、ReBloom和Redis-ML 等不再是开源软件,相反,他们将变成“源码可用”。在文中,Redis Labs的联合创始人兼首席技术官Yiftach Shoolman表示说是云提供商从开源软件中受益,同时不给予任何回报,从而导致了许可证的变更。

不仅是Redis,还有Neojs图形数据库,MySQL数据库SQL自动化审核与执行系统Inception等都进行了商业化运营调整。“天要下雨,娘要嫁人”,未来,技术选型时要考虑到这一层,拥抱开源的同时要适应商业化运营调整的变化趋势,未雨绸缪。

Redis的这一重大举措,让不少用户一声唏嘘,这也正好反映出缓存的市场需求极大。好在缓存生态体系是繁荣的,我们还有更多的选择,比如:Memcached、Pika、Codis、TiKV等。也有一些尚未开源的,比如腾讯的TRedis,新浪微博的Counter service等。正如前面提到的“二八原则”,实际业务中,也是这么去做的,将热数据放到内存,冷数据放到磁盘,这里提到的缓存数据库也大部分是采用这种原理进行设计的,后端大部分采用RocksDB作为数据存储技术,可见是大趋势如此。

成本控制考虑

成本控制是许多公司数据库部门的一个KPI的考核指标,也是业务架构设计的时候需要考虑的一个重要因素。比如,前面提到的新浪微博的业务需求1TB的数据,如果都存到内存中,那么需要多少硬件资源呢?假设进行最小化部署1主1从,1TB数据 / 单机100GB内存 = 10台,按2个实例算,满打满算需要20台服务器,还不考虑自然增长的情况,按单台3万算,那就得60万,还不算IDC的租赁成本、电力功耗和带宽的成本,一个业务(或许只是其中一个功能模块而已)的成本是昂贵的,不可取。那么如果,20%的数据存内存,80%的数据存硬盘(为了保证性能,选择PCIe或Open-Channel SSD),那么需要多少呢? 200GB数据 / 单机100GB内存 = 2台,其余800GB数据全部存硬盘(据了解宝存科技就提供3.2T、6.4T、12.8T等不同存储容量的PCIe),也就是需要 2台 * 2 = 4台,单台成本按5万算,也才20万,节省了40万啊!相比,这个方案明智的老板是没有反对的吧~

存储硬件技术的发展对KV存储趋势发展的影响

本文作者从9月7日开源数据库论坛大会上获悉,宝存科技全新推出的新一代Direct-IO系列支持单卡超大容量 32TB,超低的延迟 读/写:90/13微秒, 超高的IOPS 读/写:100/31万,单卡功耗低于25W。在常见的基于文件的存储应用模式下,这些性能指标足以满足KV存储的需求。除此之外,宝存科技还隆重推出了业界第一款商用级别的Open-Channel SSD,在Open-Channel SSD上,KV应用可以摆脱传统实现方式的束缚,在之前的性能基础上继续实现大幅度的性能增强。那么为什么能有这么好的性能效果呢?这就要从Open-Channel SSD的实现原理来说了。

高性能原理

随着NAND Flash技术的成熟,基于NAND Flash的固态硬盘(SSD, Solid State Drive)在企业级市场得到了极大规模的部署,尤其是基于PCIe硬件接口的企业级SSD,以其高IOPS、高带宽、大容量、低延迟的特点颠覆了整个存储行业。

SSD由很多颗NAND Flash颗粒组成,单颗NAND Flash的性能非常一般。控制器通过设计多个通道并行连接到NAND Flash颗粒,将IO压力尽量平均分散到所有NAND Flash颗粒的所有内部单元上,内部单元的性能因此可以叠加,这是SSD高性能的来源。

基于PCIe硬件链路的软件传输协议NVMe(Non-Volatile Memory Express)成为最常见的PCIe SSD接口协议。因用户对NAND Flash特性和SSD逻辑的理解,以及对整体业务系统性能突破的需求,存储厂商基于对存储硬件性能的提升及对硬件管理功能的丰富的探索,宝存科技在全球率先推出Open-Channel SSD产品,这种仅保留NVMe传输协议,向操作系统和上层应用暴露NAND地址和读写接口,将SSD的逻辑完全交由操作系统或者上层应用结合自己的业务逻辑来实现,使得用户可以真正的获得存储级别的IO隔离、可控的延迟和其他软件定义Flash带来的收益。目前,Linux Kernel 4.4及以上内核版本都已经支持Open-Channel SSD。

IO隔离的原理

在Open-Channel SSD中,固件不再在设备层面对NAND介质进行复杂管理和逻辑抽象,而是将设备物理上的并行度、介质结构和分布直接暴露给操作系统和用户,使得设备“白盒化”,用户可以“看到”所有的物理存储地址,并且可以对其中的任意一点进行读写。这一功能的提供使得从用户角度实现同一设备上的IO隔离成为可能。将多个PU编成组(Group),一个设备可以被划分成多个组,每一个组可以成为一个应用的存储区域,它的性能将能够得到保证并且不影响其他的组。

可控延迟的原理

在一个组内,存储地址拥有的延迟能力是确定的。组内存储地址的行为完全由主机控制,主机可以根据需求确定将IO以何种模式、在什么时候发送到哪一个地址上,因此目标IO可以获得一个可预测的延迟。最典型的例子是:对所有物理地址加入“繁忙标记”,如果一个组内原计划正要被写入地址处于繁忙状态,标准设备的选择是等待上一个操作完成后将数据写入,而在Open-Channel SSD中,可以主动选择跳过带有”繁忙标记“的地址,以最小的延迟将数据写到非繁忙地址上。

另一方面,通过对数据存储地址优化和缩短存储路径,进一步降低延迟,提升性能。在标准块设备的实现和应用场景下,应用的数据存取基于文件。应用程序在文件中创建自己的数据管理方法,一般是数据页(Data Page)的方式。文件本身基于文件系统,文件系统又基于逻辑扇区(Logical Sector)的管理方法。文件系统基于块设备,块设备由SSD逻辑模拟生成。一份应用数据的读写要经过至少3次主要的地址转换,会带来一定的读写延迟和写放大。在Open-Channel SSD中,最底层的NAND Flash读写地址直接展现在应用面前,应用程序存取数据可以做到一步直达,极大降低延迟。

那么对于KV存储,Open-Channel SSD如何通过削减存储路径来提升性能呢?通过对RocksDB和Open-Channel SSD的写入路径对比分析得出。

RocksDB的写入路径,如下:

正常情况下,写入WAL后返回。异常时通过WAL恢复Memory Table,Memory Table达到触发Flush条件后开始刷盘,不同Level的SST文件达到触发Compaction条件后开始合并,此过程会占用大量的后台带宽,并且会形成较大的写放大。

而Open-Channel SSD的写入路径无WAL,写入也是实时落盘,写入成功后直接返回,异常情况时通过盘上的Epi Log恢复映射表。也无Memory Table,而是在Host FTL中存储Key->Pba(offset)的映射。也没有Compaction的步骤,Key在写入FTL后会自动进行排序,避免了写放大。优化后的效果:

值得一提的是基于Open-Channel SSD的KV引擎API兼容LevelDB和RocksDB,并且还提供掉电数据保护功能。

数据分层优化延长SSD使用寿命

NAND Flash存储地址不能直接复写,应用经过一段时间运行后,必然会造成部分地址上的数据被废弃(脏页,Dirty Page)。运作SSD的逻辑必须包含垃圾回收(Garbage Collection)和磨损均衡(Wear Levelling),此时必须要对将要擦除重新投入使用的块(Block)中的有效数据进行迁移,迁移数量的多少直接直接影响SSD内部运作效率,对用户体现出不同的性能。

如图所示,冷数据为不经常变动的数据,热数据为经常变动很快会失效的数据,脏数据为已经变动废弃的数据。如果选定Block F为回收目标,将不得不先将其中的有效冷数据迁移到新的地址,SSD的写入被增加了。标准设备模式下,冷热数据无法区分混合存放,因此Block回收过程中需要额外迁移本可以避免的冷数据,加重了实际的写入量,降低了SSD的总体寿命。

在Open-Channel SSD模式下,应用程序可以主动将冷数据集中在一起,将热数据集中在一起,冷数据块不会发生频繁的回收再利用,热数据块会出现更大面积的数据失效导致需要迁移的数据变少,极大降低后台逻辑压力,这种通过对数据摆放的精确控制,实现冷热数据的分离,可以更有效的GC,从而减少写放大,进一步释放SSD的一部分性能,同时延长SSD寿命。优化GC带来的性能提升效果,如下:

趋势发展总结

1、互联网业务蓬勃发展带来的需求变化,对KV存储容量的要求越来越大,呈现TB级趋势,对KV存储性能在高QPS、低延迟方面依然保持较高要求。

2、KV存储生态体系健康发展,出现类似Pika、TiKV、TRedis、Counter Service等KV存储系统。结合互联网业务的特点,架构设计时需要结合成本控制,考虑数据存储的冷热分离。

3、Redis商业化运营事件背景下,在技术选型上,拥抱开源的同时,要适应商业化运营调整的变化趋势,未雨绸缪。

4、存储硬件的技术突破,“软硬结合”的时代已到来,单方面的软件优化或者硬件优化,已经不能跟不上业务爆发式增长所需的性能要求,只有二者结合,才能将性能优化发挥到极致,满足业务要求的同时,还能为企业节省成本。从上面的各种原理和数据中可以看出,宝存科技推出的Open-Channel SSD在KV存储领域会掀起一场的技术革命。

上海宝存信息科技有限公司(Shannon Systems)成立于2011年9月,是业界领先的闪存存储设备和系统解决方案供应商。总部位于中国上海,在北京、深圳、广州、杭州、福州等地设有销售和技术支持中心。
全球第一块单卡12.8TB和32TB PCIe Flash产品;中国第一块U.2接口PCIe Flash存储盘;全球第一个基于全局FTL的通用PCIe-RAID系统,全球首款商用级Open Channel SSD都诞生在宝存科技。宝存科技的产品上市至今,最终客户超过数百家,遍布互联网、电商、运营商、能源、交通、金融、教育、医疗、政府和企业等各个行业。
宝存科技诚邀各方合作伙伴携手合作,互利共赢。

返回搜狐,查看更多

责任编辑:

声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
阅读 ()
投诉
免费获取
今日推荐