閱讀867 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Memcached緩存大數據時對服務器內存、CPU的影響及其對硬件的配置需求

最近公司在進行緩存框架方麵的調研,我主要對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%
 

  1. 緩存數據量和占用內存大小成簡單線性關係,數據量的增加沒有對服務器內存造成特殊影響 
  2. 緩存數據量的大小對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)

最後更新:2017-04-03 12:56:23

  上一篇:go Memcached緩存大數據時對服務器內存、CPU的影響及其對硬件的配置需求
  下一篇:go 我在Github上的flare-spark項目