最近買了一本《實用負載均衡技術》的書籍,利用空餘時間進行閱讀,但願能用到工做中,提高本身的能力web
首先數據庫
一,什麼是負載均衡緩存
通俗一點來說:在高併發,大數據環境下給服務器減壓的,分爲硬件和軟件。其中:性能優化
1,硬件方面:硬件負載均衡就是多臺服務器以對稱的方式組成服務器集合,把壓力平均分配給每臺服務器,好比使用DNS負載均衡(後續詳解)是最有效最簡單的方法!服務器
其中橫向負載均衡和縱向負載均衡,橫向擴展經過服務器羣集,多臺服務器技術來實現,橫向擴展的好處是,有了更多的機器,若是某臺機器掛掉沒法工做了,仍然可使用其餘機器來處理負載;縱向擴展經過擴展服務器硬件資源,例如CPU、內存、硬盤、網卡等,可是縱向擴展通常費用比較昂貴!併發
2,軟件方面能夠利用緩存技術負載均衡
首先緩存是什麼?緩存的做用?socket
緩存是一種以空間換取時間的技術,也就是把你想要獲得的數據,存放在內存中一段時間,在你設置的時間以內服務器不會去讀取數據庫的記錄,而是經過緩存直接讀取你存放在內存中的數據。分佈式
緩存的優勢:緩存是網站性能優化不可缺乏的數據處理機制,他能有效緩解數據庫壓力,就像咱們目前正在作的搶購活動,同一時間網站的訪問量很是高,若是不使用緩存的數據,客戶點擊一次就查詢一次數據庫,這樣的設計形成服務器壓力可想而知,若是咱們使用了緩存技術,設置要緩存的時間,在這段時間內客戶點擊N次和點擊一次是徹底同樣的,由於都是讀取緩存中的數據。ide
咱們平時開發中用到的緩存技術:頁面緩存、數據緩存、控件緩存、配置文件設置緩存,下面來依依介紹:
Cache["要緩存的值"] = "數據"; Response.Write(Cache["要緩存的值"]);
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" EnableCaching="True" CacheDuration="10" CacheExpirationPolicy="Absolute"> </asp:ObjectDataSource>
給控件設置緩存:例如給一個TextBox控件設置緩存:以下圖
webConfig中的配置
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<addname="cache" duration="60"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
</system.web>
而後在頁面中設置
<%@ OutputCache CacheProfile="cache" VaryByParam="none" %>
接下來介紹重量級的緩存技術 memcached
那什麼是memcached呢?
Memcached是由Danga Interactive開發的,高性能的,分佈式的內存對象緩存系統,用於在動態應用中減小數據庫負載,提高訪問速度。
Memcached能緩存什麼?
經過在內存裏維護一個統一的巨大的hash表,Memcached可以用來存儲各類格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等。
Memcached的特色
Memcached的緩存是一種分佈式的,可讓不一樣主機上的多個用戶同時訪問, 所以解決了共享內存只能單機應用的侷限,更不會出現使用數據庫作相似事情的時候,磁盤開銷和阻塞的發 生。
Memcached的使用
一 、Memcached服務器端的安裝 (此處將其做爲系統服務安裝)
memcached服務器端以及客戶端類庫(開源軟件,下載便可)
其中,客戶端類庫包括如下幾個DLL:
Memcached.ClientLibrary.dll
ICSharpCode.SharpZipLib.dll
log4net.dll
下載地址 http://download.csdn.net/detail/dinglang_2009/3733784
二,安裝memcached服務器端
將memcached.exe複製到任意目錄下,如 c:,在命令行輸入:memcached.exe -d install memcached將做爲一個服務常駐系統內存了
三,配置
Memcached Providers更強大,MemcachedProviders是對Enyim.Caching的再次封裝,並加入了客戶端計數器功能以及Session數據庫管理功能。。固然,使用和配置起來也一樣簡單,方便,只是對於一些負責的操做和處理方面,功能更強大一些。若是隻是簡單的應用,推薦直接使用enyim.com Memcached Client。除了添加必要的Enyim.Caching.dll引用,還須要修改應用程序的配置文件。
C#代碼
public void testEnyimCaching() 24. { 25. MemcachedClient client = new MemcachedClient("enyim.com/memcached"); 26. //存值 --不帶過時時間的存儲,Memcached將根據LRU來決定過時策略 27. bool result = client.Store(Enyim.Caching.Memcached.StoreMode.Add, "name", "dinglang"); 30. if (result) 31. { 32. Response.Write("成功存入緩存"); 33. 34. //取值 35. object name = client.Get("name"); 36. if (name != null) 37. { 38. Response.Write("取出的值爲:"+name); 39. } 40. else 41. { 42. Response.Write("取值失敗"); 43. } 44. } 45. else 46. { 47. Response.Write("存入緩存失敗"); 48. } 49. }
配置文件
<configuration> <sectionGroup name="enyim.com"> <section name="memcached" type="路徑" /> </sectionGroup> </configSections> <enyim.com protocol="Binary"> <memcached> <servers> <add address="127.0.0.1" port="11121" /> </servers> <socketPool minPoolSize="10" maxPoolSize="100" connectionTimeout="00:00:10" deadTimeout="00:02:00" /> </memcached> </enyim.com>
這是我本身摸索到的一些,更深刻的待後續學習再繼續完善該文章
memcached緩存書籍,供你們學習 http://pan.baidu.com/s/1dDtfBwt