用戶福利
數據庫
阿里雲最新發布業界首款雲原生多模數據庫Lindorm,新用戶可享9.9元/3個月優惠,技術交流釘釘羣:35977898,更多內容請參考連接架構
做爲面向大數據場景的半結構化、結構化存儲系統,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背後的故事。併發
Phoenix是由Salesforce的James Taylor領導開發的HBase插件,致力於「put the SQL back in NoSQL」,提高HBase的使用體驗,同時賦予HBase OLTP和輕量級OLAP的能力。
Phoenix在大數據體系中所處的位置如圖所示:
經過Phoenix,用戶能夠像使用MySQL同樣來使用HBase。基於標準的JDBC接口,更能無縫對接Mybatis、Spring等框架,由框架來自動生成SQL語句,進一步提升開發效率。app
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;
Phoenix也提供了相似MySQL的Sqlline命令行和Squirrel圖形界面工具,方便平常的調試和運維管理,讓熟悉SQL數據庫的用戶使用起來也毫無違和感。ide
爲何說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是首選。高併發
HBase憑藉其高性能,低成本的優點,配合Phoenix,適合於海量數據的存儲與分析場景:工具
Phoenix在阿里雲上被普遍使用,據統計,阿里雲上的標準版HBase用戶一半以上都開通了Phoenix SQL服務。oop
Phoenix憑藉其豐富的功能,出色的性能以及完善的生態,有着普遍的羣衆基礎。Lindorm團隊憑藉其在HBase領域多年的經驗積累,有能力讓Phoenix的性能更上一層樓,爲用戶提供更好的服務,同時也能完善Lindorm產品線,彌補加強版HBase沒法開通SQL的缺憾。
整體架構如圖所示,Lindorm採用了無狀態的QueryServer設計,PhoenixSQL API與QueryServer之間經過Avatica協議來通訊。經過兼容Avatica協議,實現了Phoenix接口的協議級兼容。
Avatica基於Jetty和ProtocolBuffer來實現,用HTTP協議實現了標準JDBC接口,支持.NET/Go/Java/Python/JavaScript等多語言訪問。
輕量級的PhoenixSQL API,將計算下沉到QueryServer,下降了客戶端的資源消耗。同時無狀態的QueryServer使得計算層與存儲層解耦,實現了計算層與存儲層的獨立擴縮容,能對外提供高併發的SQL讀寫能力。
如前文提到的,Lindorm兼容Phoenix完善了Lindorm產品線,對用戶而言,最主要是提高了性能。經過將HBase內核升級爲Lindorm內核,以及將二級索引實現替換爲Lindorm原生二級索引,性能獲得大幅提高。
下圖是LindormSQL二級索引與Phoenix二級索引性能對比:
Lindorm適用於輕量級分析,提供實時的交互式查詢體驗。下面是與Spark的對比:
另外Lindorm具有多Zone實時同步和容災功能,經過在備集羣對接Spark進行離線分析,能夠實現同一份數據的在離線一體化,省去用戶將數據同步到其餘系統的煩惱。
Lindorm兼容Phoenix,下降了用戶的使用門檻,提高了性能。對於存量Phoenix用戶而言,能夠平滑切換到Lindorm,成爲雲原生時代的一個更好選擇。
對於習慣關係模型的新用戶,之前MySQL是最佳選擇,由於其安裝方便,使用簡單。相比而言,使用NoSQL數據庫部署複雜,衆多組件的安裝使得不少開發者望而卻步。現在,隨着雲原生時代的到來,NoSQL數據庫徹底託管在雲上,開箱即用,點擊一個按鈕就能夠開始使用。使用Lindorm,也將得到近似MySQL同樣的體驗,而且在存儲成本、擴展性、彈性等方面更有優點,十分適合互聯網、物聯網業務的大數據特色,能夠做爲新應用在數據庫&存儲選型時的首選。
體驗PhoenixSQL請參考使用PhoenixSQL Java API訪問Lindorm,如需免費諮詢歡迎加入Lindorm技術交流羣