SLS提供對海量日志資料進行聚合計算的 分析能力(SQL) ,日志資料一旦寫入,使用者即可開箱即用地使用SQL進行計算分析,所見即所得。
一、痛點
使用者在使用SLS查詢分析時,當資料規模(100+億行記錄)越來越大,查詢時間範圍(30+天)越來越長時,可能會遇到“查詢結果不精确”或者直接“執行逾時”的尴尬;或者在中小資料規模(1~10億行記錄)下,希望擁有更高性能的分析能力,查詢延時更短,為了解決使用者的這類痛點和需求,我們推出“SQL獨享版”功能,為SLS分析提供加速能力。
二、實作原理
圖1是典型的分布式計算架構,存儲層負責資料的讀寫,計算層負責計算和分析。
SLS中将存儲層抽象為
分區(Shard),同時将計算層抽象為SQL,對使用者提供免費的計算資源,以實作查詢分析能力。
針對上述痛點,想要實作SLS的分析加速,從本質上來說,是要提升計算層的計算能力。在實踐和使用過程中,也産生了如下幾種實作方案,我們分享在此,并與SQL獨享版做對比,希望讀者更清楚地了解SQL獨享版的實作原理。
圖1
1、擴充分區(Shard)實作一定的計算能力擴充
當分析能力不夠的時候,我們可以通過手動分裂Shard來擴充一定的計算能力,如圖2所示
圖2
然而這種方式并非完美,存在諸多不足:
- 首先,Shard分裂對曆史資料無法失效,隻對新寫入資料生效,當使用者對曆史存量資料進行統計分析,通常情況下使用者往往無法做到提前的準确規劃和部署
- 其次,活躍Shard會産生額外的租用費用(詳見 《為什麼會産生活躍Shard租用費用?》 ),使用者為了少量的超大規模的查詢分析而長期持有大量活躍shard,對成本造成一定的浪費
- 此外,Shard分裂對計算能力的擴充有限,其本質上是擴充存儲層的能力,計算層由于是多租戶分時租用,為了保障多租戶間的隔離性,會對單次查詢的計算資源做限制(如查詢并發數、掃描資料量等)
- 最後,Shard分裂、合并操作均需要使用者手動處理,且僅對新資料生效,很難滿足使用者彈性多變的查詢分析需求
2、大查詢分割成多個小查詢,進行二次聚合
針對大規模資料無法計算精确的問題,很多有經驗的SLS使用者使用了這種方式:既然一次查詢計算不了,那就将單個大查詢切分成多個小查詢,然後再進行二次聚合,最終得出需要的分析結果。
但是這種方式弊端也很明顯:
- 上層有維護和開發成本,需要儲存小查詢的計算結果,并進行二次聚合
- 次元爆炸,業務的分析需求往往是複雜多變的,每當分析次元變化,都可能帶來二次聚合的變更成本
- 資料規模本身非常大,切分粒度已經控制得很小了,但是計算仍然比較吃力
3、SQL獨享版,彈性擴充計算能力
上述兩種方式均不完美,為了真正解決使用者對計算資源的需求,我們提供了“SQL獨享版”功能,當使用者需要大規模計算分析能力的時候,為使用者提供彈性的獨享計算資源,實作真正的彈性擴充計算能力、按需使用。
圖3為SQL獨享版的實作原理,當使用者在查詢時開啟SQL獨享版後,SLS會根據本次查詢的實際計算需求,合理排程獨享資源參與計算,加速整個查詢分析過程。
圖3
相比以上兩種方式,SQL獨享版實作了真正的計算能力的彈性擴充,且有以下幾點優勢:
- 計算資源彈性擴充,按需使用
- 計算與存儲(Shard)無強制綁定,無需使用者提前規劃和運維管理
- 突破免費資源的分時租用限制,享受獨享資源
- 免除額外的開發和運維成本,不管什麼資料規模(從幾萬-千億級别),一條SQL幫您搞定分析,無需再做上層二次聚合
三、普通SQL和SQL獨享版的特性對比
下表列舉出目前普通SQL和SQL獨享版在各個次元上的對比:
普通SQL | SQL獨享版 | |
并發查詢數 | 單個Project支援的最大分析操作并發數為15個 | 單個Project支援的最大分析操作并發數為150個 |
掃描資料量 | 單個Shard單次僅支援分析1GB資料 | 單次分析最大支援掃描2000億行資料 |
計算資源 | 免費資源,分時租用有使用限制 與分區Shard數有一定的配比關系 | 獨享資源,資源上限由使用者自定義 與分區Shard數無綁定關系 |
費用 | 免費 | 目前公測免費 後續計劃根據實際使用的CPU時間付費,更多資訊,請參見計費項 |
更多增強特性,敬請期待。。 |
四、什麼場景下推薦使用SQL獨享版
我們推薦在遇到如下場景時,使用SQL獨享版:
- 超大資料規模的計算分析(如SLS報“計算結果不精确”)
- 曆史周期長且資料規模大的計算分析(如SLS報“execution timeout”)
- burst高并發查詢(如定時告警、定時排程等,可能一次性同時觸發多個SQL請求,如SLS報“user can only run 15 query concurrently”)
五、使用實踐
為了讓讀者更真切地體會SQL獨享版,我們提供了一個1000+億行Nginx通路日志的
模拟環境,供SLS使用者免費線上體驗,享受SQL增強帶來的極緻加速感。
接下來,我們分别在不同資料規模(1000+億、10+億、1+億)下示範SQL獨享版的使用實踐
我們使用上述模拟環境,選擇查詢時間段為3天,對1000億行日志資料進行計算分析,使用SQL測試用例如下:
* | select sum(request_length), avg(request_time), avg(upstream_response_time)
1000+億資料規模下的計算分析
使用普通查詢
使用SQL獨享版
使用SQL獨享版非常簡單,隻需要在SLS控制台查詢頁面右側,點亮“SQL增強”按鈕即可。
如果您是開發者,使用SDK或者API調用,也可以開啟SQL獨享版,詳情請參考
GetLogs的powerSql參數。
下表是普通SQL和SQL獨享版,在1000+億資料規模、同樣SQL下的執行表現對比:
提升效果 | |||
日志總條數 | 100,000,863,644 | ||
查詢狀态 | 查詢結果不精确 | 結果精确 | |
掃描行數 | 9,084,644,562 | 10X | |
查詢時間 | 3,054ms | 7,258ms | 10倍資料掃描量,僅增加了1.38倍延遲 |
消耗CPU時間 | 392.759s | 9,459.867s | 23X |
可以看到,開啟SQL獨享版後,能夠在7.3s内掃描1000+億行資料,并完成精确計算。相比普通SQL,計算結果精确、掃描行數提升10倍、運作CPU時間提升23倍,延時僅增加了1.38倍。
10+億資料規模下的計算分析
下表是普通SQL和SQL獨享版,在10+億資料規模、同樣SQL下的執行表現對比:
1,006,371,097 | |||
2,176ms | 1,692ms | 延時縮短了22% | |
60.18s | 93.517s | 提升了55% |
1+億資料規模下的計算分析
下表是普通SQL和SQL獨享版,在1+億資料規模、同樣SQL下的執行表現對比:
123,306,893 | |||
1,036ms | 831ms | 延時縮短了20% | |
7.183s | 11.021s | 提升53% |
結合上面三種不同資料規模下的使用實踐,可以看到,在超大資料規模(1000+億)下,SQL獨享版通過提供額外的獨享計算資源,可以完成普通SQL無法完成的精确計算任務,并大幅提升了計算效率;而在10+億和1+億資料規模下,普通SQL和SQL獨享版均可完成精确計算,但是SQL獨享版可以投入更多CPU資源(約50~55%)加速計算,使計算延時縮短20%左右。
控制和管理SQL獨享資源使用上限
在提供了SLS分析加速能力的同時,我們還貼心地為使用者提供了獨享資源使用上限(SQL獨享執行個體CU數)的設定,預設值1000,該值表示一次查詢可并發運作的任務數,它有效控制了計算核時的資源,避免意外造成的計算資源使用過量,産生不必要的費用。使用者可以前往目标Project的概覽頁面中進行自定義的配置。
進一步參考
- SQL獨享執行個體介紹: https://help.aliyun.com/document_detail/223777.htm
- SLS SQL分析概述: https://help.aliyun.com/document_detail/53608.html
- SLS SQL:融合ElasticSearch和ClickHouse的極速查詢分析能力: https://zhuanlan.zhihu.com/p/391671953
- 1000+億日志資料模拟器(免費體驗極速性能): 點選進入
歡迎釘釘掃群加入阿裡雲-日志服務(SLS)技術交流, 獲得第一手資料與支援
更多SLS的系列直播與教育訓練視訊會同步到B站,SLS的相關文章會同步到微信公衆号與知乎敬請留意