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