最近公司在進行緩存架構方面的調研,我主要對memcached在緩存大資料量情況下對系統硬體的影響和需求做了調研,以下是一些測試資料和調研結果:
memcached緩存不同資料量測試情況:
一、測試環境配置資訊
1. 緩存伺服器配置資訊:一共4台 ,三台是公司伺服器,一台是本機
node1: 單核 1g記憶體
node2: 單核
1g記憶體
node3: 單核 1g記憶體
node4: 4核 8g記憶體
2.運作在每台伺服器上的memcached執行個體配置資訊:
工作線程數量:4個
設定緩存大小:前三個結點是512mb,最後一個結點是4gb,叢集總緩存大小時5632mb
最大并發連接配接數:1024
二、對記憶體和cpu的影響測試資料及分析:
資料量
5千
1萬
10萬
100萬
1000萬
1億
記憶體
1.87mb
3.65mb
36.58mb
366.7mb
3.62gb
受測試環境限制,沒有測試
cpu
對cpu影響較小,對于1000萬條資料,單線程向memcached中寫,占用cpu比率為0.0%,嘗試分别在測試程式中啟動20個線程和100個線程同時向memcached寫資料,這兩種情況下每台memcached緩存伺服器的cpu占用率都不超過1%。
緩存資料量和占用記憶體大小成簡單線性關系,資料量的增加沒有對伺服器記憶體造成特殊影響
緩存資料量的大小對cpu沒有影響,寫緩存的請求數量對cpu有影響且影響較小
三、總結
1.cpu方面:低并發和大資料量下memcached對cpu要求很低,高并發情況官方說明是其對cpu要求也很低。
2.記憶體方面:隻要記憶體夠用(可橫向無限擴充),memcached緩存大資料量沒有問題(1gb可緩存約250萬條資料)。
2.memcached有兩個比較重要的限制,一是最大緩存時間為30天,二是一個緩存項目(key-value)的最大容量為1mb,這兩個限制可能會對具體項目造成一定影響,一定要注意。
附:一個測試場景的截圖
以下是更具體點的描述:
一、對于cpu的需求
memcached對cpu的依賴是輕量級的,因為它的設計目标就是能夠快速響應。memcached是多線程的,預設會有4個工作線程。對于一般情形,memcached在cpu低配的情形下也會是高效的。
二、對于ram的需求
memcached的設計目标就是能夠把分布在多個節點上主機的記憶體縫合在一起,讓我們的應用看到的是一個縫合之後的大塊記憶體,是以,可以這麼說:“記憶體越大越好”,具體大小則根據我們的應用場景來設定即可。
官方建議我們叢集各結點的記憶體大小是一緻的,叢集的均衡意味着我們可以很容易的增加或删除結點,而不用考慮它們在叢集中的權重大小。
配置設定記憶體時,不應占用全部實體記憶體,因為過度的配置設定記憶體可能會引起記憶體swap,導緻效率降低。
對于是否需要高速ram,官方的回答是:not so much。
三、對帶寬的需求
對帶寬的需求主要取決于并發量及緩存item的大小,是以,不同業務情況對帶寬的需求差别是比較大的。
四、memcached在硬體上的部署
1.使用專用伺服器:
能用專用伺服器當然是最好的了,好處不必多說,但也有一點需要注意,橫向擴充比縱向擴充有個好處,就是單個結點宕掉對總體的影響會更小,比如一個單機32g 、4台機器機器構成的叢集可靠性就比1台機器128g記憶體的可靠性要高。
2.部署在應用伺服器:
可以部署在應用伺服器或其它計算結點上,充分利用它們的空閑記憶體,比如一個web伺服器有4gb的ram,而運作在上面的app和os已經占用了2gb,我們可以配置設定1.5gb給我們的memcached執行個體。
但需要注意的是,這樣做會有一些風險,如果記憶體不足時可能會引起swap,而一個app的記憶體洩露也會kill掉memcached執行個體。
3.部署在database伺服器:
不建議部署在資料庫伺服器上,盡量給資料庫配置設定最大的記憶體。
總結:
memcached對cpu的依賴很低
對記憶體依賴高,可無限擴充記憶體,具體占用多大記憶體可以根據實際需求配置
帶寬方面可暫不考慮
建議采用專用伺服器或有較多空閑記憶體的應用伺服器作為緩存伺服器
王厚達 (18764287653)