龙空技术网

架构解密从分布式到微服务:深入浅析内存,内存计算技术前世今生

大数据架构师 295

前言:

如今大家对“apache ignite 不足”都比较关怀,小伙伴们都想要了解一些“apache ignite 不足”的相关内容。那么小编同时在网摘上汇集了一些有关“apache ignite 不足””的相关知识,希望看官们能喜欢,看官们一起来了解一下吧!

内存计算技术的前世今生

无论是我们的手机、笔记本计算机还是公司的服务器,我们都明显感受到内存越来越大,在很长一段时间内(包括现在),我们仅仅把大内存当作缓存来使用。除了关系型数据库,我们最熟悉的就是缓存中间件如Memcache、Redis等,它们用来简单缓存Key-Value的数据,而大量的数据计算仍然离不开关系型数据库。

其中的原因在笔者看来,主要有以下几点。

(1)直到近几年,我们所开发的大量软件都是面向企业使用的MIS系统,绝大多数数据被存放在关系型数据库中,甚至图片这种明显不合适的二进制数据也被尽量存放在数据库中,而大部分软件工程师要做的工作就是围绕数据库的CRUD操作及页面展现而年复一年地重复编程。

(2)由于之前的系统产生的数据量不大,数据处理的逻辑也不是很复杂,同时不追求实时性,因此传统的关系型数据库及数据仓库产品足够应付,无须更高端的技术。

(3)长期以来,内存都是比较昂贵的硬件,容量越大的内存条价格越高,机械硬盘则不断刷新性能与存储容量的新纪录。这种情况更加巩固了关系型数据库的地位,并促进了大量的基于硬盘(文件)的数据处理系统的发展。

突如其来的互联网时代则是一个全新的软件时代。一方面,系统的用户量庞大,系统中的业务数据也随之迅速膨胀,数据量越来越大,运算越来越复杂;另一方面,由于互联网用户的个人意识增强,在其个性化诉求增加的同时忠诚度大大降低,导致我们不得不努力提高系统的响应速度,提升用户体验,同时使系统变得更加智能以吸引和留住用户。

那么,问题来了,如果提升系统的响应速度,则如何让系统变得更加智能呢?

这个问题很复杂,但关键点只有两个:内存计算及更快的大数据分析技术。如果深入分析,则内存计算技术可以说是基础。大家都知道,Spark可以说是很火的开源大数据项目,就连EMC旗下专门做大数据的Pivotal也转而投入Spark技术的开发中。那么,Spark 的核心和关键技术是什么?就是内存计算。下图给出了各种存储的速度对比,可以看出内存计算达到传统机械硬盘的10万倍,因此Spark尽可能地将数据放入内存中运算,尽可能得到实时结果,这种新颖大胆的设计思想使得Spark从一开始就超越了Hadoop。

内存计算其实并不是一种新生事物,至少在10年前就有一波内存计算的热潮,那时的代表性产品为内存数据库,例如TimesTen和Altibase。内存数据库的最大特点是放弃了磁盘存储数据的思路,把数据放入内存里,因为相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大提高应用的性能;同时,内存数据库抛弃了传统的磁盘数据管理方式,以全部数据都在内存中为基础重新设计了其体系结构,并且在数据缓存、快速算法、并行操作方面进行了相应改进,所以比传统数据库对数据的处理速度要快很多,一般都在10倍以上,在某些性能要求很高的专有领域占有重要的市场份额。

TimesTen是内存数据领域的佼佼者,拥有很多客户,知名的Salesforce.com 的核心也采用了TimesTen,后来TimesTen被Oracle收入旗下,其中的一个用途是作为Oracle数据库的Cache以提升传统数据库系统的性能,另一个用途是嵌入Oracle强大的全内存BI分析一体机 Exalytics中,加速数据分析和处理。

实际上,Oracle在大数据方面的战略就是延续传统关系型数据库的思路,通过打造专有软硬件一体的、基于内存数据库技术(TimesTen)的强大一体机 Exalytics来进入大数据领域。在收购Sun公司以后,Oracle拥有了可以抗衡IBM Power 处理器的SPARC芯片及最强的SolarisUNIX系统,更加快了Exalytics一体机改进的步伐。于2013年发布的Exalytics T5-8采用了8路SPARCT5-8服务器芯片,拥有128个CPU内核、1024个硬件线程、4TB主内存、3.2TB闪存、7.2TB硬盘,集成系统还支持每秒256GB的输入、输出带宽,支持多种10GB高速网络、无限带宽技术与Oracle ZFS存储软件,因此可在同一个分析服务器中实现大量的并行操作。2016年,Oracle更是推出全新的SPARC S7芯片,成为Intel志强服务器芯片的最强对手之一,SPARC S7拥有8个Core,在一个Core 上能运行8个线程(超过Intel Xeons4倍),单一处理就支持64个逻辑CPU,这意味着升级到SPARC S7芯片的Exalytics 8路一体机将拥有512个CPU内核。令人遗憾的是一年以后,Oracle正式放弃了SPARC处理器,而Exalytics一体机的最新版也停留在了2013年发布的Exalytics T5-8型号,不过截至目前,Oracle仍在售卖这款机器。从Exalytics 的硬件规格我们可以看出,要实施大数据和内存计算,最重要的一个基础和前提就是拥有强大的服务器,特别是超大内存,注意,这里的内存已经以TB为单位了。已经上市的DDR5内存条,除频率更高外,存储密度进一步提升,单条内存容量高达 128GB。随着DDR5内存条的推广和普及,以及大数据分析业务、公有云市场的推动,相信超大内存的服务器会很快普及。

在内存计算和大数据方面,软件巨头之一的SAP也走了一条类似于Oracle Exalytics的路线,但SAP的路线更为“革新”。SAP推出了HANA平台,这是对传统数据库市场的挑战,HANA的目标是通过一个统一架构来同时支持OLTP+OLAP,但主体仍然是先进的内存计算,并且采用了很多新的软件设计思想和算法。此外,HANA在分布式方面走得更远,目前单台HANA节点的内存配置为4TB。2011年10月,农夫山泉成为国内第一代HANA 用户;之后中国电信、联想集团、上海大众、安踏等大客户也从Oracle、DB2迁移到HANA上;国内某些计算机高校也开展了HANA专业课程。由于HANA走的是一条合作共赢的路线,而SAP主要集中在软件平台方面,所以HANA并没有专有的封闭式硬件环境,因此2015年华为开始跟进,与SAP合作研发HANA一体机。截至2020年3月,将近46%的 SAP HANA许可都与慧与(HPE)服务器关联,慧与在SAP HANA服务器部署上排名第一,慧与部署的SAP HANA服务器超过后三家供应商的总和。另外,在公有云上部署SAPHANA,能充分利用云服务的优势,扩展方便、使用灵活,在降低购买成本的同时大大提高了部署效率,包括微软、阿里巴巴、华为等在内的公有云提供商也都在积极拥抱SAP HANA。

除了内存数据库,另外一项被称为内存数据网格/内存计算网格(In Memory Data Grid/InMemory Compute Grid,即 IMDG/IMCG)的内存计算技术也在独立发展,与内存数据库的不同之处在于,它是一个完全分布式的内存存取系统,目的是将不同X86服务器上的内存整合为一个超大内存(通用的X86服务器的内存要比专有UNIX服务器的内存小得多),以解决单机内存资源不足的问题。除此之外,IMDG/IMCG 与内存数据库有两个明显的区别:首先,IMDG/IMCG存放在内存中的是序列化对象,它们之间没有依赖关系;其次,IMDG/IMCG集群还得考虑动态增添主机所带来的复杂问题。IMDG/IMCG领域比较有名的几个产品如下。

Hazelcast:通过Java实现的开源商业性方案。Terracotta的 BigMemory:通过Java实现的开源商业性方案。VMware Pivotal Gemfire:铁道部采用的方案,解决了售票系统瘫痪的历史难题。Apache Ignite (后简称Ignite):为2007年创建的GridGain公司的产品,是个强大的整体解决方案和开发平台,功能很多且复杂,2015年加入Apache开源,与Hazelcast是老对手,两者都有开源及商业版本。Oracle Coherence: Oracle的商业产品,通过Java实现。Gigaspaces XAP:商业性的整体技术解决方案。JBoss Infinispan:开源方案,通过Java实现,目前可以对接Hadoop和 Spark。

我们看到,IMDG/IMCG 产品多数是通过Java实现的,目前在开源界比较有影响力的有Hazelcast、Terracotta两家公司。特别是在Terracotta收购了Java界最有名的缓存中间件Encache并将其与自家主打产品BigMemory结合以后,缓存中间件与IMDG/IMCG产品之间失去了明显的界限,比如Terracotta 的 BigMemory及系列产品可以做到将一个巨大的数据库完整地加载到分布式内存集群中,而延时在微秒级级别,这与HANA目前看起来是一致的。就在HANA发布后的第2年,Software AG宣布收购Terracotta,Software AG认为SAP在内存云平台上的投入证明了这类解决方案拥有巨大的潜力和客户需求量。我们相信Terracotta有很大潜力来构建云平台,同时看到了开源的价值:Terracotta社区的用户量在不断增长,社区内的讨论活跃,远胜于大多数企业软件公司,截至2020年,Terracotta全球部署数量已达250万个,而相关开发人员也超过200万人,成为Java实时应用领域热门中间件之一。

仔细研究Hazelcast、Ignite 及 JBoss Infinispan的最新版本,你会发现有一个共同特性:它们都开始支持Spark了,通过自定义RRD的实现,将Spark RRD的数据存储到分布式内存集群中。在这里,我们再一次看到软件技术发展过程中不断革新、不断融合的趋势。

随着数据库实时计算的需求越来越多,出现了一种新的内存计算技术,可以称之为“分布式内存数据库”。严格意义上讲,这种产品并不属于传统意义上的数据库,只不过提供了很好的SQL查询能力,对Spark这种支持SQL查询的大数据系统来说,它们更像关系型数据库,也可以将其看作一种 NewSQL产品。分布式内存数据库的显著特性是增加了基于标准SQL或MapReduce的MPP(大规模并行处理)能力。如果说IMDG/IMCG的核心是解决数据量不断增加情况下存储的困境,那么分布式内存数据库就是解决计算复杂度不断增长的困境,它提供了分布式SQL、分布式共享索引、MapReduce处理等编程工具。实际上部分IMDG/IMCG产品都具备一定的SQL查询能力,只不过这方面不是它们的重点。分布式内存数据库领域的代表作品为VoltDB。VoltDB虽然主要在内存中执行SQL,但它也符合ACID 原则,并定期将数据持久化到磁盘中,也存在开源和商业两个不同的版本。

内存计算技术之后逐步发展为Spark这种实时大数据查询及分析系统的关键技术。另外,新型的数据仓库系统及并行数据库系统也大量依赖分布式内存计算技术,比如Impala,它是Cloudera公司主导开发的企业级数据仓库系统,提供SQL语义,能查询存储在Hadoop中的HDFS和HBase中的PB级大数据。

Alluxio是内存计算领域的另一个知名项目,也是基于Java开发的,在2012年诞生于UCBerkeley AMPLab(这也是孵化了Apache Spark的知名实验室)。Alluxio于2013年4月开源,由最初的Tachyon改名而来,目前社区免费版与商业版并存。Alluxio是世界上第一个以内存为中心的虚拟的分布式存储系统,它统一了数据访问方式,为上层计算框架和底层存储系统构建了桥梁。在传统的计算引擎中,数据被存储在同一个JVM中,而基于Alluxio的中间件将数据存储到不同的JVM中,对外提供统一的访问接口,并且利用集群中每个节点的内存、SSD等高性能存储器实现整合的高效内存计算。据报道,百度的一项数据分析流水线采用Alluxio集群代替Spark后吞吐量提升30倍,去哪儿网基于Alluxio进行实时数据分析,巴克莱银行使用Alluxio将其作业分析的耗时从小时级降到秒级。Alluxio也可以被部署到Kubernetes集群中,官方的社区版就有此功能,更方便云端大规模部署。截至目前,Alluxio 已经在超过100家公司的生产中进行了部署,并且在超过1000个节点的集群上运行。

在大数据时代,无论是存储还是计算,都已经离不开内存计算技术了,越来越多的新型软件都需要高级的内存编程技术。Java在这方面不断前进,如果有志于这方面的研发,则建议你深入学习和掌握Java Unsafe所提供的底层内存控制API的用法。

本文给大家讲解的内容是架构解密从分布式到微服务:深入浅析内存,内存计算技术的前世今生下篇文章给大家讲解的是架构解密从分布式到微服务:深入浅析内存,内存缓存技术分析;觉得文章不错的朋友可以转发此文关注小编;感谢大家的支持!

标签: #apache ignite 不足