最近买了一本《实用负载均衡技术》的书籍,利用空余时间进行阅读,但愿能用到工做中,提高本身的能力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