我們知道最簡單的一種擴充是MySQL 主從複制,通過1主多從來實作讀的性能擴充,但是這樣的擴充不僅僅有局限性,而且寫入的問題并沒有解決。目前市場上用三類解決方案:
1.用戶端分片(推薦)
程式用戶端進行分庫分表。也就是直接在程式裡面進行資料庫和表的拆分,例如使用者表。根據使用者的UID,例如13678789,根據最後一位,可以拆分為0-9共10個資料庫,把尾号是0的存入db_user_0資料庫,尾号是1的存入db_user_1資料庫,select的時候也是一樣。然後根據倒數第二位,可以拆分為0-9共10張表,根據倒數第二的尾号寫入相應的表中。例如13678789這個UID的資訊,寫入db_user_9資料庫的table_user_8的表中。
2.各種資料成中間件:
2.1 MySQL-Proxy(不強烈推薦)
先說MySQL自己的,MySQL Proxy: 是處在你的MySQL資料庫客戶和服務端之間的程式,它還支援嵌入性腳本語言Lua。這個代理可以用來分析、監控和變換(transform) 通信資料。

MySQL Proxy最強大的一項功能是實作“讀寫分離(Read/Write Splitting)”。基本的原理是讓主資料庫處理事務性查詢,而從資料庫處理SELECT查詢。資料庫複制被用來把事務性查詢導緻的變更同步到叢集中的從資料庫。
2.2 Atlas(不強烈推薦)
Atlas是由 Qihoo 360公司Web平台部基礎架構團隊開發維護的一個基于MySQL協定的資料中間層項目。它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基礎上,修改了大量bug,添加了很多功能特性。目前該項目在360公司内部得到了廣泛應用,很多MySQL業務已經接入了Atlas平台,每天承載的讀寫請求數達幾十億條。同時,有超過50家公司在生産環境中部署了Atlas,超過800人已加入了我們的開發者交流群,并且這些數字還在不斷增加。
主要功能:
- 讀寫分離
- 從庫負載均衡
- IP過濾
- 自動分表
- DBA可平滑上下線DB
-
自動摘除當機的DB
簡單的說是在MySQL Proxy的基礎上做了二次開發,并支援了自動分表的特性。但是僅支援非常有限的rang進行分表。目前有先的分支Atlas Sharding來實作更多的功能。
具體的功能清看Github,非常詳細
https://github.com/Qihoo360/Atlas/blob/master/README_ZH.md2.3 Cobar(不強烈推薦)
Cobar是阿裡巴巴開源的一個,提供關系型資料庫(MySQL)分布式服務的中間件,它可以讓傳統的資料庫得到良好的線性擴充,并看上去還是一個資料庫,對應用保持透明。
- 産品在阿裡巴巴穩定運作3年以上。
- 接管了3000+個MySQL資料庫的schema。
- 叢集日處理線上SQL請求50億次以上。
- 叢集日處理線上資料流量TB級别以上。
詳情:
https://github.com/alibaba/cobar/wiki2.4 MyCAT(不強烈推薦)
MyCAT基于阿裡開源的Cobar産品而研發的,目前社群相對比較活躍,功能也是最多的一個MySQL中間件,
什麼是MYCAT?
- 一個徹底開源的,面向企業應用開發的大資料庫叢集
- 支援事務、ACID、可以替代MySQL的加強版資料庫
- 一個可以視為MySQL叢集的企業級資料庫,用來替代昂貴的Oracle叢集
- 一個融合記憶體緩存技術、NoSQL技術、HDFS大資料的新型SQL Server
- 結合傳統資料庫和新型分布式資料倉庫的新一代企業級資料庫産品
- 一個新穎的資料庫中間件産品
3.MySQL 叢集
3.1 MySQL Cluster(強烈不推薦)
MySQL Cluster 是 MySQL 适合于分布式計算環境的高實用、高備援版本。它采用了NDB Cluster 存儲引擎,允許在1個 Cluster 中運作多個MySQL伺服器。幾乎無應用案例,不推薦。
3.2 Percona XtraDB Cluster方案(推薦)
Percona XtraDB Cluster簡稱PXC。Percona Xtradb Cluster的實作是在原mysql代碼上通過Galera包将不同的mysql執行個體連接配接起來,實作了multi-master的叢集架構。
上圖中有三個執行個體,組成了一個叢集,而這三個節點與普通的主從架構不同,它們都可以作為主節點,三個節點是對等的,這種一般稱為multi-master架構,當有用戶端要寫入或者讀取資料時,随便連接配接哪個執行個體都是一樣的,讀到的資料是相同的,寫入某一個節點之後,叢集自己會将新資料同步到其它節點上面,這種架構不共享任何資料,是一種高備援架構。
以上為個人生産經驗,不代表産品本身的相關利益,不過還好了,都是開源的,大家可以根據自身情況選擇。你會發現并沒有強烈推薦的方案,主要是大家要考慮自身業務的情況進行選擇,例如核心業務。連主從切換都不推薦自動,而是手動,甯願業務不能通路,也不能出現自動主從切換導緻資料丢失。