1. 程式人生 > >讀寫分離之Amoeba

讀寫分離之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除了上面的明顯的缺點外。在實際使用中,你會遇到很多問題。一個很明顯的問題就是:如何解決主從資料庫同步延遲問題?

這裡我可以提供一些思路:
1、有更新資料後的 讀取相關資料動作,都從預設到主庫;
2、利用快取;插入新的資料,會有last_id返回,組裝成資料,快取到前端。讀取此 id 資料時,先從快取取。
...

當然問題提出來,有很多解決方案,具體業務具體分析。這裡只做參考。

關於Amoeba環境的配置,我也不多介紹,網上一大堆教程。 這裡我只簡單介紹下Amoeba,具體使用,需要自己去摸索。自己不去摸索,永遠學不會。 
Amoeba使用指南(http://docs.hexnova.com/amoeba/

其實技術問題都好解決,關鍵是要提出問題,然後怎樣合理設計架構去解決問題。我喜歡研究各種技術解決方案,然後比較之,吸取精華,設計出最佳的解決方案。


針對上面問題,大家可以提出自己的思考。歡迎留言討論。