王磊:Aerosplike 是怎么做到 TB 级数据毫秒级响应的


         

编辑 | 韩楠

约  4,500 字 | 9 分钟阅读







在大型互联网架构中,数据量过 TB 是很平常的事情。那么 TB 级别的数据应该如何存储呢?这其实和数据的查询延迟需求有关。


如果是报表需求,查询延迟时间在分钟甚至十几分钟返回,咱们可以将数据存储在文件系统中,使用Spark 或者Presto 进行查询。

如果查询的延迟在秒级的话,我们可以使用 HBase 或者 Cassandra 来实现。



但是如果查询延迟是毫秒级别呢?这时就需要用到我们今天的主角,Aerospike。 如果用一句话来形容 Aerospike,那就是"Aerospike 是一个 TB 级别数据毫秒级查询的 NoSQL 数据库"。




Aerospike 

与其他数据库产品的区别在哪儿?



在介绍 Aerospike 前,我们首先看下 Aerospike 和其他数据库产品的区别。这将对我们理解 Aerospike 的特点和应用场景有帮助。


Aerospike 是一个分布式 NoSQL 数据平台,Aerospike 和其他 NoSQL 产品的相比最大的特点是 Aerospike 可以在大规模的数据下,比如 TB 甚至 PB 级也能取得几毫秒甚至更低的的延迟和高吞吐量。


可以说,其他的产品很难同时做到这两方面,比如 Redis 的产品特点是它的速度,它的扩展性比较差,当扩展到几 TB 时,就会遇到扩展性的瓶颈。而 Cassandra 是针对大规模数据的存储,它的响应速度相对比较慢,这是由它的产品在事务处理的构架和数据存储结构的缺陷所造成的。


Aerospike 的另一个特点是 它的总拥有成本是随着数据的规模线性增长的,而其他的产品总拥有成本往往是非线性增长的,随着数据的增长而急剧增长。






如何解决多级存储,

冷热分离方案数据的一致性问题?



Aerospike 在缓存方案中有个很大的优势是, 彻底解决多级存储,类热分离方案数据一致性问题。那么 Aerospike 是如何解决这一问题的呢?答案就是多级存储。


Aerospike 改变了传统的缓存层加生产数据库的二层式构架,在传统的生产系统中,因为速度的要求,往往都会在生产数据库上加一层缓存层,但这使得系统的构架变得非常复杂。


尤其在很多数据更新的时候,保持缓存层和生产数据库的同步,就成了较大的挑战。


Aerospike 是高性能并可持久的,它可以代替缓存层和生产数据库,进而把这两个部分的功能同时实现出来。这样,它就可以在处理高性能读取的同时也可以处理大量数据的更新,并实现事务的强一致性了。






图片

磁盘汇合存储架构,

带来 TB 级数据毫秒延迟的优势,

怎么理解汇合存储架构?



从实战的角度出发,Aerospike 之所以能在众多数据库中表现优异,是因为其 TB 级别的数据量下仍能保持毫秒级别的延迟。那么 Aerospike 是怎么实现TB级别数据毫秒延迟的呢?


其中一个核心点就是“汇合存储架构”。


我们知道,当数据在全内存中时,延迟小于 0.2ms;数据在汇合闪存中时,延迟为 1ms;当数据在全闪存时,延迟在 5ms 内。而 Aerospike 提供了一种汇合存储的架构,它可以将数据按需存在全内存、混合闪存或者全闪存中。



这样当我们对查询延迟要求低时 可以将数据存储在更快的存储中提高性能,当查询延迟要求不是十分苛刻的话 ,则 可以存储在一般存储介质中。同时 Aerospike 可以将数据在这些层之间灵活移动并内部解决数据的一致性问题。






Aerospike 支持的存储类型



Aerospike 通过混合存储及时实现了海量数据的高性能查询,那么 Aerospike 支持的存储类型有哪些呢?




DRAM(Dynamic Random Access Memory )

PMEM(Persistent Memory)

NVMe(non-volatile memory express)或  SSD(Solid State Drive )

传统磁盘( HDD



同时从图中可以看下,从  DRAM->PMEM->SSD->HDD 其磁盘延迟越来越大。


DRAM 和 SSD、HHD 大家都比较熟悉,这里就不展开讲了。接下来我介绍下 PMEM 和 NVME,这两种存储架构大家可能不常见,两者是Aerospike性能优化的核心方向,尤其是这涉及到PMEM是Aerospike专门针对被广泛使用的Intel奔腾处理器专门做的优化


因此这部分内容,我觉得有必要单独拿出来给大家讲一讲。


1. PMEM


PMEM 是持久内存,有三个最重要的特点: 大, 快,持久性 这里我将结合这仨特点展开说一下。





2. NVMe


NVMe 是 non-volatile memory express 缩写,是一个新的、速度更快的 SSD。 NVMe 是一种高性能、NUMA(非统一内存访问)优化的、高度可扩展的存储协议,用于连接主机和内存子系统。NVMe 是专门为 NAND、闪存等非易失性存储设计的,NVMe 协议建立在高速 PCIe 通道上。






Aerospike 汇合存储架构实现?



Aerospike 在汇合存储架构上支持全内存、全 PMEM 和全闪存(全闪存包括了 SSD、HHD、NVMe 三种情况)三方种方式。


由于这三种存储架构的差异很大,因此 Aerospike 在每种存储架构下都设计了不同的数据处理和优化方式,下面分别看下 Aerospike 在这三种存储架构中的具体实现。





DRAM 全内存模型



先来看看DRAM,它表示全内存模型,特点是:价位高,性能快。


具体在实现上 Aerospike 使用  J e Malloc 将数据配到不同的池中。JeMalloc(   ) 具有极低的碎片特性


同时 Aerospike 通过使用多个 DRAM 副本实现高可靠性。当某个节点出现故障后会将数据的写入自动 Shard 到集群的其他节点。当故障节点再次上线,副本数据会再次复制该节点。保证集群数据一致性。


Aerospike 使用随机分布式数据存储,节点故障数据不可用概率很小。例如 10 个节点,2 个副本的集群,如果两个节点同时下线,则影响的数据只有 2%,同时会将失败节点数据重新再生成一个副本。


如果有存储层的话,当读取存储层的数据时会将数据写入 DRAM。





全 PMEM 模型



Aerospike Enterprise Edition 4.8 支持在 Intel®Optane 中存储记录数据™ DC持久内存(PMEM)。在早期版本中,Aerospike支持将主索引存储在PMEM中。 Aerospike版本4.8将PMEM支持扩展到记录数据本身。PMEM提供了高性能,同时保留了持久性和快速重启功能。




全闪存(SSD、HHD、NVMe)模型


图片

Aerospike 在全闪存模型上的数据写入流程,和内存模型不一样。因此咱们需要单独学习下全闪存模型下 Aerospike 的,这里的数据写入流程虽然比较多。但是,你只需要理解闪存写入的过程就行了,不需要在此处投入过多精力。接下来我展开说一下:



  1. 客户发起写入请求后,首先会创建一个锁,避免同一个集群写冲突。

  2. 写完成后释放锁。

  3. 当发生网络分区后,可能存在短时间的写冲突。写冲突的数据在下次读取该数据的时候根据写入时间对数据进行修复,并将修复后的数据同步到集群所有的写节点上。

  4. 数据写入首先放在缓冲区,当写入缓冲区已满时,它将排队到磁盘。

  5. 所有内存中的副本更新后,结果会返回给客户端。




图片

Aerospike 闪存优化



Aerospike 之所以能够性能表现优异,是因为它在闪存优化上做了大量的工作。这里涉及到我们理解 Aerospike 的核心,需要大家重点关注。


1.为了减少闪存颗粒磨损,Aerospike  以大数据块方式写入数据


2.Aerospike 还针对 SSD 进行了优化, 绕过操作系统的文件系统,直接将 SSD 作为块设备读写,避免额外的 I/O 损耗,降低了延迟。



3.Aerospike 采用 优化的分布式哈希算法对数据进行分区,可以确保每个节点和闪存设备上存储均衡的数据,避免由于数据分布不均导致的性能瓶颈问题。


4.Aerospike  碎片整理程序跟踪磁盘上每个块上的活动记录数,并回收低于最低使用级别的块。


Aerospike 正是通过从各个维度优化磁盘的数据读写,从而达到毫秒内延迟响应的。





Aerospike 生态



介绍完了 Aerospike 的混合存储模型,下面咱们看下 Aerospike 周边生态,因为生态是评价一个大数据平台的重要的评价指标。


Aerospike 的数据可以从 Kafak 消息队列来,也可以从企业的关系型数据库,例如 MySQL、PostgreSQL 中来。


当数据进入到 Aerospike 后,我们可以使用 Aerospike 的 Spark Connect 或者 Presto Connect 进行查询。也可以将 Aerospike 的数据落入数仓从而进一步分析。从图中可以看到 Aerospike 周边的生态还是很丰富的。





图片

Aerospike 应用场景


介绍完了 Aerospike 的混合存储架构和周边生态,下面我们分析下 Aerospike 的应用场景。因为在大数据领域没有一个技术能满足所有应用场景。


比如 Spark 解决的是海量数据分析的问题,Flink 是解决实时计算的问题,ElasticSearch 解决的是全文检索的问题,HBase 主要解决基于 Key 的海量数据存储和查询问题。


说了这些,咱们看看 Aerospike 主要解决的是什么问题。咱们可以用一句话描述,就是“Aerospike 是解决海量数据的毫秒内超低延迟的操作”。


Aerospike 主要用于金融、电信、广告、在线游戏、互联网和物联网等行业。



下面咱们对常见的行业应用进行分析,这部分内容,你只需要做方案上的了解,具体在实战中,还是需要根据自身的需求做进一步分析,看看是否适合使用 Aerospike解决相应的问题。





反欺诈:银行、信用卡



先来看看银行反欺诈对 Aerospike 的需求:




广告:精准投放 & 竞价



广告行业对 Aerospike 的需求是这样的:


  1. 针对每个用户的每次操作进行竞价,使得数据流很大。

  2. 毫秒完成 RTB 过程。

  3. 数据量 TB 起步。






运营商:用户画像,余额查询



Aerospike 在运营商中主要解决这仨问题:


  1.降本(降低成本);

  2.性能和内存一样;

  3.跨数据中心需求。


前面介绍的只是Aerospike的几个常见的行业应用场景,其实还有不少其他的,远不止于此。它还可以用于物联网、电商、智能制造等很多行业。


同时,从前面了解到的Aerospike在各个行业中的应用,相信大家不难发现一个共同点,就是 Aerospike主要应用在拥有海量数据(TB级别及以上数据),同时对数据的操作延迟稳定在毫秒之内的需求


例如银行在转账前1秒内,要完成几十次甚至上百次的模型验证,来完成反欺诈功能。如果反欺诈流程过长则这个时间也会变长,用户就会有明显感知。


但是如果反欺诈流程设计得太简单,可能又起不到反欺诈的效果,最终可能导致大量资金被骗,产生的结果将更不能被接收。


这种情况就十分适合Aerospike,大家可以再找找在生活中类似这样的应用。



图片

结语


本文为大家介绍了 Aerosplike 是如何做到 TB 级数据毫秒级响应的。 其核心是通过混合存储架构和对闪存的优化来实现的。介绍完 Aerospike 的核心存储架构后,还为大家介绍了 Aerospike 的生态和 Aerospike 主要应用场景。希望同学们通过本篇分享的学习对 Aerospike 是什么,能解决哪些问题,有个全面的理解。



最后需要再次强调的是, 对于程序员来说我们大部分的应用面对的需求,可能是有了海量数据后如何快速查询、统计、分析的问题。


但是还有另外一起情况叫做“预判”,比如转账前反欺诈预判,汽车行驶轨迹预判,用户行为预判(个性化推荐App),用户在这一个小时内喜好的预判(视频推荐)等等。实质上,这些才是在数字世界中影响我们最深远的东西。而Aerospike在这方面的应用上,有很强的先天优势。


今天的分享到这里就结束了,希望今天你可以有一定收获。如果对今天的内容有共鸣,也可以分享给你的朋友。我们可以留言区里一起继续交流、讨论~




THE END 

转载请联系ITPUB官方公众号获得授权

—————————————————————————————————

欢迎各领域技术人员投稿

投稿邮箱 |  hannan@it168.com




请使用浏览器的分享功能分享到微信等