通過 Placement Rules In SQL 能力,設(shè)置放置策略將區(qū)域數(shù)據(jù)的所有副本指定到特定區(qū)域的特定機(jī)房內(nèi),所有的數(shù)據(jù)存儲,管理在本地區(qū)內(nèi)完成,減少了數(shù)據(jù)跨地區(qū)復(fù)制延遲,降低流量成本。需要做的僅僅是,為不同數(shù)據(jù)中心的節(jié)點(diǎn)打上標(biāo)簽,并創(chuàng)建對應(yī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ù)副本將會被「固定」在對應(yīng)的數(shù)據(jù)中心。

業(yè)務(wù)隔離

假設(shè)一個人負(fù)責(zé)大型互聯(lián)網(wǎng)企業(yè)的數(shù)據(jù)平臺,內(nèi)部業(yè)務(wù)有 2000 多種,相關(guān)業(yè)務(wù)采用一套或多套 MySQL 來管理,但是因?yàn)闃I(yè)務(wù)數(shù)量太多,MySQL 實(shí)例數(shù)接近 1000 個,日常的監(jiān)控、診斷、版本升級、安全防護(hù)等工作對運(yùn)維團(tuán)隊(duì)造成了巨大的壓力,且隨著業(yè)務(wù)規(guī)模越來越大,運(yùn)維成本逐年上升。他希望通過減少數(shù)據(jù)庫實(shí)例數(shù)量來減少運(yùn)維管理成本,但是業(yè)務(wù)間的數(shù)據(jù)隔離、訪問安全、數(shù)據(jù)調(diào)度的靈活性和管理成本成為面臨的嚴(yán)峻挑戰(zhàn)。

借助 TiDB 6.0,通過數(shù)據(jù)放置規(guī)則的配置,可以很容易靈活的集群共享規(guī)則,例如業(yè)務(wù) A,B 共享資源,降低存儲和管理成本,而業(yè)務(wù) C 和 D 獨(dú)占資源,提供最高的隔離性。由于多個業(yè)務(wù)共享一套 TiDB 集群,升級、打補(bǔ)丁、備份計(jì)劃、擴(kuò)縮容等日常運(yùn)維管理頻率可以大幅縮減,降低管理負(fù)擔(dān)提升效率。

TiDB 6.0 的「元功能」:Placement Rules in SQL 是什么?
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ī)則管理將不同 DB 下的數(shù)據(jù)調(diào)度到不同的硬件節(jié)點(diǎn)上,實(shí)現(xiàn)業(yè)務(wù)間數(shù)據(jù)的物理資源隔離,避免因資源爭搶,硬件故障等問題造成的相互干擾。通過賬號權(quán)限管理避免跨業(yè)務(wù)數(shù)據(jù)訪問,提升數(shù)據(jù)質(zhì)量和數(shù)據(jù)安全。在這種部署方式下,集群數(shù)量大大減小,原本的升級,監(jiān)控告警設(shè)置等日常運(yùn)維工作將大幅縮減,在資源隔離和性價(jià)比上達(dá)到平衡,大幅減少日常的 DBA 運(yùn)維管理成本。

主從多機(jī)房 + 低延遲讀取

一個互聯(lián)網(wǎng)架構(gòu)師,希望通過 TiDB 構(gòu)建本地多數(shù)據(jù)中心架構(gòu)。通過數(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í),讓對于一致性和新鮮度不高的歷史查詢通過基于時(shí)間戳的方式讀取(Stale Read),這樣避免了跨中心數(shù)據(jù)同步造成的訪問延遲,同時(shí)也提高對從機(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 是一個很有趣的功能:它暴露了以往用戶無法控制的內(nèi)部調(diào)度能力,并提供了方便的 SQL 接口。可以通過它對分區(qū) / 表 / 庫不同級別的數(shù)據(jù)進(jìn)行基于標(biāo)簽的自由放置,這開啟了諸多以往不可能實(shí)現(xiàn)的場景。除了上述可能性,期望一起探索更多有趣的應(yīng)用。

分享到

xiesc

相關(guān)推薦