使用者福利
阿裡雲最新釋出業界首款雲原生多模資料庫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請參考
,如需免費咨詢歡迎加入Lindorm技術交流群