日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

MariaDB Spider:实现MySQL横纵向扩展的小能手

發(fā)布時(shí)間:2025/3/21 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MariaDB Spider:实现MySQL横纵向扩展的小能手 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

什么是Spider

當(dāng)您的數(shù)據(jù)庫(kù)不斷增長(zhǎng)時(shí),您絕對(duì)需要考慮其他技術(shù),如數(shù)據(jù)庫(kù)分片。Spider MariaDB 內(nèi)置的一個(gè)可插拔用于 MariaDB/MySQL 數(shù)據(jù)庫(kù)分片存儲(chǔ)引擎,充當(dāng)應(yīng)用服務(wù)器和遠(yuǎn)程后端 DB 之間的代理(中間件),它可以輕松實(shí)現(xiàn) MySQL 的橫向和縱向擴(kuò)展,突破單臺(tái) MySQL 的限制,支持范圍分區(qū)、列表分區(qū)、哈希分區(qū),支持XA分布式事務(wù),支持跨庫(kù)join


通過 Spider,您可以跨多個(gè)數(shù)據(jù)庫(kù)后端有效訪問數(shù)據(jù),讓您的應(yīng)用程序一行代碼不改,即可輕松實(shí)現(xiàn)分庫(kù)分表!

?

分庫(kù)分表架構(gòu)圖:



應(yīng)用程序連接SpiderSpider充當(dāng)中間件代理,將客戶端查詢的請(qǐng)求,按照事先定義好的分片規(guī)則,分發(fā)給后端數(shù)據(jù)庫(kù),之后返回的數(shù)據(jù)匯總在Spider內(nèi)存里做聚合,最終返回客戶端請(qǐng)求,對(duì)于應(yīng)用程序而言是透明的

?

分片字段的選取

一定要針對(duì)業(yè)務(wù)上查詢最頻繁的字段做片鍵,查詢時(shí)會(huì)直接路由到后端 DB 上,否則會(huì)輪訓(xùn)遍歷后端所有 DB,跨多個(gè)網(wǎng)絡(luò)性能就會(huì)下降。

?

1范圍分片的優(yōu)點(diǎn)是無限擴(kuò)容,但缺點(diǎn)是冷熱數(shù)據(jù)不均勻。


2HASH分片解決了冷熱數(shù)據(jù)不均勻的問題,但今后擴(kuò)容比較麻煩,比如之前對(duì)表取模了128張,今后變更為256張,數(shù)據(jù)要重新導(dǎo)入。

?

典型案例---騰訊游戲



騰訊游戲的生產(chǎn)環(huán)境數(shù)據(jù)量達(dá)到了100TB,用了396個(gè)Spider節(jié)點(diǎn)做數(shù)據(jù)拆分,分片后的數(shù)據(jù)用了2800個(gè)MySQL節(jié)點(diǎn)存儲(chǔ)。

?

使用場(chǎng)景介紹

下面我介紹一下我負(fù)責(zé)的一個(gè)項(xiàng)目,通過 Spider 實(shí)現(xiàn)了歷史表的垂直拆分的經(jīng)驗(yàn)分享。隨著業(yè)務(wù)的增長(zhǎng),單臺(tái)服務(wù)器磁盤空間有限,有些業(yè)務(wù)上的歷史數(shù)據(jù),DBA 用工具 pt-archiver 歸檔后,歷史表就沒有用了,通常我們會(huì)把他單獨(dú)遷移到備份機(jī),主庫(kù)上就刪除了。


但有的時(shí)候,BI 統(tǒng)計(jì)部門來了一個(gè)需求,需要臨時(shí)關(guān)聯(lián)查詢這些歷史表,那么 DBA 需要從備份機(jī)上 myloader 導(dǎo)入到從庫(kù)上去,為了降低導(dǎo)數(shù)據(jù)引起的從庫(kù) CPU 升高、磁盤 IO 的瞬間增大,可能造成主從復(fù)制的延遲,為了減少這種重復(fù)性的體力工作,為了更快速的縮短可用時(shí)間,我們可以通過Spider引擎解決,通過它你可以將遠(yuǎn)程服務(wù)器上的表做一個(gè)映射,做一個(gè)軟連接,相當(dāng)于你操作本地的表一樣,簡(jiǎn)單而便捷,省去了那么多麻煩,臨時(shí)提供給業(yè)務(wù)方用,你也不用考慮啥性能問題。


架構(gòu)圖如下:



實(shí)施這個(gè)方案,選擇Spider引擎是有優(yōu)勢(shì)的:SQL 解析和查詢優(yōu)化是個(gè)非常復(fù)雜而且很難做好的工作,其他替代產(chǎn)品都是自己實(shí)現(xiàn),由于復(fù)雜性,這些產(chǎn)品都帶來了一些限,比如不支持存儲(chǔ)過程、函數(shù)、視圖等,給使用和實(shí)施帶來了困難。


而作為一個(gè)存儲(chǔ)引擎,這些工作都由 MariaDB 自身完成了,可以方便的將大表做分布式拆分,和 Fabric 相比它的好處是對(duì)業(yè)務(wù)方使用是透明的,SQL 語(yǔ)法沒有任何限制,在不改變現(xiàn)有 DB 架構(gòu)的方案中,侵入性最小。


內(nèi)部原理架構(gòu)圖如下:


?

我們?cè)谝慌_(tái)從庫(kù)上,安裝上 Spider 引擎,只需兩條命令做一個(gè)表的“超鏈接”,分分鐘就解決了問題。


注:前提是你的從庫(kù)使用的是 MariaDB 10

?

下面是官方的垂直拆分壓測(cè)報(bào)告:



而在我的壓測(cè)結(jié)果上,分庫(kù)分表的性能會(huì)降低70%,而垂直拆分性能會(huì)降低 40%,性能損耗的原因是在分布式場(chǎng)景下,要保證 2pc 的一致性和可用性,讀寫的表現(xiàn)就差,另外就是跨多個(gè)網(wǎng)絡(luò)傳輸這兩方面引起的。


目前為RC公測(cè)版本V3.2.37,固在主庫(kù)上實(shí)現(xiàn)該功能要慎重!

?

Spider引擎安裝

# mysql -uroot -p < /usr/local/mysql/share/install_spider.sql


mysql > SELECT engine, support, transactions, xa FROM

information_schema.engines;

?

?

Spider引擎使用

垂直拆分

1、定義后端服務(wù)器和數(shù)據(jù)庫(kù)名字


CREATE SERVER backend1

?????FOREIGN DATA WRAPPER mysql

OPTIONS(

????HOST '192.168.143.205',

????DATABASE 'test',

????USER 'user_readonly',

????PASSWORD '123456',

????PORT 3306

);


這里后端服務(wù)器的名字為backend1,數(shù)據(jù)庫(kù)名字為test,主機(jī)IP地址為192.168.143.205,用戶名為user_readonly,密碼為123456,端口為3306


注:如配置錯(cuò)誤,可直接DROP SERVER backend1; 重新創(chuàng)建即可。

?

2、創(chuàng)建表的“超鏈接”


CREATE TABLE `sbtest` (

??`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

??`k` int(10) unsigned NOT NULL DEFAULT '0',

??`c` char(120) NOT NULL DEFAULT '',

??`pad` char(60) NOT NULL DEFAULT '',

??PRIMARY KEY (`id`),

??KEY `k` (`k`)

) ENGINE=SPIDER DEFAULT CHARSET=utf8 COMMENT='wrapper "mysql", table "sbtest",srv "backend1"';


這里通過設(shè)置COMMENT注釋來調(diào)用后端的表,然后你就可以查看sbtest表了,是不是很簡(jiǎn)單?

?

分庫(kù)分表

CREATE TABLE `sbtest` (

??`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

??`k` int(10) unsigned NOT NULL DEFAULT '0',

??`c` char(120) NOT NULL DEFAULT '',

??`pad` char(60) NOT NULL DEFAULT '',

??PRIMARY KEY (`id`),

??KEY `k` (`k`)

) ENGINE=SPIDER DEFAULT CHARSET=utf8 COMMENT='wrapper "mysql", table "sbtest"'

??PARTITION BY LIST (mod(id,2))

(PARTITION p0 VALUES IN (0) COMMENT = 'srv "backend1"' ENGINE = SPIDER,

?PARTITION p1 VALUES IN (1) COMMENT = 'srv "backend2"' ENGINE = SPIDER);


同上但區(qū)別是分庫(kù)分表是采用了類似表分區(qū)的概念實(shí)現(xiàn)。

?

可調(diào)優(yōu)參數(shù)

spider_conn_recycle_mode = 1

連接復(fù)用,類似連接池這種功能

?

optimizer_switch = 'engine_condition_pushdown=on'

引擎下推,查詢推送到后端數(shù)據(jù)庫(kù),將查詢結(jié)果返回給Spider做聚合

?

負(fù)載均衡架構(gòu)設(shè)計(jì)

由于Spider自身不保存數(shù)據(jù),只保存路由信息,是無狀態(tài)的,所以可以部署多個(gè)Spider做負(fù)載均衡,架構(gòu)圖如下:



后端 MySQL 可以結(jié)合 MHA 實(shí)現(xiàn)高可用故障切換

?

注:在MariaDB 10.2版本里,Spider準(zhǔn)備GA,并且合并了騰訊的補(bǔ)丁。


RC最新體驗(yàn)版下載地址

http://spiderformysql.com/downloads/spider-3.3/mariadb-10.2.0-spider-3.3-vp-1.1-linux-x86_64-glibc25.tgz

?

參考文獻(xiàn):

https://m17.mariadb.com/session/deep-dive-supporting-distributed-data-spider

https://www.percona.com/live/17/sessions/using-spider-sharding-production

https://www.percona.com/blog/2017/04/12/percona-live-2017-many-technical-mariadb-server-sessions/

http://mp.weixin.qq.com/s/GuxGkQTptjFhqI3eI1CgJw

?


總結(jié)

以上是生活随笔為你收集整理的MariaDB Spider:实现MySQL横纵向扩展的小能手的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。