標籤:

memcached plugin(handlersocket),Memcached的一點看法

許多人應該看過一篇文章,handlersocket超過70萬/秒的QPS很令人興奮。是否它就適合我們的生產環境,能夠滿足我們的需求呢?

memcached plugin和handlersocket可以認為是同一類東東,我這裡不做區分了。

我們先要理清楚一些概念,

1、我們需要明確,這種組件是為特殊的目的而服務的,不是一個通用型的解決方案。你要明確知道你所使用的數據。

MySQL 5.6提供了 memcached plugin,和 handlersocket類似,它的主要作用是減輕資料庫的負荷。使用一個專門的cache層來存儲一些特定的數據。比如一些不經常變動的數據,一些複雜的查詢的結果集,靜態頁面輸出;

2、對於數據架構來說,成熟的產品/架構/解決方案會保證資料庫的穩定,不致成為整個系統的瓶頸和不穩定點。handlersocket嚴格來說,並 不是一個成熟的產品,雖然MySQL 5.6提供了memcachednplugin ,但Oracle官方通常會在某個新版本先推出功能,然後在下一個版本在提供優化,所以大家對於MySQL 5.6 memcachednplugin 的穩定性和性能,不要報以太高的期望值,如果有興趣,可以試試MySQL 5.7的memcachednplugin

3、夠用就行了。資料庫要求的是提供良好的性能體驗,如果你只是簡單的數據查詢,如果你的數據能夠hold在內存,那麼訪問速度基本能夠滿足絕大部分應用的需要,你應該在定量分析的基礎上,確認是否需要一個handlersocket來提供更快的響應。由於handlersocket和InnoDB buffer pool都是內存,那麼對於使用memcached plugin(handlersocket)帶來的性能提升,建議不要報以太高的期望值,因為我們所做的所有性能評估都是受硬體環境的限制,即使你優化到了極致。

4、數據應該在接近應用層做優化,這樣所取得的效果越佳。 資料庫產品組件,無論是memcached plugin(handlersocket),還是InnoDB buffer pool,都不是很清楚數據,所以對於數據訪問出現熱點,瓶頸,首先要從應用層考慮優化訪問策略,不能盲目地升級資料庫硬體/產品。從架構上,從應用層上重新設計,可以讓整個系統獲得更好的可擴展性,而從資料庫產品著手,因為傳統的資料庫產品本身往往是集中式的存儲,容易成為整個系統的瓶頸所在,並不適合再添加額外的組件,特別是對於磁碟IO密集型的負荷,這類緩存插件是完全沒有作用的;

5、分散式的memcached + MySQL,現在也有了redis + MySQL,往往可以對大規模系統提供更好的解決方案和體驗。因為它更多代表了一種架構的思想,是很成熟的解決方案,缺點在於也許你要同時處理兩個資料庫產品,但這是可以承受的代價,在流量大了,擴展性成為問題了,在不同的產品存儲不同的數據,你才能更好的進行優化和設計,把每個產品利用到極致。我么需要有一個意識,如果一個資料庫產品,試圖同時做到內存資料庫和基於磁碟的資料庫,往往是費力不討好,這點在redis的發展過程中可見一斑;

6、有一種看法,使用handlersocket可以避免一種情況出現,在高並發訪問系統中,可能memcahed的一個節點掛掉,會導致資料庫負載飆升,那麼使用handlersocket是否可以解決這個問題呢,如果都是很簡單的查詢,maybe,但其實這不是解決辦法的好思路,如果你是一個大規模訪問系統,那麼我們有足夠的研發實力,我們可以在應用層上做更多的設計來解決節點掛掉,或者堵塞的問題。成本更低,伸縮性好得多的方案是在memcached節點掛了的時候,通過應用層的設計,減少同時對資料庫進行大量訪問的可能。這方面其實也有許多成熟的idea,大家可以參考下業內一些大公司的設計方案,如facebook.

我不是排斥使用handlersocket,如果一個東西能夠解決問題,那麼就有可取之道。作為一種偏冷的解決方案,handlersocket的思想還是值得稱道的,所以官方才會引入這種特性。重要的是,我們需要從各種角度衡量、評估,許多時候,並不是產品、架構的因素,人員、團隊、管理風格更決定了你選擇各種解決方案。

摘錄:

為什麼handlernsocket 會更快

Because of the following reasons,nHandlerSocket is much faster than the

mysqld/libmysql pair in some circumstances:

- HandlerSocket manipulates datanwithout parsing SQL, which causes less

CPU usage.

- HandlerSocket reads many requestsnfrom clients and executes their

requests in bulk, whichncauses less CPU and disk usage.

- HandlerSocket client/servernprotocol is more compact than the

mysql/libmysqlnpair, which causes less network usage.


推薦閱讀:

半同步複製介紹
MySQL訓練——SELECT in SELECT@sqlzoo.net
2017年MySQL資料庫技術嘉年華 —— 有態度的技術大會
如何才能招到優秀的 MySQL DBA?

TAG:MySQL |