TiDB 有一些功能和其它功能不一樣,這類功能可以作為構建其它功能的基礎,組合出新的特性,這類功能稱之為:Meta Feature。
《關于基礎軟件產(chǎn)品價值的思考方式》 - 黃東旭
對一款分布式數(shù)據(jù)庫而言,數(shù)據(jù)如何分散存儲在不同節(jié)點永遠是個有趣的話題。你是否有時會期望能具體控制數(shù)據(jù)具體存儲在哪些節(jié)點?
·當你在同一個 TiDB 集群上支持多套業(yè)務以降低成本,但又擔心混合存儲后業(yè)務壓力互相干擾
·當你希望增加重要數(shù)據(jù)的副本數(shù),提升關鍵業(yè)務的可用性和數(shù)據(jù)可靠性
·當你希望把熱點數(shù)據(jù)的 leader 放到高性能的 TiKV 實例上,提升 OLTP 性能
·當你希望實現(xiàn)熱冷數(shù)據(jù)分離(熱數(shù)據(jù)存放在高性能介質(zhì),冷數(shù)據(jù)反之),降低存儲成本
·當你希望在多中心部署下,將數(shù)據(jù)按照實際地域歸屬和數(shù)據(jù)中心位置來存放,以減少遠距離訪問和傳輸
你也許已經(jīng)知道,TiDB 使用 Placement Driver 組件來控制副本的調(diào)度,它擁有基于熱點,存儲容量等多種調(diào)度策略。但這些邏輯以往對于用戶都是近似不可控的存在,你無法控制數(shù)據(jù)具體如何放置。而這種控制能力就是 TiDB 6.0 的 Placement Rules in SQL 數(shù)據(jù)放置框架希望賦予用戶的。
TiDB 6.0 版本正式提供了基于 SQL 接口的數(shù)據(jù)放置框架(Placement Rules in SQL)。它支持針對任意數(shù)據(jù)提供副本數(shù)、角色類型、放置位置等維度的靈活調(diào)度管理能力,這使得在多業(yè)務共享集群、跨 AZ 部署等場景下,TiDB 得以提供更靈活的數(shù)據(jù)管理能力,滿足多樣的業(yè)務訴求。
讓我們來看幾個具體的例子。
跨地域部署降低延遲
想象下你是一個服務供應商,業(yè)務遍布全球,早期架構為中心化設計,隨著業(yè)務跨地域開展后,業(yè)務拆分全球化部署,中心數(shù)據(jù)訪問延遲高,跨地域流量成本高。隨著業(yè)務演進,你著手推動數(shù)據(jù)跨地域部署,以貼近本地業(yè)務。你的數(shù)據(jù)架構有兩種形式,本地管理的區(qū)域數(shù)據(jù)和全局訪問的全局配置數(shù)據(jù)。本地數(shù)據(jù)更新頻次高,數(shù)據(jù)量大,但是幾乎沒有跨地域訪問的情況。全局配置數(shù)據(jù),數(shù)據(jù)量少,更新頻率低,但是全局唯一,需要支持任意地區(qū)的訪問,傳統(tǒng)的單機數(shù)據(jù)庫或單地區(qū)部署數(shù)據(jù)庫無法滿足以上業(yè)務訴求。
以下圖為例,用戶將 TiDB 以跨中心的方式部署在三個數(shù)據(jù)中心,分別覆蓋華北,華東和華南的用戶群,讓不同區(qū)域的用戶可以就近訪問本地數(shù)據(jù)。在以往的版本中,用戶的確可以將以跨中心的方式部署 TiDB 集群,但無法將歸屬不同用戶群的數(shù)據(jù)存放在不同的數(shù)據(jù)中心,只能按照熱點和數(shù)據(jù)量均勻分布的邏輯將數(shù)據(jù)分散在不同中心。在高頻訪問的情況下,用戶訪問很可能會頻繁跨越地域承受較高的延遲。
通過 Placement Rules In SQL 能力,你設置放置策略將區(qū)域數(shù)據(jù)的所有副本指定到特定區(qū)域的特定機房內(nèi),所有的數(shù)據(jù)存儲,管理在本地區(qū)內(nèi)完成,減少了數(shù)據(jù)跨地區(qū)復制延遲,降低流量成本。你需要做的僅僅是,為不同數(shù)據(jù)中心的節(jié)點打上標簽,并創(chuàng)建對應的放置規(guī)則:CREATE PLACEMENT POLICY 'east_cn' CONSTRAINTS = "[+region=east_cn]"; CREATE PLACEMENT POLICY 'north_cn' CONSTRAINTS = "[+region=north_cn]";
并通過 SQL 語句控制數(shù)據(jù)的放置,這里以不同城市分區(qū)為例: ALTER TABLE orders PARTITION p_hangzhou PLACEMENT POLICY = 'east_cn'; ALTER TABLE orders PARTITION p_beijing PLACEMENT POLICY = 'north_cn';
這樣,歸屬不同城市的訂單數(shù)據(jù)副本將會被「固定」在對應的數(shù)據(jù)中心。
業(yè)務隔離
假設你負責大型互聯(lián)網(wǎng)企業(yè)的數(shù)據(jù)平臺,內(nèi)部業(yè)務有 2000 多種,相關業(yè)務采用一套或多套 MySQL 來管理,但是因為業(yè)務數(shù)量太多,MySQL 實例數(shù)接近 1000 個,日常的監(jiān)控、診斷、版本升級、安全防護等工作對運維團隊造成了巨大的壓力,且隨著業(yè)務規(guī)模越來越大,運維成本逐年上升。你希望通過減少數(shù)據(jù)庫實例數(shù)量來減少運維管理成本,但是業(yè)務間的數(shù)據(jù)隔離、訪問安全、數(shù)據(jù)調(diào)度的靈活性和管理成本成為你面臨的嚴峻挑戰(zhàn)。
借助 TiDB 6.0,通過數(shù)據(jù)放置規(guī)則的配置,你可以很容易靈活的集群共享規(guī)則,例如業(yè)務 A,B 共享資源,降低存儲和管理成本,而業(yè)務 C 和 D 獨占資源,提供最高的隔離性。由于多個業(yè)務共享一套 TiDB 集群,升級、打補丁、備份計劃、擴縮容等日常運維管理頻率可以大幅縮減,降低管理負擔提升效率。
CREATE PLACEMENT POLICY 'shared_nodes' CONSTRAINTS = "[+region=shared_nodes]"; CREATE PLACEMENT POLICY 'business_c' CONSTRAINTS = "[+region=business_c]"; CREATE PLACEMENT POLICY 'business_d' CONSTRAINTS = "[+region=business_d]"; ALTER DATABASE a POLICY=shared_nodes; ALTER DATABASE b POLICY=shared_nodes; ALTER DATABASE c POLICY=business_c; ALTER DATABASE d POLICY=business_d;
基于 SQL 接口的數(shù)據(jù)放置規(guī)則,你僅僅使用少數(shù) TiDB 集群管理大量的 MySQL 實例,不同業(yè)務的數(shù)據(jù)放置到不同的 DB,并通過放置規(guī)則管理將不同 DB 下的數(shù)據(jù)調(diào)度到不同的硬件節(jié)點上,實現(xiàn)業(yè)務間數(shù)據(jù)的物理資源隔離,避免因資源爭搶,硬件故障等問題造成的相互干擾。通過賬號權限管理避免跨業(yè)務數(shù)據(jù)訪問,提升數(shù)據(jù)質(zhì)量和數(shù)據(jù)安全。在這種部署方式下,集群數(shù)量大大減小,原本的升級,監(jiān)控告警設置等日常運維工作將大幅縮減,在資源隔離和性價比上達到平衡,大幅減少日常的 DBA 運維管理成本。
主從多機房 + 低延遲讀取
現(xiàn)在你是一個互聯(lián)網(wǎng)架構師,希望通過 TiDB 構建本地多數(shù)據(jù)中心架構。通過數(shù)據(jù)放置規(guī)則管理,你得以將 Follower 副本調(diào)度到備中心,實現(xiàn)同城高可用。 CREATE PLACEMENT POLICY eastnwest PRIMARY_REGION="us-east-1" REGIONS="us-east-1,us-east-2,us-west-1" SCHEDULE="MAJORITY_IN_PRIMARY" FOLLOWERS=4; CREATE TABLE orders (order_id BIGINT PRIMARY KEY, cust_id BIGINT, prod_id BIGINT) PLACEMENT POLICY=eastnwest;
與此同時,你讓對于一致性和新鮮度不高的歷史查詢通過基于時間戳的方式讀取(Stale Read),這樣避免了跨中心數(shù)據(jù)同步造成的訪問延遲,同時也提高對從機房的硬件利用率。 SELECT * FROM orders WHERE order_id = 14325 AS OF TIMESTAMP '2022-03-01 16:45:26';
總結
TiDB 6.0 的 Placement Rules in SQL 是一個很有趣的功能:它暴露了以往用戶無法控制的內(nèi)部調(diào)度能力,并提供了方便的 SQL 接口。你可以通過它對分區(qū) / 表 / 庫不同級別的數(shù)據(jù)進行基于標簽的自由放置,這開啟了諸多以往不可能實現(xiàn)的場景。除了上述可能性,我們也期望和你一起探索更多有趣的應用。
(免責聲明:本網(wǎng)站內(nèi)容主要來自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準確性及可靠性,但不保證有關資料的準確性及可靠性,讀者在使用前請進一步核實,并對任何自主決定的行為負責。本網(wǎng)站對有關資料所引致的錯誤、不確或遺漏,概不負任何法律責任。
任何單位或個人認為本網(wǎng)站中的網(wǎng)頁或鏈接內(nèi)容可能涉嫌侵犯其知識產(chǎn)權或存在不實內(nèi)容時,應及時向本網(wǎng)站提出書面權利通知或不實情況說明,并提供身份證明、權屬證明及詳細侵權或不實情況證明。本網(wǎng)站在收到上述法律文件后,將會依法盡快聯(lián)系相關文章源頭核實,溝通刪除相關內(nèi)容或斷開相關鏈接。 )