最近在看JD,發現高級程序員都須要會大減Memcachedhtml
Memcached官網
Memcached源代碼
Memcached Wikilinux
自由而且開源、高性能、分佈式內存對象緩存系統、通用的、經過減輕數據庫負載來提升Web應用的運行速度。
Memcached是存儲任何小塊數據(字符串、對象)內存型的key-value存儲,數據庫調用、API調用、或者頁面渲染。
Memcached簡單而且強大。簡單的設計促進了快速的部署、易於開發、並解決了許多大數據告訴緩存面臨的問題。API是最流行的語言。git
Memcached能夠工做在絕大部分的類Linux和BSD系統。沒有官方支持的Windows編譯包。程序員
一般,你可使用操做系統提供的package安裝memcached。OS將會解決依賴並提供安全更新。
這種方式是很是簡單的。使用Debian或者Ubuntu:github
apt-get install memcached
使用Redhat或者Fedora數據庫
yum install memcached
能夠參考系統包管理系統獲取更多文檔信息。編程
大部分用戶運行在較舊的操做系統,例如Ubuntu長期支持發佈版本已經有些年頭了。請記住舊式操做系統沒有較新版本的memcached。使用舊版本將會暴露在Bug並丟失一些新的特性。甚至新版本的memcached在一些操做系統上沒有可用的最新版本。
若是在使用中數據軟件發生bug,不會有更多的幫助。請嘗試更新安裝包,或者從源代碼進行安裝。後端
Memcached依賴與libevent。若是操做系統安裝在2010年以後安裝包,操做系統將會提供足夠好的安裝包。緩存
apt-get install libevent-dev
yum install libevent-devel
若是但願從源代碼進行編譯。
從源代碼進行安裝:安全
wget https://memcached.org/latest [you might need to rename the file] tar -zxf memcached-1.x.x.tar.gz cd memcached-1.x.x ./configure --prefix=/usr/local/memcached make && make test && sudo make install
查看./configure --help
查看所有選項。SASL(編者注:查看附錄1)支持須要一些額外的庫。
Memcached自己是簡單的key/value存儲程序。安裝它不會自動加速或者緩存任何數據:您的應用程序須要進行編程,以利用這項服務。應用程序須要客戶端,能夠從現有的語言中選擇。
略
Memcached適配簡單的硬件規格。簡短來講,可使用較低的CPU,將會盡量多的使用內存,從輕度到中度的網絡佔用,這取決於你的內容的平均大小。
Memcached是典型的輕量CPU使用,這是因爲其目標響應速度很是快。Memcached是多線程的,默認使用4路工做線程。這並不意味着你須要運行100核心的memached來知足你的需求,若是你須要依賴memcached的多線程。通常輕快來講,任何位數的處理器均可以勝任。大多數只須要單一的memcached線程。
比較大的memcached是把多個主機的內存整合在一塊兒,讓應用看這些內存是一個巨大的內存。內存越多越好。然而,不要把這些內存遠離於其餘須要從中受益的服務。
每一個Memcached服務器的可用內存有着大約相同的數量是有助於提供服務。一致性的節點意味着你能夠隨意增長或者一處服務器,不須要關心是否某個節點特別重要,或者丟失了一個問題節點。
Memcached服務器分配物理內存,並有百分之幾做爲額外補充。不要把內存分配到swap上,過分指望Linux swap交換來保證應用。性能很是很是差。若是你的服務器使用swap須要額外的監控進行觀察,若是必要進行調整。
沒有必要。使用額外的高速內存看起來並不會受益。
Memcached可以很好的在正常負責條件下的NUMA系統進行工做。當memcached運行在跨越多個NUMA節點時,在標準條件下測量到性能降低。若是在MUMA系統並對性能極端敏感,最好的工做方式是memcached運行在每一個NUMA的獨立節點,經過mumactl或者相似技術綁定這些實例。
編者注:NUMA在當前指的是高性能服務器主流體系結構的一種,便於大規模並行。
參考:
Linux 的 NUMA 技術
NUMA架構的CPU -- 你真的用好了麼?
簡單的佈局是在Web服務器上或者計算節點上使用劃份內存。若是你的Web服務器有4G的內存,可是你的應用和操做系統就已經使用了2GB內存,你應當給memcached節點分配1.5GB或者更多內存。
平均攤薄分配的內存是一種很好的方式,若是丟失某個Web服務器不會形成很大的問題。
附加說明額外的維護,密切關注應用從memcached多節點獲取,在全部memcached清單中均可以終止訪問。當你的應用有內存泄漏風險,能夠冒險的運行在機器的swap交換分區,或者關閉memcached進程。一般,使用很是少的swap或者不使用swap是很好的方法。最好直接激活服務關閉,也不要服務轉變成殭屍狀態。
在數據庫上運行Memcached不是很好的主意。若是有數據庫主機,儘可能把更多的內存提供給數據庫。當發生緩存未命中時,確保數據庫的索引和數據已經在內存中,將會獲取更多益處。
用於memcached的專用硬件意味着,並不須要擔憂機器上的其餘應用干擾memcached。能夠在一臺單一主機或者較少的機器添加大量內存(64GB+)爲應用程序提供內存需求。
這個方案有額外的好處,可以更容易的擴展大量的內存空間。而不是天街可能會空閒的新服務器。你能夠在專門的機器上投入巨大的內存來解決問題。
最後的幾個主意事項。越是精簡memcached的集羣節點數量,當機器掛掉時越讓你痛苦。
假設你的cache命中率有90%。若是你有10個memcached服務器,其中一個掛掉,你的緩存命中率可能會降低到82¥左右。若是哪些10%的內存未命中正在執行,一個掛掉意味着跳轉到18%到20%,意味着你的後端忽然處理以前的兩倍多的請求。雖然實際影響可會有所不一樣,數據庫仍然會適當的處理重複查詢,當你的典型緩存未命中,一般數據庫當中的元素的會最少查詢兩次!
所以當你要購買一組144GB內存的服務器時,但你只能承擔4個。如今你丟失單一服務器,你的25%的緩存將會丟失,你的命中率將會更低。
在硬件規範上給出超出標記,必定要有很是好的能力進行計劃。要提早計劃好,有多少服務器丟失會形成你的應用程序被淹沒壓垮。確保總有更多的服務。
若是你不能關閉memcached實例,您確保升級(硬件或者軟件),而且正常的失敗時很是困難的。提交作好計劃。
根據你的平均memcaeched的元素大小網絡要求將會有很大不一樣。應用程序應當保持存儲元素比較小,意味着不一樣方式鏈接前兆交換機,或者徹底在一塊兒。
大部分網絡部署須要較低的需求(<10mbps每一個實例),可是支持重度服務時具備挑戰性的。也就是說,若是你使用InfiniBand(見附錄2)或者萬兆以太網鏈接Memcached實例,你將會更多收益於它們的傳播速度。
SASL全稱Simple Authentication and Security Layer,是一種用來擴充C/S模式驗證能力的機制。在Postfix能夠利用SASL來判斷用戶是否有權使用轉發服務,或是辨認誰在使用你的服務器。
InfiniBand架構是一種支持多併發連接的「轉換線纜」技術,在這種技術中,每種連接均可以達到2.5 Gbps的運行速度。這種架構在一個連接的時候速度是500 MB/秒,四個連接的時候速度是2 GB/秒,12個連接的時候速度能夠達到6 GB /秒。