Mysql
高並發、高寫入數據庫的基礎設施
我的要求是:
- 3000 個連接
- 70-85% 寫入與讀取
目前,我們在 700 個連接時最大限度地使用高 CPU、超大型實例。所有 8 個核心都已達到最大值。我們認為這是並發連接數,因為記憶體很好。寫入本身非常簡單(驗證很慢)。要擴展到 3000,我們需要轉到多個伺服器,目前選項:
- MySQL分片
- MongoDB集群
- 卡桑德拉
- Hadoop & MySQL(Hadoop 記憶體,單一轉儲到 MySQL)
- MongoDB & MySQL(我們使用 mongo 代替 Hadoop 進行記憶體)
要處理這個數量的連接,有幾個問題:
- MySQL Sharding 可以處理並發連接嗎?
- 任何一個主控都可以處理這些並發連接,還是像 Mongo 這樣的多頭是更好的選擇?
如果我沒有很好地描述我的問題,我深表歉意。請提問。
如果您使用 MySQL 作為主數據庫,您可能需要考慮通過 MySQL 複製使用星型拓撲。
現在,在你對 MySQL 複製說 UGHHH、ROFL 和 OMG 之前,請聽我說完。
星型拓撲允許您寫入一個 DB 伺服器(稱為 Distribution Mster
$$ DM $$) 並將 SQL 命令發送到多個數據庫伺服器。您如何設置這樣的數據庫基礎架構? 這是描述
您有 5 個數據庫伺服器(伺服器 A、B、C、D、E)
伺服器 A
在 MySQL Replication 設置中,它將是 Master
作為 DM 扮演特殊角色
伺服器 B、C、D、E 的主人
所有表都使用儲存引擎 BLACKHOLE (/dev/null)
只儲存二進制日誌
裸機
好處
- 非常快的寫入,因為 DM 上的所有表都使用 BLACKHOLE
- 網路延遲不是問題,因為讀取佔數據庫活動的 15-30%
- 所有從站都嚴格從 DM 更新
伺服器 B、C、D、E
A的奴隸
伺服器是重型 SELECT 的基礎
伺服器可以是虛擬的或裸機的
對於使用者表使用儲存引擎 InnoDB 的所有伺服器
- 它可以作為熱備用數據庫伺服器
- 可以針對它執行非侵入式備份
對於使用者表使用儲存引擎 MyISAM 的所有伺服器
- 設置只讀選項
- 表可以重做其行格式以加速讀取
我以前寫過這方面的文章
- https://serverfault.com/questions/264374/mysql-in-star-topology/264444#264444
- https://stackoverflow.com/questions/5273043/mysql-in-star-topology/5781504#5781504
使 MySQL 複製保持最佳狀態
- 使用 MySQL 5.5
- 使用半同步複製
- 調整 InnoDB 以使用更多 CPU
MySQL Cluster 可能是另一種分片方法。在這裡查看文章。
我也是 Cassandra 的忠實粉絲,但這在很大程度上取決於您的數據模型和您想要執行的查詢。Cassandra 的寫入速度非常快,因為它們在磁碟上總是連續的。