億級數據庫毫秒級查詢?看完這一篇,海量數據賦能你也行

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/4c/4c903de03471765fc8fb215403dc5590.jpeg","alt":null,"title":null,"style":null,"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"近年來,隨着大數據分析技術的普及和物聯網產業的興起,越來越多的企業開始重視海量數據的收集和分析處理活動,希望從龐大的數據資料中挖掘出高價值的信息和洞見。而在數據規模快速膨脹的同時,企業對數據處理平臺的軟硬件基礎設施也提出了更高的要求,並在這一領域催生了很多高水平的前沿技術變革。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在這樣的趨勢下,由俄羅斯 Yandex 開發的一款名爲 Clickhouse 的數據庫產品就在衆多競爭者中脫穎而出,憑藉十億乃至百億行的數據規模下依舊具備秒級返回能力的卓越性能,贏得了全球衆多大廠的青睞。Clickhouse 究竟有怎樣的獨門絕技,如何做到如此強悍的性能表現,實踐中又是如何在主流雲平臺上部署和優化的?9 月 22 日,來自京東智聯云云產品研發部的架構師王向飛老師做客 InfoQ,介紹了 Clickhouse 數據庫在京東智聯雲的落地應用與優化改進經歷,爲想要深入瞭解 Clickhouse 的小夥伴們送上了一堂乾貨滿滿的技術分享課程。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本文總結自王向飛老師的在線公開課:《Clickhouse 在京東智聯雲的大規模應用和架構改良》。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/94/943b43a55bc19bbf1161c0a526a67d0d.png","alt":null,"title":"","style":[{"key":"width","value":"50%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據數據庫處理的業務數據量,以及處理數據的不同方式,人們把數據庫分爲 OLTP 和 OLAP 兩大類型。由俄羅斯 Yandex 搜索引擎公司開發並開源的 Clickhouse 數據庫,其初始定位就是 Yandex 內部的分析型數據庫,符合 OLAP 類型數據庫的實現特點。Clickhouse 的性能超過了很多流行的商業數據庫,已經得到了包括 CloudFlare、Spotify、阿里雲、騰訊雲、京東智聯雲、今日頭條、攜程等諸多頭部大廠的採用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"OLTP vs OLAP"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"常見的 Oracle、MySQL 等數據庫都屬於 OLTP 類型,也就是 On-Line Transaction Processing,聯機事務處理。OLTP 數據庫處理請求和數據時對延遲要求很高,並且要保證數據的完整性和一致性。此類數據庫是面向最終客戶的,需要具備 7x24 不間斷服務能力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"OLAP 的含義是聯機分析數據處理,這種數據庫需要存儲海量、但很少更新修改的數據,主要用於多維度歷史數據分析統計目的。出於這種需求,OLAP 數據庫需要確保足夠高的查詢效率,至少 90% 的請求要在很短的時間內返回。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一方面,OLAP 數據庫並不是直接面對最終客戶,而是更關注數據吞吐,要求海量數據儘快持久化,爲業務決策、戰略定位和分析、個性化推薦等任務提供分析統計能力,所以這類數據庫中的查詢一般都是較低頻的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Clickhouse 的關鍵特性:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"列式存儲基於 OLAP 數據庫的特點,Clickhouse 採用了基於列的數據存儲引擎。傳統的行式數據庫在存儲信息時,是在數據庫中按順序逐個記錄的。以用戶註冊信息爲例,行式數據庫會將每個用戶的姓名、職業、年齡等數據依次記錄下來。當業務需要查找註冊用戶的職業或年齡分佈時,數據庫需要打開所有存儲用戶註冊信息的文件,遍歷全部數據行,依次挑出所有職業和年齡信息進行彙總。使用這種方式,查詢遍歷的數據往往遠大於所需的數據大小,對 IO 能力會造成嚴重浪費。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"相比之下,列式存儲會將數據分爲多個屬性列,例如用戶註冊信息分爲職業、年齡等多個屬性,並按這些屬性列分爲多個文件分別存儲。這樣當查詢需要獲取其中某些屬性的數據時,只需查找對應文件即可完成,大大節約了 IO 需求。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"以一個包含 1 億條數據的測試表爲例,一個簡單的 count 查詢在 MySQL 上需要兩分多鐘,而在列式存儲的 Clickhouse 數據庫上僅用不足 1 秒就返回了結果。那麼,Clickhouse 具體都使用了哪些技術來實現如此高的效率提升呢?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/95/950dd104bd7f87f21ac111579129f93d.png","alt":null,"title":"","style":[{"key":"width","value":"50%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"B+Tree vs MergeTree"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在深入研究 Clickhouse 之前,我們首先以傳統的 MySQL InnoDB 的存儲格式來做對比。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/0f/0f418cda6b24c5b98e29a9f85c034084.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從 InnoDB 的邏輯結構圖可以看到,在 InnoDB 中所有數據會被放在表空間內。表空間可以看作是 InnoDB 的邏輯最高層,由多個段組成,段又分爲數據段、索引段。數據生成時按順序寫入數據段,隨着數據記錄的增多,InnoDB 會將一些主鍵值放到索引段內以實現快速定位。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"隨着數據量不斷增多,數據庫形成了名爲 B+Tree 的樹狀結構。這個樹有層級結構,會橫向生長,其查詢的複雜度取決於樹的高度。B+Tree 的數據節點一般存儲主鍵值,根據主鍵查找時可以通過葉子節點大概定位數據頁,之後直接讀取數據頁即可。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/7b/7bcf63090c9ff7427d7f05f8e934d197.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"而 Clickhouse 的數據架構類似關係型數據庫,其中包括瞭解析器,主要負責將 SQL 語句通過詞法分析、語法分析等轉換成計算機可讀的抽象語法樹。另外還有優化器,邏輯優化負責優化抽象語法樹的邏輯,比如簡化一些長難運算表達式,做一些語義優化等。物理優化則負責生成可以直接執行的物理執行計劃,指導數據庫管理系統如何獲取數據表、如何進行數據 join、排序等等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Clickhouse 的物理執行計劃可認爲是一個數據流圖,也就是數據的有向無環圖。在這個圖裏,數據從一個管道傳到另一個管道,也就是從一個操作符傳到另一個操作符。查詢執行器是用來執行計劃的引擎,它會從存儲引擎中取出數據,並返回給客戶端。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/99/99e4f801fff424e9d22fa05a63baeb3e.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如上圖,Clickhouse 在啓動時加載配置信息,然後根據不同的解析協議監聽不同的服務端口。客戶端發送來 SQL 請求後,首先它會對 SQL 進行語法解析,然後生成抽象語法樹,並進行一系列的邏輯優化、物理優化,生成執行計劃。接下來由不同的執行器根據 SQL 請求來將執行計劃分發到本地或遠端的存儲引擎,從存儲引擎中取出數據。數據經過一系列的計算加工後返回給客戶端,客戶端就可以輸出緩衝區讀取查詢結果。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"MergeTree 存儲過程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/86/8627b9b9bf0a86c53758f9b56cbe9805.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本例中,我們根據出生日期做一個數據分區,主鍵選用用戶的名字,並設置 SETTINGS index_granularity=3。表建成後插入 10 條記錄,分爲 2001 年 3 月和 2001 年 2 月兩個數據區間。表建完、數據寫完以後,Clickhouse 默認會在數據文件存放路徑下建一個相應的表名:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/40/40619c2becd7c61dd647b90fe7db877c.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這裏可以看到,10 條數據分了兩個文件夾來存儲。文件夾命名時,其第一部分是分區鍵,也就是出生日期;1_1(2_2)代表每個數據分區內數據塊最小塊和最大塊的編號。最後的數字 0 代表合併層級。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/6a/6aa94c981d0960a63343cd84e7235162.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"上圖是 MergeTree 中對 Data part 進行元數據管理的結構體。其中,partition id 代表數據所處的分區 id;min block、max block 代表數據寫入的版本信息——用戶每次批量寫的數據都會生成一個 Data part,同一批寫入的數據會被標記爲唯一的 block number。MergeTree 存儲引擎後臺會定期通過異步任務合併數據,且只會合併位於同一個數據分區內的數據,還要求 min block 和 max block 數據區間必須是連續非重合的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第四個 level 字段默認新插入的數據都是 0,之後會隨着合併次數的增加在原來的基礎上依次增大。下面的 mutation 字段在數據更正時使用。如果要進行數據的更正操作,Clickhouse 會默認給 mutation 字段進行標記和更新。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/97/97c5c679939932986fd8723a27e6c5b1.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"雖然測試數據只有一張表 10 條數據,但它會在磁盤目錄上生成大量文件。具體來說,Clickhouse 默認每一個列生成一個文件,默認數據文件放在 bin 文件裏。每一個數據分析目錄下生成一個 count 文件,記錄分區裏有多少行數據。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/15/1547926d1a182eb66289ee28da7f61c9.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"本例中,建表時設置的 SETTINGS index_granularity 設爲 3。插完數據以後觀察主鍵索引,可以發現它會把主鍵以每 3 條記錄爲一個區間,將主鍵信息存儲在 primary.idx 裏。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c4/c404203a4b39e878bdf76234a1c778cd.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"結合前文例子來看數據全景。假設下面綠顏色的就是要寫入的一批數據,存放用戶的名字;假設每個名字佔用 4 個字節,可以看到綠顏色上邊有一個 granule,寫的是 8192。指定 granule 是 8192 之後,數據在寫入時會放到一個具有緩衝區的 OutPort 流中,按照一個 granule 一個 granule 來寫;寫完第一個 granule,當發現這個緩衝區內數據大小超過 64KB,這時就會把數據進行壓縮落盤,放在下邊的粉紅色文件塊裏。落數據塊時會先寫一個文件頭,文件頭由三部分組成,如上圖所示。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第二段 8192 的數據,壓縮完之後數據塊可能比較長一些;可以發現,數據每次寫入就會產生兩個文件。一個是 bin 文件,也就是壓縮後的數據文件。另一個文件就是主鍵 index 文件。但這樣以來,在數據查詢時不知道數據究竟在數據文件裏的哪一塊,不知道該怎麼拆分 bin 文件,如果把整個 bin 文件都加載內存以後掃描,效率是會很差的。爲了解決這個尷尬的問題 Clickhouse 引入了 mrk 文件。寫數據文件的時候會把 bin 文件頭信息寫到 mrk 文件裏。比如說第一塊數據寫完之後,會把起始位置、解壓縮後的位置、解壓縮前的位置放在 mrk 這個文件塊裏, 作爲一行記錄。查詢時直接根據主鍵 index 記錄的偏移量找到對應的 mrk 記錄的某段數據的起始位置,之後讀取數據即可。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"MergeTree 也有一些異步任務處理,主要有三部分:首先是定期把一些有問題的、提交失敗的、或寫失敗的數據文件清理掉;然後是定期把一些比較瑣碎的插入語句生成的小文件塊合併爲大的文件塊;還有偶爾有一些更正,例如數據的更新刪除生成的臨時文件,MergeTree 也會把對應的數據文件彙總成一個比較大的 Part。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/e0/e00fcec443df2d60ec6908acf92607e4.png","alt":null,"title":"","style":[{"key":"width","value":"50%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"智聯雲選擇 K8s 部署的原因"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"京東智聯雲基於現有的雲平臺部署 Clickhouse 時,是基於 K8s 團隊提供的強大運維調度平臺來實現的。之所以選擇基於 K8s 來部署有幾方面原因:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,K8s 可以屏蔽底層的環境差異,使用戶無需再具體關注主機網絡、存儲、API 接口等變化,只需將精力集中到數據庫管理開發任務上。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其次,構建這個 JCHDB 平臺並不只是爲京東智聯雲內部使用。這個平臺構建完成後,不僅可以在公有云上給客戶提供服務,並且在私有化部署或者跨雲部署時,都可以完全不用對架構做任何修改直接部署。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"智聯雲部署 Clickhouse 的流程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/c3/c3a3018e77523f772ad2f2fa1af61717.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個 operator 開發部署完畢,安裝到 K8s 以後,K8s 就有了管理調度 Clickhouse 狀態的能力。在它的外部會藉助 helm 系統,將提前定義好的一些表單發送給 K8s,由 K8s 來根據表單裏定義的這些參數來創建需要的實例。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"除了創建最基礎的 Clickhouse,如果需要有複製關係引擎,它也會一同創建 Zookeeper;同時爲了豐富監控能力,便於 DBA 進行服務器的運維監控,它還會創建一個 Promethus,還有可視化的 Grafana。這樣它就可以直接在 VPC 裏通過 Grafana 來監控數據庫的運維狀態。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個服務還會創建一個綁定 headless service ip 地址的域名,用戶可以通過這個數據庫域名直接連到這一套 Clickhouse 系統上。由上圖右可見,這個 Pod 的底層存儲使用了京東的雲硬盤,它會在建 Pod 時申請一個 PVC 控制器,PVC 控制器會綁定京東雲硬盤。這樣就形成了計算與存儲分離的架構,可以進一步提升計算能力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"京東智聯雲目前在高性能、高可用和可擴展層面上都有自己的特色:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高性能方面,智聯雲採用最新一代的雲主機,CPU 最大可以支持 64 核心,單個 Pod 最大可以擴展到 512G 內存。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高可用方面,智聯雲藉助 K8s 調度管理平臺,發現有 Pod 不可用時 K8s 會自動將這個 Pod 剔除。同時平臺會新建一個 Pod,基於 StatefulSet 機制將被刪除的 Pod 所綁定的雲盤掛到新 Pod 上。這樣如果有實例由於某些硬件原因出現問題,可以在分或秒級完成實例替換。"}]}]},{"type":"listitem","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可擴展方面,智聯雲基於雲主機、雲硬盤的一些基礎組件,提供了一些靈活的擴展接口,可以直接在原地擴容。智聯雲支持熱擴容,可以在不影響用戶使用的前提下,在分鐘級甚至秒級就可以完成 CPU 數量、內存容量或磁盤空間的擴容。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/1b/1b15028bec5cdc9a65d75d338ecd4d57.jpeg","alt":null,"title":"","style":[{"key":"width","value":"100%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"京東智聯雲還提供了完善的監控體系,可以幫助 DBA 更好地觀察的數據庫的運行狀況。平臺不但提供了 service 級別的數據庫監控,同時還能把所有 Pod 所使用的磁盤空間、CPU、內存都展示給用戶。有了這些信息,用戶可以更加直觀地觀察到每一個 Pod 的壓力分佈情況,進而方便靈活地調整數據壓力,避免某個 Pod 出現數據瓶頸。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據這些監控的目標,用戶可以靈活地定義告警信息。智聯雲支持多維度數據告警,可以通過郵件、短信、微信等形式告警。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/00/00f8b461fd99885892e291b7ed6f0cad.png","alt":null,"title":"","style":[{"key":"width","value":"50%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Clickhouse 自身具備強大的數據處理能力,還能很好地兼容 SQL 語句。但在實際設計和使用過程中,不能僅僅把它當成一個傳統關係型數據庫的增強替代品,這樣可能會限制 Clickhouse 的潛力發揮。企業需要對傳統的數據倉庫、設計理念,以及數據上下游的流轉方式做出改進,發揮想象力和創造力,更好地利用 Clickhouse 的列式存儲、並行計算等數據能力,爲數據業務創造更大價值。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"京東智聯雲的 Clickhouse 目前正在產品公測,歡迎大家使用。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"點擊【"},{"type":"link","attrs":{"href":"https://developer.jdcloud.com/article/1235?mid=15&utm_source=PMM_infoq&utm_medium=NAutm_campaign=ReadMoreutm_term=NA","title":""},"content":[{"type":"text","text":"閱讀原文"}]},{"type":"text","text":"】獲取課程視頻"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章