数据库
首页 > 数据库> > Phoenix兼容 | 深入探索Lindorm兼容PhoenixSQL背后的故事

Phoenix兼容 | 深入探索Lindorm兼容PhoenixSQL背后的故事

作者:互联网

用户福利

阿里云最新发布业界首款云原生多模数据库Lindorm,新用户可享9.9元/3个月优惠,技术交流钉钉群:35977898,更多内容请参考链接

1.背景

  作为面向大数据场景的半结构化、结构化存储系统,Lindorm已经在阿里发展了近十年,并始终保持着快速的能力更新和技术升级,是目前支撑阿里经济体业务的核心数据库产品之一。其在功能、性能、稳定性等方面的诸多创新历经了长时间的大规模实践考验,被全面应用于阿里集团、蚂蚁集团、菜鸟、大文娱等各个业务板块,成为目前为止公司内部数据体量最大、覆盖业务最广的数据库产品。随着云原生、5G/IoT时代的到来,客户数据规模和应用需求不断增长,为了更好地服务客户,阿里云 NoSQL 数据库团队融合原Lindorm和TSDB过去的技术积累,发布了云原生多模数据库 Lindorm,集成宽表引擎、时序引擎、搜索引擎、文件引擎四种模型,支持多类型、任意规模数据的低成本存储处理和自适应弹性伸缩,服务于互联网、IoT、车联网、广告、社交、监控、游戏、风控等场景,让企业数据『存得起、看得见』。Lindorm 云原生多模数据库整体架构及背后的思考可参考《存的起,看得见—云原生多模数据库Lindorm技术解析》。
图片
  在阿里云上,托管了标准版HBase,Phoenix,另外针对标准版HBase推出了增强版HBase(即Lindorm宽表引擎的前身),性能得到大幅提升,详细可参考《Lindorm/HBase增强版技术解密|每秒7亿次请求,阿里新一代数据库如何支撑?》。但是增强版系列没有兼容Phoenix的产品,很多客户在选用增强版HBase后,无法开通Phoenix SQL服务,有点小遗憾。为了补齐这个产品空白,为客户提供更好的产品体验,Lindorm决定兼容Phoenix。目前Lindorm兼容Phoenix产品已经正式发布,使用方法可参考使用PhoenixSQL Java API访问Lindorm。本文主要探讨一下Lindorm兼容Phoenix背后的故事。

2.Phoenix介绍

  Phoenix是由Salesforce的James Taylor领导开发的HBase插件,致力于“put the SQL back in NoSQL”,提升HBase的使用体验,同时赋予HBase OLTP和轻量级OLAP的能力。
  Phoenix在大数据体系中所处的位置如图所示:
图片
  通过Phoenix,用户可以像使用MySQL一样来使用HBase。基于标准的JDBC接口,更能无缝对接Mybatis、Spring等框架,由框架来自动生成SQL语句,进一步提高开发效率。

2.1、Phoenix的功能

2.1.1 丰富的语法

  Phoenix SQL语法遵循ANSI SQL-92标准,具备丰富的语法特性,支持group by/order by/join/subquery/function等功能,详细可参考Phoenix官网语法介绍。

  基于PhoenixSQL,可以轻松地表达复杂查询,例如一个订单表Join:

SELECT ItemName, O.OrderValue
FROM Items
JOIN
   (SELECT ItemID, sum(Price * Quantity) AS OrderValue
    FROM Orders
    WHERE CustomerID > 'C002'
    GROUP BY ItemID) AS O
ON Items.ItemID = O.ItemID;

2.1.2 便捷的操作

  Phoenix也提供了类似MySQL的Sqlline命令行和Squirrel图形界面工具,方便日常的调试和运维管理,让熟悉SQL数据库的用户使用起来也毫无违和感。

2.2 Phoenix的价值

2.2.1 Phoenix是HBase上最快的实时SQL引擎

  为什么说Phoenix是HBase上最快的实时SQL引擎?我们先回顾一下大数据SQL技术的发展历程:
  从goolge三架马车GFS、BigTable、MapReduce开始,大数据技术开始蓬勃发展。开源社区相继推出GFS的开源版本HDFS,BigTable的开源版本HBase,以及MapReduce的开源版本Hadoop。大数据SQL引擎就是在这些基础上不断发展:
  1. 最初的开源SQL实现是Apache Hive,采取SQL on Hadoop的思路,将SQL转化为MapReduce,中间结果写入HDFS。其优势是适合批量处理,但是大量的中间结果写入HDFS导致实时性比较差。
  2. 为了解决中间结果写HDFS速度慢的问题,出现了很多产品,比如Google Dremel(不开源), 其开源产品是Apache Drill, 另外还有Pivotal HAWQ(不开源),Cloudera Impala等。主要思路是将Hive的MapReduce替换成内存计算,同时也能提供插件对接其他存储引擎。
  3. UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室) 开源的Spark也是将Hive的MapReduce替换成内存计算,不过实现上有些许差异。其采用RDD将数据分成小的片断进行计算,处理了任务容错等问题。同时采用小批来模拟实时,实现了流批一体。
  4. Yandex ClickHouse面向分析领域,推出列式存储,其高压缩率和向量化引擎极大地降低了存储成本,提升了计算性能,主要面向用户行为分析等领域。
  5. eBay Kylin、Apache Druid通过预聚合,提前计算出结果,空间换时间,用于提升查询性能。其中Druid主要用于时序领域。
  6. Facebook Presto,主要解决异构数据的联邦查询问题,提供了丰富的connector,可对接上百种数据库产品,主要面向数据湖分析领域。
  7. Phoenix基于HBase,充分利用HBase的Coprocessor能力,实现了二级索引;通过MPP并行执行,实现了毫秒级响应的交互式体验;另外其无状态的QueryServer设计,避免了Presto等系统Cordinator导致的并发度低的问题。
  从上面可以看出,HBase上的SQL引擎可以有多种实现,比如Hive on HBase,Impala on HBase,Spark on HBase等,但是Hive on HBase无法进行谓词下推,Impala on HBase无法利用Coprocessor进行计算下推,因此性能相比Phoenix要差很多。下面是Phoenix官网的性能对比数据:
图片
图片
  另外Spark SQL需要往yarn提交job,启动时间较长,适合执行大运算,不适合高并发实时查询。Spark Streaming用于处理实时数据流,适合ETL场景,不适合实时查询。
  因此要在HBase上实现高并发实时SQL查询,Phoenix是首选。

2.2.2 Phoenix适合的场景

HBase凭借其高性能,低成本的优势,配合Phoenix,适合于海量数据的存储与分析场景:
图片

2.2.3 Phoenix在阿里云上的使用

Phoenix在阿里云上被广泛使用,据统计,阿里云上的标准版HBase用户一半以上都开通了Phoenix SQL服务。

2.2.4 Phoenix在阿里内部的使用案例

2.2.4.1 用户案例1: 移动数据分析 Quick A+

图片

2.2.4.2 用户案例2: 蚂蚁离线搜索系统

图片

3.Lindorm为什么要兼容Phoenix?

Phoenix凭借其丰富的功能,出色的性能以及完善的生态,有着广泛的群众基础。Lindorm团队凭借其在HBase领域多年的经验积累,有能力让Phoenix的性能更上一层楼,为用户提供更好的服务,同时也能完善Lindorm产品线,弥补增强版HBase无法开通SQL的缺憾。

4.Lindorm如何兼容Phoenix?

  总体架构如图所示,Lindorm采用了无状态的QueryServer设计,PhoenixSQL API与QueryServer之间通过Avatica协议来通信。通过兼容Avatica协议,实现了Phoenix接口的协议级兼容。
图片
  Avatica基于Jetty和ProtocolBuffer来实现,用HTTP协议实现了标准JDBC接口,支持.NET/Go/Java/Python/JavaScript等多语言访问。
图片
  轻量级的PhoenixSQL API,将计算下沉到QueryServer,降低了客户端的资源消耗。同时无状态的QueryServer使得计算层与存储层解耦,实现了计算层与存储层的独立扩缩容,能对外提供高并发的SQL读写能力。

5.Lindorm兼容Phoenix后有什么收益?

  如前文提到的,Lindorm兼容Phoenix完善了Lindorm产品线,对用户而言,最主要是提升了性能。通过将HBase内核升级为Lindorm内核,以及将二级索引实现替换为Lindorm原生二级索引,性能得到大幅提升。
  下图是LindormSQL二级索引与Phoenix二级索引性能对比:
图片

6.Lindorm的适用场景

  Lindorm适用于轻量级分析,提供实时的交互式查询体验。下面是与Spark的对比:

图片

  另外Lindorm具备多Zone实时同步和容灾功能,通过在备集群对接Spark进行离线分析,可以实现同一份数据的在离线一体化,省去用户将数据同步到其他系统的烦恼。

图片

7.小结

  Lindorm兼容Phoenix,降低了用户的使用门槛,提升了性能。对于存量Phoenix用户而言,可以平滑切换到Lindorm,成为云原生时代的一个更好选择。
  对于习惯关系模型的新用户,以前MySQL是最佳选择,因为其安装方便,使用简单。相比而言,使用NoSQL数据库部署复杂,众多组件的安装使得很多开发者望而却步。如今,随着云原生时代的到来,NoSQL数据库完全托管在云上,开箱即用,点击一个按钮就可以开始使用。使用Lindorm,也将获得近似MySQL一样的体验,并且在存储成本、扩展性、弹性等方面更有优势,十分适合互联网、物联网业务的大数据特点,可以作为新应用在数据库&存储选型时的首选。

体验PhoenixSQL请参考使用PhoenixSQL Java API访问Lindorm,如需免费咨询欢迎加入Lindorm技术交流群




标签:PhoenixSQL,Phoenix,数据库,Lindorm,SQL,HBase,兼容
来源: https://blog.51cto.com/15060465/2675790