讀寫分離之Amoeba

相信初創公司,剛開始的時候,通常都是單機數據庫。然而數據量上來了,你就不來不考慮數據庫集羣了。
通常的話,讀都會比寫多,差很少8:2的比例,具體業務具體不一樣。
這裏就介紹下Amoeba(變形蟲)。
Amoeba是什麼呢?
Amoeba(變形蟲)項目,該開源框架於2008年 開始發佈一款 Amoeba for Mysql軟件。這個軟件致力於MySQL的分佈式數據庫前端代理層,它主要在應用層訪問MySQL的 時候充當SQL路由功能,專一於分佈式數據庫代理層(Database Proxy)開發。座落與 Client、DB Server(s)之間,對客戶端透明。具備負載均衡、高可用性、SQL 過濾、讀寫分離、可路由相關的到目標數據庫、可併發請求多臺數據庫合併結果。 經過Amoeba你可以完成多數據源的高可用、負載均衡、數據切片的功能,目前Amoeba已在不少 企業的生產線上面使用。
固然Amoeba也有不利的地方,因此當你設計架構的時候,應該把這些因素考慮進去。前端

1.目前還不支持事務;
2.暫時不支持存儲過程,官方說近期會支持;
3.不適合從Amoeba導數據的場景或者對大數據量查詢的query並不合適,好比一次請求返回10w以上甚至更多數據的場合;
4.暫時不支持分庫分表,amoeba目前只作到分數據庫實例,每一個被切分的節點須要保持庫表結構一致。

若實際項目中所須要的功能正式Amoeba的短板,建議使用Mysql Proxy做爲中間件,或者在應用層經過程序控制數據源,手動實現數據庫讀寫分離。
固然Amoeba除了上面的明顯的缺點外。在實際使用中,你會遇到不少問題。一個很明顯的問題就是:如何解決主從數據庫同步延遲問題?
這裏我能夠提供一些思路:sql

一、有更新數據後的 讀取相關數據動做,都從默認到主庫;
二、利用緩存;插入新的數據,會有last_id返回,組裝成數據,緩存到前端。讀取此 id 數據時,先從緩存取。
...

固然問題提出來,有不少解決方案,具體業務具體分析。這裏只作參考。
關於Amoeba環境的配置,我也很少介紹,網上一大堆教程。 這裏我只簡單介紹下Amoeba,具體使用,須要本身去摸索。本身不去摸索,永遠學不會。
Amoeba使用指南(http://docs.hexnova.com/amoeba/
其實技術問題都好解決,關鍵是要提出問題,而後怎樣合理設計架構去解決問題。我喜歡研究各類技術解決方案,而後比較之,吸收精華,設計出最佳的解決方案。
針對上面問題,你們能夠提出本身的思考。歡迎留言討論。數據庫

相關文章
相關標籤/搜索