mysql-proxy是官方提供的mysql中間件產(chǎn)品可以實(shí)現(xiàn)負(fù)載平衡视乐,讀寫分離,failover等敢茁,但其不支持大數(shù)據(jù)量的分庫(kù)分表且性能較差佑淀。下面介紹幾款能代替其的mysql開源中間件產(chǎn)品,Atlas彰檬,cobar伸刃,tddl,讓我們看看它們各自有些什么優(yōu)點(diǎn)和新特性吧逢倍。
Atlas
Atlas是由 Qihoo 360, Web平臺(tái)部基礎(chǔ)架構(gòu)團(tuán)隊(duì)開發(fā)維護(hù)的一個(gè)基于MySQL協(xié)議的數(shù)據(jù)中間層項(xiàng)目捧颅。它是在mysql-proxy 0.8.2版本的基礎(chǔ)上,對(duì)其進(jìn)行了優(yōu)化较雕,增加了一些新的功能特性碉哑。360內(nèi)部使用Atlas運(yùn)行的mysql業(yè)務(wù),每天承載的讀寫請(qǐng)求數(shù)達(dá)幾十億條亮蒋。
Altas架構(gòu):
Atlas是一個(gè)位于應(yīng)用程序與MySQL之間扣典,它實(shí)現(xiàn)了MySQL的客戶端與服務(wù)端協(xié)議,作為服務(wù)端與應(yīng)用程序通訊慎玖,同時(shí)作為客戶端與MySQL通訊贮尖。它對(duì)應(yīng)用程序屏蔽了DB的細(xì)節(jié),同時(shí)為了降低MySQL負(fù)擔(dān)趁怔,它還維護(hù)了連接池湿硝。
以下是一個(gè)可以參考的整體架構(gòu),LVS前端做負(fù)載均衡润努,兩個(gè)Altas做HA,防止單點(diǎn)故障关斜。
Altas的一些新特性:
1.主庫(kù)宕機(jī)不影響讀
主庫(kù)宕機(jī),Atlas自動(dòng)將宕機(jī)的主庫(kù)摘除任连,寫操作會(huì)失敗蚤吹,讀操作不受影響。從庫(kù)宕機(jī)随抠,Atlas自動(dòng)將宕機(jī)的從庫(kù)摘除裁着,對(duì)應(yīng)用沒有影響。在mysql官方的proxy中主庫(kù)宕機(jī)拱她,從庫(kù)亦不可用二驰。
2.通過管理接口,簡(jiǎn)化管理工作秉沼,DB的上下線對(duì)應(yīng)用完全透明桶雀,同時(shí)可以手動(dòng)上下線矿酵。
圖1是手動(dòng)添加一臺(tái)從庫(kù)的示例。
3.自己實(shí)現(xiàn)讀寫分離
(1)為了解決讀寫分離存在寫完馬上就想讀而這時(shí)可能存在主從同步延遲的情況矗积,Altas中可以在SQL語(yǔ)句前增加/master/ 就可以將讀請(qǐng)求強(qiáng)制發(fā)往主庫(kù)全肮。
(2)如圖2中,主庫(kù)可設(shè)置多項(xiàng)棘捣,用逗號(hào)分隔辜腺,從庫(kù)可設(shè)置多項(xiàng)和權(quán)重,達(dá)到負(fù)載均衡乍恐。
圖2
4.自己實(shí)現(xiàn)分表(圖3)
(1)需帶有分表字段评疗。
(2)支持SELECT、INSERT茵烈、UPDATE百匆、DELETE、REPLACE語(yǔ)句呜投。
(3)支持多個(gè)子表查詢結(jié)果的合并和排序加匈。
圖3
這里不得不吐槽Atlas的分表功能,不能實(shí)現(xiàn)分布式分表宙彪,所有的子表必須在同一臺(tái)DB的同一個(gè)database里且所有的子表必須事先建好矩动,Atlas沒有自動(dòng)建表的功能。
5.之前官方主要功能邏輯由使用lua腳本編寫释漆,效率低悲没,Atlas用C改寫,QPS提高男图,latency降低示姿。
6.安全方面的提升
(1)通過配置文件中的pwds參數(shù)進(jìn)行連接Atlas的用戶的權(quán)限控制。
(2)通過client-ips參數(shù)對(duì)有權(quán)限連接Atlas的ip進(jìn)行過濾逊笆。
(3)日志中記錄所有通過Altas處理的SQL語(yǔ)句栈戳,包括客戶端IP、實(shí)際執(zhí)行該語(yǔ)句的DB难裆、執(zhí)行成功與否子檀、執(zhí)行所耗費(fèi)的時(shí)間 ,如下面例子(圖4)乃戈。
圖4
7.平滑重啟
通過配置文件中設(shè)置lvs-ips參數(shù)實(shí)現(xiàn)平滑重啟功能褂痰,否則重啟Altas的瞬間那些SQL請(qǐng)求都會(huì)失敗。該參數(shù)前面掛接的lvs的物理網(wǎng)卡的ip症虑,注意不是虛ip缩歪。平滑重啟的條件是至少有兩臺(tái)配置相同的Atlas且掛在lvs之后。
source:https://github.com/Qihoo360/Atlas
alibaba.cobar
Cobar是阿里巴巴(B2B)部門開發(fā)的一種關(guān)系型數(shù)據(jù)的分布式處理系統(tǒng)谍憔,它可以在分布式的環(huán)境下看上去像傳統(tǒng)數(shù)據(jù)庫(kù)一樣為您提供海量數(shù)據(jù)服務(wù)匪蝙。那么具體說說我們?yōu)槭裁匆盟骷蛘fcobar--能干什么?以下是我們業(yè)務(wù)運(yùn)行中會(huì)存在的一些問題:
1.隨著業(yè)務(wù)的進(jìn)行數(shù)據(jù)庫(kù)的數(shù)據(jù)量和訪問量的劇增逛球,需要對(duì)數(shù)據(jù)進(jìn)行水平拆分來降低單庫(kù)的壓力千元,而且需要高效且相對(duì)透明的來屏蔽掉水平拆分的細(xì)節(jié)。
2.為提高訪問的可用性需忿,數(shù)據(jù)源需要備份诅炉。
3.數(shù)據(jù)源可用性的檢測(cè)和failover。
4.前臺(tái)的高并發(fā)造成后臺(tái)數(shù)據(jù)庫(kù)連接數(shù)過多屋厘,降低了性能,怎么解決月而。
針對(duì)以上問題就有了cobar施展自己的空間了汗洒,cobar中間件以proxy的形式位于前臺(tái)應(yīng)用和實(shí)際數(shù)據(jù)庫(kù)之間,對(duì)前臺(tái)的開放的接口是mysql通信協(xié)議父款。將前臺(tái)SQL語(yǔ)句變更并按照數(shù)據(jù)分布規(guī)則轉(zhuǎn)發(fā)到合適的后臺(tái)數(shù)據(jù)分庫(kù)溢谤,再合并返回結(jié)果,模擬單庫(kù)下的數(shù)據(jù)庫(kù)行為憨攒。
Cobar應(yīng)用舉例
應(yīng)用架構(gòu):
應(yīng)用介紹:
1.通過Cobar提供一個(gè)名為test的數(shù)據(jù)庫(kù)世杀,其中包含t1,t2兩張表。后臺(tái)有3個(gè)MySQL實(shí)例(ip:port)為其提供服務(wù)肝集,分別為:A,B,C瞻坝。
2.期望t1表的數(shù)據(jù)放置在實(shí)例A中,t2表的數(shù)據(jù)水平拆成四份并在實(shí)例B和C中各自放兩份杏瞻。t2表的數(shù)據(jù)要具備HA功能所刀,即B或者C實(shí)例其中一個(gè)出現(xiàn)故障,不影響使用且可提供完整的數(shù)據(jù)服務(wù)捞挥。
cabar優(yōu)點(diǎn)總結(jié):
1.數(shù)據(jù)和訪問從集中式改變?yōu)榉植迹?br>
(1)Cobar支持將一張表水平拆分成多份分別放入不同的庫(kù)來實(shí)現(xiàn)表的水平拆分
(2)Cobar也支持將不同的表放入不同的庫(kù)
(3) 多數(shù)情況下浮创,用戶會(huì)將以上兩種方式混合使用
注意!:Cobar不支持將一張表砌函,例如test表拆分成test_1,test_2, test_3.....放在同一個(gè)庫(kù)中斩披,必須將拆分后的表分別放入不同的庫(kù)來實(shí)現(xiàn)分布式。
2.解決連接數(shù)過大的問題讹俊。
3.對(duì)業(yè)務(wù)代碼侵入性少垦沉。
4.提供數(shù)據(jù)節(jié)點(diǎn)的failover,HA:
(1)Cobar的主備切換有兩種觸發(fā)方式,一種是用戶手動(dòng)觸發(fā)劣像,一種是Cobar的心跳語(yǔ)句檢測(cè)到異常后自動(dòng)觸發(fā)乡话。那么,當(dāng)心跳檢測(cè)到主機(jī)異常耳奕,切換到備機(jī)绑青,如果主機(jī)恢復(fù)了诬像,需要用戶手動(dòng)切回主機(jī)工作,Cobar不會(huì)在主機(jī)恢復(fù)時(shí)自動(dòng)切換回主機(jī)闸婴,除非備機(jī)的心跳也返回異常坏挠。
(2)Cobar只檢查MySQL主備異常,不關(guān)心主備之間的數(shù)據(jù)同步邪乍,因此用戶需要在使用Cobar之前在MySQL主備上配置雙向同步降狠。
cobar缺點(diǎn):
開源版本中數(shù)據(jù)庫(kù)只支持mysql,并且不支持讀寫分離庇楞。
source:http://code.alibabatech.com/wiki/display/cobar/Home
TDDL
淘寶根據(jù)自己的業(yè)務(wù)特點(diǎn)開發(fā)了TDDL(Taobao Distributed Data Layer 外號(hào):頭都大了 ?_Ob)框架榜配,主要解決了分庫(kù)分表對(duì)應(yīng)用的透明化以及異構(gòu)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)復(fù)制,它是一個(gè)基于集中式配置的 jdbc datasource實(shí)現(xiàn)吕晌,具有主備蛋褥,讀寫分離,動(dòng)態(tài)數(shù)據(jù)庫(kù)配置等功能睛驳。
淘寶很早就對(duì)數(shù)據(jù)進(jìn)行過分庫(kù)的處理乏沸, 上層系統(tǒng)連接多個(gè)數(shù)據(jù)庫(kù)淫茵,中間有一個(gè)叫做DBRoute的路由來對(duì)數(shù)據(jù)進(jìn)行統(tǒng)一訪問。DBRoute對(duì)數(shù)據(jù)進(jìn)行多庫(kù)的操作蹬跃、數(shù)據(jù)的整合匙瘪,讓上層系統(tǒng)像操作一個(gè)數(shù)據(jù)庫(kù)一樣操作多個(gè)庫(kù)。但是隨著數(shù)據(jù)量的增長(zhǎng)炬转,對(duì)于庫(kù)表的分法有了更高的要求辆苔,例如,你的商品數(shù)據(jù)到了百億級(jí)別的時(shí)候扼劈,任何一個(gè)庫(kù)都無法存放了驻啤,于是分成2個(gè)、4個(gè)荐吵、8個(gè)骑冗、16個(gè)、32個(gè)……直到1024個(gè)先煎、2048個(gè)贼涩。好,分成這么多薯蝎,數(shù)據(jù)能夠存放了遥倦,那怎么查詢它?這時(shí)候占锯,數(shù)據(jù)查詢的中間件就要能夠承擔(dān)這個(gè)重任了袒哥,它對(duì)上層來說缩筛,必須像查詢一個(gè)數(shù)據(jù)庫(kù)一樣來查詢數(shù)據(jù),還要像查詢一個(gè)數(shù)據(jù)庫(kù)一樣快(每條查詢?cè)趲缀撩雰?nèi)完成)堡称,TDDL就承擔(dān)了這樣一個(gè)工作瞎抛。在外面有些系統(tǒng)也用DAL(數(shù)據(jù)訪問層) 這個(gè)概念來命名這個(gè)中間件。
下圖展示了一個(gè)簡(jiǎn)單的分庫(kù)分表數(shù)據(jù)查詢策略:
主要優(yōu)點(diǎn):
1.數(shù)據(jù)庫(kù)主備和動(dòng)態(tài)切換
2.帶權(quán)重的讀寫分離
3.單線程讀重試
4.集中式數(shù)據(jù)源信息管理和動(dòng)態(tài)變更
5.剝離的穩(wěn)定jboss數(shù)據(jù)源
6.支持mysql和oracle數(shù)據(jù)庫(kù)
7.基于jdbc規(guī)范却紧,很容易擴(kuò)展支持實(shí)現(xiàn)jdbc規(guī)范的數(shù)據(jù)源
8.無server,client-jar形式存在桐臊,應(yīng)用直連數(shù)據(jù)庫(kù)
9.讀寫次數(shù),并發(fā)度流程控制,動(dòng)態(tài)變更
10.可分析的日志打印,日志流控晓殊,動(dòng)態(tài)變更
TDDL必須要依賴diamond配置中心(diamond是淘寶內(nèi)部使用的一個(gè)管理持久配置的系統(tǒng)断凶,目前淘寶內(nèi)部絕大多數(shù)系統(tǒng)的配置,由diamond來進(jìn)行統(tǒng)一管理巫俺,同時(shí)diamond也已開源)懒浮。
TDDL動(dòng)態(tài)數(shù)據(jù)源使用示例說明:http://rdc.taobao.com/team/jm/archives/1645
diamond簡(jiǎn)介和快速使用:http://jm.taobao.org/tag/diamond%E4%B8%93%E9%A2%98/
TDDL源碼:https://github.com/alibaba/tb_tddl
TDDL復(fù)雜度相對(duì)較高。當(dāng)前公布的文檔較少识藤,只開源動(dòng)態(tài)數(shù)據(jù)源,分表分庫(kù)部分還未開源次伶,還需要依賴diamond痴昧,不推薦使用。
終其所有冠王,我們研究中間件的目的是使數(shù)據(jù)庫(kù)實(shí)現(xiàn)性能的提高赶撰。具體使用哪種還要經(jīng)過深入的研究,嚴(yán)謹(jǐn)?shù)臏y(cè)試才可決定柱彻。
MyCAT
https://github.com/myCATApache
什么是MyCAT?簡(jiǎn)單的說豪娜,MyCAT就是: 一個(gè)徹底開源的,面向企業(yè)應(yīng)用開發(fā)的“大數(shù)據(jù)庫(kù)集群” 支持事務(wù)哟楷、ACID瘤载、可以替代Mysql的加強(qiáng)版數(shù)據(jù)庫(kù) ? 一個(gè)可以視為“Mysql”集群的企業(yè)級(jí)數(shù)據(jù)庫(kù),用來替代昂貴的Oracle集群 ? 一個(gè)融合內(nèi)存緩存技術(shù)卖擅、Nosql技術(shù)鸣奔、HDFS大數(shù)據(jù)的新型SQL Server ? 結(jié)合傳統(tǒng)數(shù)據(jù)庫(kù)和新型分布式數(shù)據(jù)倉(cāng)庫(kù)的新一代企業(yè)級(jí)數(shù)據(jù)庫(kù)產(chǎn)品 ? 一個(gè)新穎的數(shù)據(jù)庫(kù)中間件產(chǎn)品。
目標(biāo)
低成本的將現(xiàn)有的單機(jī)數(shù)據(jù)庫(kù)和應(yīng)用平滑遷移到“云”端惩阶,解決數(shù)據(jù)存儲(chǔ)和業(yè)務(wù)規(guī)模迅速增長(zhǎng)情況下的數(shù)據(jù)瓶頸問題挎狸。
關(guān)鍵特性
支持 SQL 92標(biāo)準(zhǔn) 支持Mysql集群,可以作為Proxy使用 支持JDBC連接ORACLE断楷、DB2锨匆、SQL Server,將其模擬為MySQL Server使用 支持galera for mysql集群冬筒,percona-cluster或者mariadb cluster恐锣,提供高可用性數(shù)據(jù)分片集群茅主,自動(dòng)故障切換,高可用性 侥蒙。
支持讀寫分離暗膜。
支持Mysql雙主多從,以及一主多從的模式 鞭衩。
支持全局表学搜。
支持?jǐn)?shù)據(jù)自動(dòng)分片到多個(gè)節(jié)點(diǎn),用于高效表關(guān)聯(lián)查詢 论衍。
垮褲join瑞佩,支持獨(dú)有的基于E-R 關(guān)系的分片策略,實(shí)現(xiàn)了高效的表關(guān)聯(lián)查詢多平臺(tái)支持坯台,部署和實(shí)施簡(jiǎn)單炬丸。
優(yōu)勢(shì)
基于阿里開源的Cobar產(chǎn)品而研發(fā),Cobar的穩(wěn)定性蜒蕾、可靠性稠炬、優(yōu)秀的架構(gòu)和性能,以及眾多成熟的使用案例使得MyCAT一開始就擁有一個(gè)很好的起點(diǎn)咪啡,站在巨人的肩膀上首启,我們能看到更遠(yuǎn)。廣泛吸取業(yè)界優(yōu)秀的開源項(xiàng)目和創(chuàng)新思路撤摸,將其融入到MyCAT的基因中毅桃,使得MyCAT在很多方面都領(lǐng)先于目前其他一些同類的開源項(xiàng)目,甚至超越某些商業(yè)產(chǎn)品准夷。MyCAT背后有一只強(qiáng)大的技術(shù)團(tuán)隊(duì)钥飞,其參與者都是5年以上資深軟件工程師、架構(gòu)師衫嵌、DBA等读宙,優(yōu)秀的技術(shù)團(tuán)隊(duì)保證了MyCAT的產(chǎn)品質(zhì)量。 MyCAT并不依托于任何一個(gè)商業(yè)公司渐扮,因此不像某些開源項(xiàng)目论悴,將一些重要的特性封閉在其商業(yè)產(chǎn)品中,使得開源項(xiàng)目成了一個(gè)擺設(shè)墓律,目前在持續(xù)維護(hù)更新膀估。
長(zhǎng)期規(guī)劃
在支持Mysql的基礎(chǔ)上,后端增加更多的開源數(shù)據(jù)庫(kù)和商業(yè)數(shù)據(jù)庫(kù)的支持耻讽,包括原生支持PosteSQL察纯、FireBird等開源數(shù)據(jù)庫(kù),以及通過JDBC等方式間接支持其他非開源的數(shù)據(jù)庫(kù)如Oracle、DB2饼记、SQL Server等實(shí)現(xiàn)更為智能的自我調(diào)節(jié)特性香伴,如自動(dòng)統(tǒng)計(jì)分析SQL,自動(dòng)創(chuàng)建和調(diào)整索引具则,根據(jù)數(shù)據(jù)表的讀寫頻率即纲,自動(dòng)優(yōu)化緩存和備份策略等實(shí)現(xiàn)更全面的監(jiān)控管理功能與HDFS集成,提供SQL命令博肋,將數(shù)據(jù)庫(kù)裝入HDFS中并能夠快速分析集成優(yōu)秀的開源報(bào)表工具低斋,使之具備一定的數(shù)據(jù)分析的能力。
heisenberg
強(qiáng)大好用的mysql分庫(kù)分表中間件,來自百度
其優(yōu)點(diǎn): 分庫(kù)分表與應(yīng)用脫離匪凡,分庫(kù)表如同使用單庫(kù)表一樣 減少db 連接數(shù)壓力 熱重啟配置 可水平擴(kuò)容 遵守Mysql原生協(xié)議 讀寫分離 無語(yǔ)言限制膊畴,mysqlclient,c,java等都可以使用 Heisenberg服務(wù)器通過管理命令可以查看,如連接數(shù)病游,線程池唇跨,結(jié)點(diǎn)等,并可以調(diào)整 采用velocity的分庫(kù)分表腳本進(jìn)行自定義分庫(kù)表衬衬,相當(dāng)?shù)撵`活
qq群:150720285 郵箱:brucest0078@gmail.com
https://github.com/songwie/heisenberg
分庫(kù)分表與應(yīng)用脫離买猖,分庫(kù)表如同使用單庫(kù)表一樣
減少db 連接數(shù)壓力
熱重啟配置
可水平擴(kuò)容
遵守Mysql原生協(xié)議
無語(yǔ)言限制,mysqlclient,c,java等都可以使用
Heisenberg服務(wù)器通過管理命令可以查看滋尉,如連接數(shù)政勃,線程池,結(jié)點(diǎn)等兼砖,并可以調(diào)整
Oceanus:
Oceanus致力于打造一個(gè)功能簡(jiǎn)單、可依賴既棺、易于上手讽挟、易于擴(kuò)展、易于集成的解決方案丸冕,甚至是平臺(tái)化系統(tǒng)耽梅。擁抱開源,提供各類插件機(jī)制集成其他開源項(xiàng)目胖烛,新手可以在幾分鐘內(nèi)上手編程眼姐,分庫(kù)分表邏輯不再與業(yè)務(wù)緊密耦合,擴(kuò)容有標(biāo)準(zhǔn)模式佩番,減少意外錯(cuò)誤的發(fā)生众旗。
Oceanus****內(nèi)部名詞定義
- datanode:數(shù)據(jù)源節(jié)點(diǎn)。為一個(gè)數(shù)據(jù)源命名趟畏,配置鏈接屬性贡歧、報(bào)警實(shí)現(xiàn)
- namenode:數(shù)據(jù)源的簇。為一組數(shù)據(jù)源命名,指定這組數(shù)據(jù)源的負(fù)載方式利朵、訪問模式律想、權(quán)重
- table:映射表。匹配解析sql中的table名稱绍弟,命中table標(biāo)簽的name屬性值后技即,會(huì)執(zhí)行約定的路由邏輯
- bean:實(shí)體。由其他標(biāo)簽引用樟遣,實(shí)體類必須有無參的構(gòu)造函數(shù)
- tracker:監(jiān)控埋點(diǎn)而叼。涉及到計(jì)算和IO的功能點(diǎn)都有監(jiān)控點(diǎn),自定義一個(gè)埋點(diǎn)實(shí)現(xiàn)類年碘,當(dāng)功能耗時(shí)超出預(yù)期時(shí)會(huì)執(zhí)行其中的回調(diào)函數(shù)澈歉,便于監(jiān)控和優(yōu)化系統(tǒng)
為什么說****Oceanus****是非常易用的
Oceanus在設(shè)計(jì)時(shí)非常注重使用者的評(píng)價(jià),配置結(jié)構(gòu)近乎于和使用者交流約定業(yè)務(wù)規(guī)則屿衅,便于不同的人看同一套配置埃难,互相理解流程。當(dāng)配置文件編寫 完成后涤久,編碼就變得更加簡(jiǎn)單涡尘,只調(diào)用Oceanus客戶端的幾個(gè)方法就可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)操作,不再關(guān)心HA响迂、報(bào)警考抄、負(fù)載均衡、性能監(jiān)控等問題蔗彤。良好的用戶視 覺減少了分庫(kù)分表在業(yè)務(wù)場(chǎng)景中的耦合度川梅,對(duì)于編碼者就像只對(duì)一個(gè)table操作,Oceanus負(fù)責(zé)進(jìn)行sql解析然遏、路由贫途、sql重寫。
如提交: select * from user待侵; 改寫成: select * from user0; select * from user1; select * from user2; select * from user3;
分發(fā)給不同的庫(kù)(或者同庫(kù))執(zhí)行丢早,用戶視覺如圖:開源集成
“接地氣,擁抱開源” 是Oceanus的設(shè)計(jì)原則之一秧倾,可以很好的集成到mybatis和hibernate中怨酝,只要引用其中的插件,編寫Oceanus配置文件那先,然后改寫各 自的DataSource實(shí)現(xiàn)或ConnectionProvider即可做到集成农猬。這樣既用到了熟悉的ORM,又借助Oceanus實(shí)現(xiàn)了分庫(kù)分表等功 能售淡。
待開發(fā)
不得不說Oceanus在設(shè)計(jì)上非常靈活盛险,使得每一個(gè)細(xì)小的功能點(diǎn)都有極高的切入價(jià)值瞄摊,比如Cache機(jī)制、全局的ID生成規(guī)則苦掘、資源可視化監(jiān)控等等换帜,把其中某一個(gè)點(diǎn)做得足夠好,都會(huì)為整體產(chǎn)品帶來質(zhì)的提升鹤啡,簡(jiǎn)化實(shí)際生產(chǎn)環(huán)境中的配套系統(tǒng)研發(fā)維護(hù)成本惯驼。
vitess:
谷歌開發(fā)的數(shù)據(jù)庫(kù)中間件,集群基于ZooKeeper管理递瑰,通過RPC方式進(jìn)行數(shù)據(jù)處理祟牲,總體分為,server抖部,command line说贝,gui監(jiān)控 3部分。
https://github.com/youtube/vitess
Vitess is a set of servers and tools meant to facilitate scaling of MySQL databases for the web. It's been developed since 2011, and is currently used as a fundamental component of YouTube's MySQL infrastructure, serving thousands of QPS (per server). If you want to find out whether Vitess is a good fit for your project, please read our helicopter overview.
Vitess consists of a number servers, command line utilities, and a consistent metadata store. Taken together, they allow you to serve more database traffic, and add features like sharding, which normally you would have to implement in your application.
vttablet is a server that sits in front of a MySQL database, making it more robust and available in the face of high traffic. Among other things, it adds a connection pool, has a row based cache, and it rewrites SQL queries to be safer and nicer to the underlying database.
vtgate is a very light proxy that routes database traffic from your app to the right vttablet, basing on the sharding scheme, latency required, and health of the vttablets. This allows the client to be very simple, as all it needs to be concerned about is finding the closest vtgate.
The topology is a metadata store that contains information about running servers, the sharding scheme, and replication graph. It is backed by a consistent data store, like Apache ZooKeeper. The topology backends are plugin based, allowing you to write your own if ZooKeeper doesn't fit your needs. You can explore the topology through vtctld, a webserver (not shown in the diagram).
vtctl is a command line utility that allows a human or a script to easily interact with the system.
All components communicate using a lightweight RPC system based on BSON. The RPC system is plugin based, so you can easily write your own backend (at Google we use a Protocol Buffers based protocol). We provide a client implementation for three languages: Python, Go, and Java. Writing a client for your language should not be difficult, as it's a matter of implementing only a few API calls (please send us a pull request if you do!).
OneProxy
OneProxy是由原支付寶首席架構(gòu)師樓方鑫開發(fā)慎颗,目前由樓方鑫創(chuàng)立的杭州平民軟件公司(@平民架構(gòu))提供技術(shù)支持乡恕。它保留了MySQL-Proxy 0.8.4官方版本上其協(xié)議處理和軟件框架,然后對(duì)軟件做了大量?jī)?yōu)化俯萎,極大增強(qiáng)了系統(tǒng)的并發(fā)能力傲宜。目前已有多家公司在生成環(huán)境中使用,其中包括了支付夫啊、電商等行業(yè)函卒。
OneProxy的主要功能有:
垂直分庫(kù)
水平分表
3. Proxy集群【暫無文檔】
讀高可用
讀寫分離(master不參與讀)
讀寫分離(master參與讀)
寫高可用
讀寫隨機(jī)
9. SQL檢查
10. SQL統(tǒng)計(jì)【暫無文檔】
任務(wù)隊(duì)列監(jiān)控【暫無文檔】
連接池管理【暫無文檔】
最新博文在http://www.cnblogs.com/youge-OneSQL/articles/4208583.html
重要概念
Server Group
在OneProxy中,一組主從復(fù)制的MySQL集群被稱為Server Group撇眯。如圖. A所示报嵌,有Server Group A和Server Group B。
圖. A
在OneProxy中熊榛,垂直分庫(kù)和水平分表的實(shí)現(xiàn)思路都是建立在Server Group的概念上沪蓬。為了更好地說明,我們假設(shè)以下場(chǎng)景来候。
A)Server Group A中有三張表table X, table Y, table Z,其中應(yīng)用對(duì)table X操作非常頻繁逸雹,占用大量I/O帶寬营搅,嚴(yán)重影響了應(yīng)用對(duì)tableY, tableZ的操作效率。
圖. B
解決方案1.0:把table X移到另一組數(shù)據(jù)庫(kù)梆砸,即Server Group B中(如圖C所示)转质,然后通過修改OneProxy的配置來改變table X的路由規(guī)則,無須改動(dòng)應(yīng)用帖世。
圖. C
B)在使用了解決方案1.0后休蟹,系統(tǒng)的I/O壓力得到緩解沸枯。由于后期業(yè)務(wù)越來越多,Server Group B的寫入壓力越來越大赂弓,響應(yīng)時(shí)間變慢绑榴。
解決方案2.0 : 把Server Group B中的table X水平拆分,將X_00, X_01留在Server Group B中盈魁,把X_02翔怎,X_03留在Server Group C中,如圖D所示
轉(zhuǎn)載:https://mp.csdn.net/postedit
</article>