http://www.reibang.com/p/b1395b680818
1.TDDL Smart Client的方式(淘寶)
淘寶根據(jù)自己的業(yè)務特點開發(fā)了TDDL(TaobaoDistributedData Layer 外號:頭都大了 ?_Ob)框架溺健,主要解決了分庫分表對應用的透明化以及異構數(shù)據(jù)庫之間的數(shù)據(jù)復制,它是一個基于集中式配置的jdbcdatasource實現(xiàn)冕象,具有主備辩撑,讀寫分離狠轻,動態(tài)數(shù)據(jù)庫配置等功能荞驴。 TDDL所處的位置(tddl通用數(shù)據(jù)訪問層遭庶,部署在客戶端的jar包磕蒲,用于將用戶的SQL路由到指定的數(shù)據(jù)庫中)
主要優(yōu)點:1.數(shù)據(jù)庫主備和動態(tài)切換2.帶權重的讀寫分離3.單線程讀重試4.集中式數(shù)據(jù)源信息管理和動態(tài)變更5.剝離的穩(wěn)定jboss數(shù)據(jù)源6.支持mysql和oracle數(shù)據(jù)庫7.基于jdbc規(guī)范充尉,很容易擴展支持實現(xiàn)jdbc規(guī)范的數(shù)據(jù)源8.無server,client-jar形式存在飘言,應用直連數(shù)據(jù)庫9.讀寫次數(shù),并發(fā)度流程控制,動態(tài)變更10.可分析的日志打印,日志流控喉酌,動態(tài)變更 TDDL必須要依賴diamond配置中心(diamond是淘寶內部使用的一個管理持久配置的系統(tǒng)热凹,目前淘寶內部絕大多數(shù)系統(tǒng)的配置,由diamond來進行統(tǒng)一管理泪电,同時diamond也已開源)般妙。 TDDL動態(tài)數(shù)據(jù)源使用示例說明:http://rdc.taobao.com/team/jm/archives/1645 diamond簡介和快速使用:http://jm.taobao.org/tag/diamond%E4%B8%93%E9%A2%98/TDDL源碼:https://github.com/alibaba/tb_tddl TDDL復雜度相對較高。當前公布的文檔較少相速,只開源動態(tài)數(shù)據(jù)源碟渺,分表分庫部分還未開源,還需要依賴diamond突诬,不推薦使用苫拍。 終其所有,我們研究中間件的目的是使數(shù)據(jù)庫實現(xiàn)性能的提高旺隙。具體使用哪種還要經(jīng)過深入的研究绒极,嚴謹?shù)臏y試才可決定
2. Atlas(Qihoo 360)
Atlas是由 Qihoo360, Web平臺部基礎架構團隊開發(fā)維護的一個基于MySQL協(xié)議的數(shù)據(jù)中間層項目。它是在mysql-proxy0.8.2版本的基礎上蔬捷,對其進行了優(yōu)化垄提,增加了一些新的功能特性。360內部使用Atlas運行的mysql業(yè)務周拐,每天承載的讀寫請求數(shù)達幾十億條铡俐。 Altas架構: Atlas是一個位于應用程序與MySQL之間,它實現(xiàn)了MySQL的客戶端與服務端協(xié)議妥粟,作為服務端與應用程序通訊审丘,同時作為客戶端與MySQL通訊。它對應用程序屏蔽了DB的細節(jié)勾给,同時為了降低MySQL負擔滩报,它還維護了連接池锅知。
Altas的一些新特性:1.主庫宕機不影響讀 主庫宕機,Atlas自動將宕機的主庫摘除露泊,寫操作會失敗喉镰,讀操作不受影響旅择。從庫宕機惭笑,Atlas自動將宕機的從庫摘除,對應用沒有影響生真。在mysql官方的proxy中主庫宕機沉噩,從庫亦不可用。2.通過管理接口柱蟀,簡化管理工作川蒙,DB的上下線對應用完全透明,同時可以手動上下線长已。3.自己實現(xiàn)讀寫分離 (1)為了解決讀寫分離存在寫完馬上就想讀而這時可能存在主從同步延遲的情況畜眨,Altas中可以在SQL語句前增加/*master*/就可以將讀請求強制發(fā)往主庫。 (2)如圖2中术瓮,主庫可設置多項康聂,用逗號分隔,從庫可設置多項和權重胞四,達到負載均衡恬汁。4.自己實現(xiàn)分表 (1)需帶有分表字段。 (2)支持SELECT辜伟、INSERT氓侧、UPDATE、DELETE导狡、REPLACE語句约巷。 (3)支持多個子表查詢結果的合并和排序。5.之前官方主要功能邏輯由使用lua腳本編寫旱捧,效率低独郎,Atlas用C改寫,QPS提高廊佩,latency降低囚聚。6.安全方面的提升 (1)通過配置文件中的pwds參數(shù)進行連接Atlas的用戶的權限控制。 (2)通過client-ips參數(shù)對有權限連接Atlas的ip進行過濾标锄。 (3)日志中記錄所有通過Altas處理的SQL語句顽铸,包括客戶端IP、實際執(zhí)行該語句的DB料皇、執(zhí)行成功與否谓松、執(zhí)行所耗費的時間7.平滑重啟 通過配置文件中設置lvs-ips參數(shù)實現(xiàn)平滑重啟功能星压,否則重啟Altas的瞬間那些SQL請求都會失敗。該參數(shù)前面掛接的lvs的物理網(wǎng)卡的ip鬼譬,注意不是虛ip娜膘。平滑重啟的條件是至少有兩臺配置相同的Atlas且掛在lvs之后
地址:https://github.com/Qihoo360/Atlas
3.heisenberg(百度)
強大好用的mysql分庫分表中間件,來自百度 其優(yōu)點: 分庫分表與應用脫離,分庫表如同使用單庫表一樣 減少db連接數(shù)壓力 熱重啟配置 可水平擴容 遵守Mysql原生協(xié)議 讀寫分離 無語言限制优质,mysqlclient,c,java等都可以使用Heisenberg服務器通過管理命令可以查看竣贪,如連接數(shù),線程池巩螃,結點等演怎,并可以調整 采用velocity的分庫分表腳本進行自定義分庫表,相當?shù)撵`活qq群:150720285 郵箱:brucest0078@gmail.com
網(wǎng)址:https://github.com/songwie/heisenberg
4.alibaba.cobar(是阿里巴巴(B2B)部門開發(fā))
Cobar是阿里巴巴(B2B)部門開發(fā)的一種關系型數(shù)據(jù)的分布式處理系統(tǒng)避乏,它可以在分布式的環(huán)境下看上去像傳統(tǒng)數(shù)據(jù)庫一樣為您提供海量數(shù)據(jù)服務爷耀。那么具體說說我們?yōu)槭裁匆盟蛘fcobar--能干什么拍皮?以下是我們業(yè)務運行中會存在的一些問題:1.隨著業(yè)務的進行數(shù)據(jù)庫的數(shù)據(jù)量和訪問量的劇增歹叮,需要對數(shù)據(jù)進行水平拆分來降低單庫的壓力,而且需要高效且相對透明的來屏蔽掉水平拆分的細節(jié)铆帽。2.為提高訪問的可用性咆耿,數(shù)據(jù)源需要備份。3.數(shù)據(jù)源可用性的檢測和failover锄贼。4.前臺的高并發(fā)造成后臺數(shù)據(jù)庫連接數(shù)過多票灰,降低了性能,怎么解決宅荤。 針對以上問題就有了cobar施展自己的空間了屑迂,cobar中間件以proxy的形式位于前臺應用和實際數(shù)據(jù)庫之間,對前臺的開放的接口是mysql通信協(xié)議冯键。將前臺SQL語句變更并按照數(shù)據(jù)分布規(guī)則轉發(fā)到合適的后臺數(shù)據(jù)分庫惹盼,再合并返回結果,模擬單庫下的數(shù)據(jù)庫行為惫确。
1.通過Cobar提供一個名為test的數(shù)據(jù)庫手报,其中包含t1,t2兩張表。后臺有3個MySQL實例(ip:port)為其提供服務改化,分別為:A,B,C掩蛤。2.期望t1表的數(shù)據(jù)放置在實例A中,t2表的數(shù)據(jù)水平拆成四份并在實例B和C中各自放兩份陈肛。t2表的數(shù)據(jù)要具備HA功能揍鸟,即B或者C實例其中一個出現(xiàn)故障,不影響使用且可提供完整的數(shù)據(jù)服務句旱。cabar優(yōu)點總結:1.數(shù)據(jù)和訪問從集中式改變?yōu)榉植迹?(1)Cobar支持將一張表水平拆分成多份分別放入不同的庫來實現(xiàn)表的水平拆分 (2)Cobar也支持將不同的表放入不同的庫 (3) 多數(shù)情況下阳藻,用戶會將以上兩種方式混合使用 注意N薄:Cobar不支持將一張表,例如test表拆分成test_1,test_2, test_3.....放在同一個庫中腥泥,必須將拆分后的表分別放入不同的庫來實現(xiàn)分布式匾南。2.解決連接數(shù)過大的問題。3.對業(yè)務代碼侵入性少蛔外。4.提供數(shù)據(jù)節(jié)點的failover,HA: (1)Cobar的主備切換有兩種觸發(fā)方式蛆楞,一種是用戶手動觸發(fā),一種是Cobar的心跳語句檢測到異常后自動觸發(fā)冒萄。那么臊岸,當心跳檢測到主機異常橙数,切換到備機尊流,如果主機恢復了,需要用戶手動切回主機工作灯帮,Cobar不會在主機恢復時自動切換回主機崖技,除非備機的心跳也返回異常。 (2)Cobar只檢查MySQL主備異常钟哥,不關心主備之間的數(shù)據(jù)同步迎献,因此用戶需要在使用Cobar之前在MySQL主備上配置雙向同步。 cobar缺點: 開源版本中數(shù)據(jù)庫只支持mysql腻贰,并且不支持讀寫分離吁恍。
網(wǎng)址:https://github.com/alibaba/cobar
5.MyCAT(基于阿里開源的Cobar產(chǎn)品而研發(fā))
什么是MYCAT
一個徹底開源的,面向企業(yè)應用開發(fā)的大數(shù)據(jù)庫集群 支持事務播演、ACID冀瓦、可以替代MySQL的加強版數(shù)據(jù)庫 一個可以視為MySQL集群的企業(yè)級數(shù)據(jù)庫,用來替代昂貴的Oracle集群 一個融合內存緩存技術写烤、NoSQL技術翼闽、HDFS大數(shù)據(jù)的新型SQLServer結合傳統(tǒng)數(shù)據(jù)庫和新型分布式數(shù)據(jù)倉庫的新一代企業(yè)級數(shù)據(jù)庫產(chǎn)品 一個新穎的數(shù)據(jù)庫中間件產(chǎn)品
關鍵特性
支持SQL92標準 支持MySQL、Oracle洲炊、DB2感局、SQL Server、PostgreSQL等DB的常見SQL語法 遵守Mysql原生協(xié)議暂衡,跨語言询微,跨平臺,跨數(shù)據(jù)庫的通用中間件代理狂巢。 基于心跳的自動故障切換撑毛,支持讀寫分離,支持MySQL主從隧膘,以及galera cluster集群代态。 支持Galera for MySQL集群寺惫,Percona Cluster或者MariaDB cluster 基于Nio實現(xiàn),有效管理線程蹦疑,解決高并發(fā)問題西雀。 支持數(shù)據(jù)的多片自動路由與聚合,支持sum,count,max等常用的聚合函數(shù),支持跨庫分頁歉摧。 支持單庫內部任意join艇肴,支持跨庫2表join,甚至基于caltlet的多表join叁温。 支持通過全局表再悼,ER關系的分片策略,實現(xiàn)了高效的多表join查詢膝但。 支持多租戶方案冲九。 支持分布式事務(弱xa)。 支持XA分布式事務(1.6.5)跟束。 支持全局序列號莺奸,解決分布式下的主鍵生成問題。 分片規(guī)則豐富冀宴,插件化開發(fā)灭贷,易于擴展。 強大的web略贮,命令行監(jiān)控甚疟。 支持前端作為MySQL通用代理,后端JDBC方式支持Oracle逃延、DB2览妖、SQL Server 、 mongodb 真友、巨杉黄痪。 支持密碼加密 支持服務降級 支持IP白名單 支持SQL黑名單、sql注入攻擊攔截 支持prepare預編譯指令(1.6) 支持非堆內存(Direct Memory)聚合計算(1.6) 支持PostgreSQL的native協(xié)議(1.6) 支持mysql和oracle存儲過程盔然,out參數(shù)桅打、多結果集返回(1.6) 支持zookeeper協(xié)調主從切換、zk序列愈案、配置zk化(1.6) 支持庫內分表(1.6) 集群基于ZooKeeper管理挺尾,在線升級,擴容站绪,智能優(yōu)化遭铺,大數(shù)據(jù)處理(2.0開發(fā)版)。
MYCAT監(jiān)控
支持對Mycat、Mysql性能監(jiān)控 支持對Mycat的JVM內存提供監(jiān)控服務支持對線程的監(jiān)控 支持對操作系統(tǒng)的CPU魂挂、內存甫题、磁盤、網(wǎng)絡的監(jiān)控
網(wǎng)址:http://www.mycat.org.cn/
6.Oceanus(58同城數(shù)據(jù)庫中間件)
Oceanus致力于打造一個功能簡單涂召、可依賴坠非、易于上手、易于擴展果正、易于集成的解決方案炎码,甚至是平臺化系統(tǒng)。擁抱開源秋泳,提供各類插件機制集成其他開源項目潦闲,新手可以在幾分鐘內上手編程,分庫分表邏輯不再與業(yè)務緊密耦合迫皱,擴容有標準模式歉闰,減少意外錯誤的發(fā)生。 Oceanus內部名詞定義 datanode:數(shù)據(jù)源節(jié)點舍杜。為一個數(shù)據(jù)源命名新娜,配置鏈接屬性、報警實現(xiàn) namenode:數(shù)據(jù)源的簇既绩。為一組數(shù)據(jù)源命名,指定這組數(shù)據(jù)源的負載方式还惠、訪問模式饲握、權重table:映射表。匹配解析sql中的table名稱蚕键,命中table標簽的name屬性值后救欧,會執(zhí)行約定的路由邏輯 bean:實體。由其他標簽引用锣光,實體類必須有無參的構造函數(shù) tracker:監(jiān)控埋點笆怠。涉及到計算和IO的功能點都有監(jiān)控點,自定義一個埋點實現(xiàn)類誊爹,當功能耗時超出預期時會執(zhí)行其中的回調函數(shù)蹬刷,便于監(jiān)控和優(yōu)化系統(tǒng)
網(wǎng)址:https://github.com/58code/Oceanus
7.OneProxy(原支付寶首席架構師樓方鑫開發(fā),)
OneProxy是由原支付寶首席架構師樓方鑫開發(fā)频丘,目前由樓方鑫創(chuàng)立的杭州平民軟件公司(@平民架構)提供技術支持办成。它保留了MySQL-Proxy0.8.4官方版本上其協(xié)議處理和軟件框架,然后對軟件做了大量優(yōu)化搂漠,極大增強了系統(tǒng)的并發(fā)能力迂卢。目前已有多家公司在生成環(huán)境中使用,其中包括了支付、電商等行業(yè)而克。 OneProxy的主要功能有:1.垂直分庫2.水平分表3.Proxy集群【暫無文檔】4.讀高可用5.讀寫分離(master不參與讀)6.讀寫分離(master參與讀)7.寫高可用8.讀寫隨機9.SQL檢查10.SQL統(tǒng)計【暫無文檔】11.任務隊列監(jiān)控【暫無文檔】12.連接池管理【暫無文檔】
網(wǎng)址:http://www.cnblogs.com/youge-OneSQL/articles/4208583.html
8.vitess(谷歌開發(fā)的數(shù)據(jù)庫中間件)
谷歌開發(fā)的數(shù)據(jù)庫中間件靶壮,集群基于ZooKeeper管理,通過RPC方式進行數(shù)據(jù)處理员萍,總體分為亮钦,server,commandline充活,gui監(jiān)控3部分蜂莉。
網(wǎng)址:https://github.com/youtube/vitess
9.TSharding(蘑菇街白輝)
把這個組件應用到交易的數(shù)據(jù)庫,在服務層和DAO層混卵,訂單容量擴展到千億量級映穗,并且可以繼續(xù)水平擴展。TSharding上線一年之后幕随,我們將其開放出來蚁滋。借鑒了MybatisPlugin的方式
網(wǎng)址:https://github.com/baihui212/tsharding