開發與維運

深入探索Lindorm兼容PhoenixSQL背後的故事

用戶福利

阿里雲最新發布業界首款雲原生多模數據庫Lindorm,新用戶可享9.9元/3個月優惠,技術交流釘釘群:35977898,更多內容請參考鏈接

1、背景

  作為面向大數據場景的半結構化、結構化存儲系統,Lindorm已經在阿里發展了近十年,並始終保持著快速的能力更新和技術升級,是目前支撐阿里經濟體業務的核心數據庫產品之一。其在功能、性能、穩定性等方面的諸多創新曆經了長時間的大規模實踐考驗,被全面應用於阿里集團、螞蟻集團、菜鳥、大文娛等各個業務板塊,成為目前為止公司內部數據體量最大、覆蓋業務最廣的數據庫產品。隨著雲原生、5G/IoT時代的到來,客戶數據規模和應用需求不斷增長,為了更好地服務客戶,阿里雲 NoSQL 數據庫團隊融合原Lindorm和TSDB過去的技術積累,發佈了雲原生多模數據庫 Lindorm,集成寬表引擎、時序引擎、搜索引擎、文件引擎四種模型,支持多類型、任意規模數據的低成本存儲處理和自適應彈性伸縮,服務於互聯網、IoT、車聯網、廣告、社交、監控、遊戲、風控等場景,讓企業數據『存得起、看得見』。 Lindorm 雲原生多模數據庫整體架構及背後的思考可參考《存的起,看得見—雲原生多模數據庫Lindorm技術解析》。
undefined
  在阿里雲上,託管了標準版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在大數據體系中所處的位置如圖所示:
undefined
  通過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官網的性能對比數據:
undefined
undefined
  另外Spark SQL需要往yarn提交job,啟動時間較長,適合執行大運算,不適合高併發實時查詢。Spark Streaming用於處理實時數據流,適合ETL場景,不適合實時查詢。
  因此要在HBase上實現高併發實時SQL查詢,Phoenix是首選。

2.2.2 Phoenix適合的場景

HBase憑藉其高性能,低成本的優勢,配合Phoenix,適合於海量數據的存儲與分析場景:
undefined

2.2.3 Phoenix在阿里雲上的使用

Phoenix在阿里雲上被廣泛使用,據統計,阿里雲上的標準版HBase用戶一半以上都開通了Phoenix SQL服務。

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

2.2.4.1 用戶案例1: 移動數據分析 Quick A+

undefined

2.2.4.2 用戶案例2: 螞蟻離線搜索系統

undefined

3、Lindorm為什麼要兼容Phoenix?

Phoenix憑藉其豐富的功能,出色的性能以及完善的生態,有著廣泛的群眾基礎。Lindorm團隊憑藉其在HBase領域多年的經驗積累,有能力讓Phoenix的性能更上一層樓,為用戶提供更好的服務,同時也能完善Lindorm產品線,彌補增強版HBase無法開通SQL的缺憾。

4、Lindorm如何兼容Phoenix?

  總體架構如圖所示,Lindorm採用了無狀態的QueryServer設計,PhoenixSQL API與QueryServer之間通過Avatica協議來通信。通過兼容Avatica協議,實現了Phoenix接口的協議級兼容。
undefined
  Avatica基於Jetty和ProtocolBuffer來實現,用HTTP協議實現了標準JDBC接口,支持.NET/Go/Java/Python/JavaScript等多語言訪問。
undefined
  輕量級的PhoenixSQL API,將計算下沉到QueryServer,降低了客戶端的資源消耗。同時無狀態的QueryServer使得計算層與存儲層解耦,實現了計算層與存儲層的獨立擴縮容,能對外提供高併發的SQL讀寫能力。

5、Lindorm兼容Phoenix後有什麼收益?

  如前文提到的,Lindorm兼容Phoenix完善了Lindorm產品線,對用戶而言,最主要是提升了性能。通過將HBase內核升級為Lindorm內核,以及將二級索引實現替換為Lindorm原生二級索引,性能得到大幅提升。
  下圖是LindormSQL二級索引與Phoenix二級索引性能對比:
undefined

6、Lindorm的適用場景

  Lindorm適用於輕量級分析,提供實時的交互式查詢體驗。下面是與Spark的對比:

undefined

  另外Lindorm具備多Zone實時同步和容災功能,通過在備集群對接Spark進行離線分析,可以實現同一份數據的在離線一體化,省去用戶將數據同步到其他系統的煩惱。

undefined

7、小結

  Lindorm兼容Phoenix,降低了用戶的使用門檻,提升了性能。對於存量Phoenix用戶而言,可以平滑切換到Lindorm,成為雲原生時代的一個更好選擇。
  對於習慣關係模型的新用戶,以前MySQL是最佳選擇,因為其安裝方便,使用簡單。相比而言,使用NoSQL數據庫部署複雜,眾多組件的安裝使得很多開發者望而卻步。如今,隨著雲原生時代的到來,NoSQL數據庫完全託管在雲上,開箱即用,點擊一個按鈕就可以開始使用。使用Lindorm,也將獲得近似MySQL一樣的體驗,並且在存儲成本、擴展性、彈性等方面更有優勢,十分適合互聯網、物聯網業務的大數據特點,可以作為新應用在數據庫&存儲選型時的首選。

體驗PhoenixSQL請參考使用PhoenixSQL Java API訪問Lindorm,如需免費諮詢歡迎加入Lindorm技術交流群

9361c05cfdb8414788b7d379ca8afee9.png

Leave a Reply

Your email address will not be published. Required fields are marked *