上图是你们都很熟悉的基于 Hadoop 体系的开源大数据架构图。在这个架构中,大体能够分红三层。最下一层是数据采集,一般会采用 kafka 或者 Flume 将 web 日志经过消息队列传送到存储层或者计算层。对于数据存储,目前 Apache 社区提供了多种存储引擎的选择,除了传统的 HDFS 文件和 HBase,还提供了 Kudu、ORC、Parquet 等列式存储,你们能够根据自身的需求特色进行选择。在这之上的数据计算层,选择就更丰富了。若是你想作实时推荐,能够采用 Storm、Spark Streaming 这样的流计算引擎对 Kafka 或者 Flume 传递上来的数据进行实时处理。若是你想进行客户画像,可使用 Mahout 或者 Spark LMlib 里的机器学习算法进行分类。若是你想查看当天的销售排名,可使用 HBase、Impala 或者 Presto。若是想对某些商品的销售进行比较复杂的漏斗分析,则使用 HIVE 或者 Spark 可能会更合适。web
固然,你们根据各自的需求,能够叠加上 Redistribution 缓存,ElasticSearch 全文本搜索,或者像 MongoDB、Cassandra 这些产品。因此,你们会发现,其实在大数据计算方面,并无什么特别成熟的架构,你们所作的大多都是针对一些问题点不断进行创新、改进和修正,再把几个产品想办法整合起来。这是由于作为一个新兴的领域,大数据计算方面的技术积累还很不够,还有不少难点没有攻克,还处在一个不断成长的阶段。而在大数据技术开拓创新上,互联网企业是引领潮流的。目前的大量收到追捧的大数据技术产品,大多都是由互联网企业。作为大数据技术的基石的 Hadoop 的基本思想基于 Google 的 Map/Reduce 和 Google File System,Presto 来自于 Facebook,贡献了 Impala 和 Flume 的 Cloudera 虽然不算一家互联网公司,可是带有很强的互联网基因。国内的 BAT 等互联网企业也对大数据开源社区作出了很大贡献。算法
但这也带来了一个问题,那就是这些大数据产品即架构都是针对互联网企业的由于需求与场景设计的。虽然这些需求和场景具备必定的普适性,可是在企业的总体 IT 架构上,传统企业与互联网企业有着很大的不一样。数据库
首先,传统企业和互联网企业在专业技术人员配备上有很大的不一样。互联网企业汇集了大量的高水平计算机软件设计开发维护人员,这是绝大多数传统企业所不具有的。这里的差异一个是在量。传统企业中,一个拥有几百个技术人员的信息中心已是一个至关大的团队了;而互联网企业的技术人员每每都有数千人的规模,像 BAT 这样的企业,开发维护技术人员都达到了上万人。另外一个差异则在质上。互联网企业中一般会有一支专门的平台支撑专家团队,有能力自行及时修复开源产品中的 BUG,保障系统服务的稳定运行。而因为薪资等方面的缘由,传统企业每每很难招到掌握开源产品核心技术的顶级开发者。这给开源产品的使用带来的隐患。一旦开源产品出现的 BUG 等问题,无人能够及时应对,将会给企业的生产服务形成很大的损失。编程
其次,传统企业的 IT 架构也和互联网企业有很大不一样。互联网企业的历史相对较短,并且具备以开源软件为基础自行研发应用的基因,各企业本身对各类技术细节业务逻辑都很是了解,大数据系统甚至是和业务系统紧密联系的,不会有太多的集成性的问题。而传统企业每每历史较长,在 IT 建设走过多种技术路线,每每有大量的架构不统一的遗留系统。不少企业过去曾经建设过企业数据仓库,如今又开始建设大数据平台,这之间又没有特别严格的划分,不只形成不少功能的重叠,更是形成了不少的数据冗余,不少数据会在不一样的系统中保留多份拷贝,甚至很多企业须要频繁地把同一份数据在不一样的系统中来回传输。这就带来了很严重的集成性问题。缓存
第三,相对于互联网企业,大多数传统企业的数据量其实并无那么大。相比较 Google 每秒超 10 万次的搜索,支付宝双十一每秒超过 25 万笔交易,绝大多数的传统企业的数据量真没那么大,可能还不至于成为不可攻克的难题。对于这样的数据量,可能传统的技术就能够解决,而不必定非要用到 Hadoop 这样重的架构。而为了挖掘出这些数据中的价值,多源异构的复杂环境多是一个更加麻烦的问题。安全
有的时候,在考虑一个问题的解决办法时,从相似问题的解决办法中得到一些借鉴是一个不错的开始。网络
其实,在交易类应用领域,也曾出现过相似的状况。企业中运行这各类各样的应用系统,这些应用由不一样的开发者开发,技术路线、体系架构、遵循的标准都相差甚远,形成了一个个信息孤岛,一些须要共享的信息,不能在系统之间交换,形成不少信息的滞后和数据不一致现象。多线程
那么后来这些问题解决了吗?又是怎么解决的?————有人发明了中间件。架构
什么是中间件,并无人对它作出一个科学的定义。整体来讲,是一个为了解决分布异构问题而提出的一个概念它位于平台 (硬件和操做系统) 和应用之间,为双方或者多方提供的通用服务,这些服务具备标准的程序接口和协议。针对不一样的操做系统和硬件平台,它们能够有符合接口和协议规范的多种实现。 解决多源异构并非中间件出现的惟一缘由,可是是它解决的异构重要问题,通常来讲,中间件具备如下特色:机器学习
1. 知足大量应用的须要
2. 运行于多种硬件和 OS 平台
3. 支持分布计算,提供跨网络、硬件和 OS 平台的透明性的应用或服务的交互
4. 支持标准的协议
5. 支持标准的接口
也就是说,中间件的主要做用,就是创建跨平台的标准化交互接口。按照应用场景的不一样,中间件开源分为网络通讯中间件、RPC 中间件、消息中间件、交易中间件、Web 中间件、安全中间件等。这些不一样的中间件在实际功能与实现方式上各不相同,在各自的领域中发挥着不一样的做用,可是都知足以上列出的特色,都具备上述描述的基本功能。
那么,为何不考虑在数据应用领域也采用中间件技术呢?
为何提出数据计算中间件这个概念?由于在开发数据应用的过程,你们一般都会被如下的问题所困扰。
- 须要跨系统跨平台操做,从不一样的数据源的数据放在一块儿计算
- 需求变化频繁,不断出现新需求,老需求不断修改
- 业务逻辑与数据耦合过紧
- 复杂计算实现困难,执行性能差
而经过设置异构数据计算中间件,就能够很好地解决多源异构环境下的融合计算问题。固然,仅仅解决异构数据的交互访问仍是远远不够的,要解决上面的困难,数据计算中间件还须要可以提供高效的开发效率,优秀的计算性能和方便的代码管理能力。综合起来,咱们能够从下面几个方面数据计算中间件进行评估。
- 兼容性(Cross-platform)
这里的兼容性主要是指的跨平台的数据访问能力。前面咱们说到过传统企业 IT 系统的异大特色就是存在大量异构系统,这些异构系统之间的互操做性不好,数据计算中间件的首要任务就是打通这个壁垒,起到连通的做用,将不一样异构平台中的数据集成到一块儿。
- 热部署(Hot-deploy)
数据应用的特色之一就是需求变化很快,咱们对数据分析的要求是无止境的,老是在探求新的目标,老是但愿可以从数据中挖掘出更多的信息。所以,数据应用的需求变化是异构持续的常态。这就对应用的部署提出了新的要求,若是每次部署新功能模块时都须要中止服务,势必对服务的质量形成很大的影响。若是应用模块能够热插拔,不须要中止整个服务,模块之间也相互隔离,那么这个应用的运行就会更加平顺,服务质量也能够获得保障。
- 高性能(Efficient)
数据计算处理的性能对于数据计算中间件也很是重要,即便传统企业的数据量没有互联网企业那么大,数据应用须要处理的数据也是具备至关规模的,高的计算性能是评价数据计算中间件的异构重要指标。虽然不存在异构硬性的性能指标,可是在可能的状况下,咱们老是但愿处理速度越快越好。
- 敏捷性(Agile)
敏捷性在这里,强调的是开发的方面。正由于数据应用的需求会持续不断变化,所以开发也会是一个持续的任务,不会像传统业务应用同样在至关一段时间内保持不变。开发的敏捷性能够保证数据应用能够在尽量短的时间内完成新功能的交付使用,在某些特定的场景中,这可能为企业避免巨大的损失。
- 扩展性(Scalability)
数据计算中间件须要要很好的可扩展性,支持分布式计算,具有了这种能力,数据计算中间件才可能在实际的应用环境从容面对不一样数据量的场景,而且在数据量业务量不断增加的时候,仍然保证自身提供的各类数据服务持续可用。
- 集成性(Embeddable)
作为一款中间件,可集成性也是必须的。这里的集成包含两个方面,一个是对第三方软件的集成,一个是被集成到第三方的软件中。数据应用的场景很是多样,只有具有很强的集成性,才能在更多的环境中获得应用。
以上就是咱们评估数据计算中间件的几个关键考量,能够简称为 CHEASE。若是在 CHEASE 对应的六个方面都获得很好的知足,那这就是一款优秀的数据计算中间件。
数据计算中间件是一个全新的概念,目前数据计算方面的产品中,与之最接近的是集算器。集算器是北京润乾信息系统科技有限公司彻底自主研发的一款轻量级大数据融合计算平台,一种针对结构化和半结构化数据的计算设计开发的新型计算引擎。集算器的设计目标,是试图解决描述计算的效率和实施计算的效率。集算器具备如下一些特色。
1. 为了达到设计目标,润乾公司首先为集算器设计了一种面向过程计算的脚本编程语言 SPL(Structured Precessing Language),能够方便地描述数据的计算过程。集算器采用了新的数据和计算模型,提供了丰富的基础计算方法,特别适合业务规则复杂的多步骤运算,让计算自己变得易于描述,从而提升代码的开发效率。
2. 集算器在内部的计算实现上,作了大量的优化工做,这些算法的优化使得在对数据集进行排序、汇总、关联等计算时,速度获得很大提高,大大提升了计算实施的效率。
3. 集算器内置大量数据访问接口,能够轻松链接各类数据源并从中获取数据。支持的数据源包括但不限于:
- 商用 RDBMS:Oracle、MS SQL Server、DB二、Informix
- 开源 RDBMS:MySQL、PostgreSQL
- 开源 NOSQL:MongoDB、Redis、Cassandra、ElasticSearch
- Hadoop 家族:HDFS、HIVE、HBase
- 应用软件:SAP ECC、BW
- 文件:Excel、Json、XML、TXT
- 其余:http Restful、Web Services、支持 OLAP4j 的多维数据库、阿里云
4. SPL 为解释型语言,不须要进行编译。这使得集算器的任务脚本在集算器内部的部署十分方便,能够很方便地实现动态热部署。
5. 集算器提供了并行多线程计算和集群分布式计算的能力,并且集群的节点能够动态添加,具备十分优秀的可扩展能力。
6. 集算器的核心功能由若干个 Java JAR 包实现,短小精悍,具备超强的可集成性、灵活性、扩展性、开放性、可定制性,很是易于和 Java 应用进行深度整合。加之对外提供了 JDBC、Restful、Web Services 等标准接口,使之与第三方的应用很是容易进行整合集成。
以上这六个特色,偏偏对应了 CHEASE 的六个方面。虽然润乾集算器设计之初尚没有提出数据计算中间件的概念,可是整个产品的设计宗旨始终围绕着 CHEASE,因此在兼容性、热部署能力、计算性能、敏捷性、可扩展性和集成性几个方面,至关得均衡,各方面的表现都至关优秀。若是你以为在你的数据计算架构中须要一款数据计算中间件,那集算器恐怕是目前惟一的选择。
固然,数据计算中间件的概念刚刚被提出,集算器也是一款新产品,概念须要不断验证完善,产品也确定会有不少不足之处。目前可见的困难由如下两点。
- 获取数据的性能
数据应用不一样于其它的应用,它老是牵扯到大量数据的读取,所以数据读取的性能很是关键。数据读取的性能不只取决于数据计算中间件自己,还取决于数据源和接口类型。若是经过 JDBC 这样的标准接口,数据访问使没有任何问题的,可是读取速度上是却很难知足数据应用的性能要求的。对于这个问题,润乾为集算器提供了多种格式的内部文件存储作为数据缓存机制来加速计算,这是是一种很实用的折中方法。同时润乾也在尝试开发具备针对性的高性能接口,用于提升了从外部获取数据的速度。固然数据计算中间件涉及的接口极多,要解决好这个问题,是一个很大的挑战。
- 对机器学习的支持
现在,人人都在谈论机器学习,虽然传统数据分析仍然是主流,并且在大多数领域,机器学习并不成熟,实际应用的效果大多也差强人意。可是不能否认的是机器学习是将来的方向,将会是数据应用中不可或缺的重要组成部分。所以,机器学习的功能应该是数据计算中间件必须具有的。集算器目前还不具有机器学习的能力,这使它的使用受到了必定的限制。固然,集算器自己在发展,将来可期。