Memcache分散式部署方案
前言
應該是很久之前,我開始研究Memcache,寫了一系列的學習心得,比如《Discuz!的Memcache快取實現》等。後面的好幾十條回覆也讓這篇文章成為了此部落格中頗受關注的一員。
同時在百度和Google,關鍵詞Memcache在長達一年多的時間裡佔據著第二位(第一位是官方),為很多需要了解或者應用Memcache的朋友提供了一些資訊,但是我始終覺著還不夠,於是本文誕生。
嘮嘮叨叨說了半天,如果你覺著前面囉嗦,請直接看最後一大段,那是本文的重點。
基礎環境
其實基於PHP擴充套件的Memcache客戶端實際上早已經實現,而且非常穩定。先解釋一些名詞,Memcache是danga.com的一個開源專案,可以類比於MySQL這樣的服務,而PHP擴充套件的Memcache實際上是連線Memcache的方式。
首先,進行Memcache被安裝具體可檢視:
Linux下的Memcache安裝:http://www.ccvita.com/257.html
Windows下的Memcache安裝:http://www.ccvita.com/258.html;
其次,進行PHP擴充套件的安裝,官方地址是http://pecl.php.net/package/memcache
最後,啟動Memcache服務,比如這樣
/usr/local/bin/memcached –d –p 11213 –u root –m 10 –c 1024 –t 8 –P /tmp/memcached.pid |
/usr/local/bin/memcached –d –p 11214 –u root –m 10 –c 1024 –t 8 –P /tmp/memcached.pid |
/usr/local/bin/memcached –d –p 11215 –u root –m 10 –c 1024 –t 8 –P /tmp/memcached.pid |
啟動三個只使用10M記憶體以方便測試。
分散式部署
PHP的PECL擴充套件中的memcache實際上在2.0.0的版本中就已經實現多伺服器支援,現在都已經2.2.5了。請看如下程式碼
$memcache = new Memcache; |
$memcache->addServer(`localhost`, 11213); |
$memcache->addServer(`localhost`, 11214); |
$memcache->addServer(`localhost`, 11215); |
$memStats = $memcache->getExtendedStats(); |
print_r($memStats); |
通過上例就已經實現Memcache的分散式部署,是不是非常簡單。
分散式系統的良性執行
在Memcache的實際使用中,遇到的最嚴重的問題,就是在增減伺服器的時候,會導致大範圍的快取丟失,從而可能會引導資料庫的效能瓶頸,為了避免出現這種情況,請先看Consistent hashing演算法,中文的介紹可以參考這裡,通過存取時選定伺服器演算法的改變,來實現。
修改PHP的Memcache擴充套件memcache.c的原始碼中的
“memcache.hash_strategy” = standard |
為
“memcache.hash_strategy” = consistent |
重新編譯,這時候就是使用Consistent hashing演算法來尋找伺服器存取資料了。
有效測試資料表明,使用Consistent hashing可以極大的改善增刪Memcache時快取大範圍丟失的情況。
NonConsistentHash: 92% of lookups changed after adding a target to the existing 10
NonConsistentHash: 90% of lookups changed after removing 1 of 10 targets
ConsistentHash: 6% of lookups changed after adding a target to the existing 10
ConsistentHash: 9% of lookups changed after removing 1 of 10 targets
相關文章
- 關於分散式快取memcache分散式快取
- 一文讀懂 Redis 分散式部署方案Redis分散式
- 分散式爬蟲的部署之Scrapyd分散式部署分散式爬蟲
- 分散式方案求解.分散式
- 分散式部署ArcSde(轉)分散式
- HBase分散式部署薦分散式
- 分散式爬蟲的部署之Gerapy分散式管理分散式爬蟲
- MinIO 的分散式部署分散式
- Ceph分散式叢集部署分散式
- 分散式快取方案分散式快取
- 短影片直播系統為什麼需要分散式部署,淺談分散式部署分散式
- 分散式爬蟲的部署之Scrapyd批量部署分散式爬蟲
- 搞懂分散式技術12:分散式ID生成方案分散式
- 【Memache】部署Memcache,採用Supervisord管理Mac
- 分散式技術中不可或缺的分散式互斥方案分散式
- Redis 偽分散式安裝部署配置Redis分散式
- LTS分散式任務排程部署分散式
- 分散式Jmeter壓測機的部署分散式JMeter
- JEESZ分散式框架開發環境部署分散式框架開發環境
- Mysql分散式部署 - 多級複製MySql分散式
- Hbase分散式安裝部署過程分散式
- 分散式鎖的解決方案分散式
- 分散式鎖的實現方案分散式
- Redis分散式鎖解決方案Redis分散式
- Redis 分散式鎖解決方案Redis分散式
- SAP HANA分散式解決方案分散式
- 分散式中灰度方案實踐分散式
- redis實現分散式id方案Redis分散式
- 分散式事務解決方案分散式
- 搞懂分散式技術16:淺談分散式鎖的幾種方案分散式
- 部署GPS分散式檔案系統分散式
- GFS分散式檔案系統部署解析分散式
- Mac部署hadoop3(偽分散式)MacHadoop分散式
- CentOS7 Hbase-1.3.1 分散式部署CentOS分散式
- 分散式事務解決方案(五)【TCC型方案】分散式
- 分散式柔性事務的TCC方案分散式
- 分散式全域性ID生成方案分散式
- 分散式下的WebSocket解決方案分散式Web