本文仅表明带我的观点及理解,本人只是一个编程小菜鸟,若是有不对的地方。请大佬轻喷!html
前言:对于一些公司来讲可能会遇到一些并发处理的问题,本文有可能会对您有所帮助。web
1.若是web服务器cpu使用率很低可是又须要更高效的处理并发链接请求,您能够尝试设置最大工做进程数。算法
IIS做为Windows平台下Asp.Net网站发布的默认WEB服务器,在性能上是提供了比较大的弹性和可伸缩性,经过应用程序池工做进程数的设置,能够支持从几十到上万并发数量的访问。数据库
在主流的主机上,每一个应用程序池的单一工做进程,可以大约承受30-50个左右的并发,若是超出此并发数量,可能会出现IIS没法响应、或响应时间明显变长的问题。经过合理设置应用程序池的最大工做进程数,可显著提升IIS应对高并发的能力,减小网站响应时间。(具体设置方式可详见上一篇文章《关于并发你真的了解吗?(一)》博客园地址:http://www.cnblogs.com/xinwuhen/p/7049093.html)编程
2.建议使用 InProc 的Session保存机制缓存
3.合理的资源回收机制:大多数应用系统都存在工做时间使用量高、非工做时间使用量低的状况,针对这种现象,在系统非忙时应合理的释放操做系统资源,所以,应合理设置应用程序池的【限制超时】和【回收时间间隔】属性。服务器
4.程序优化(详见《关于并发你真的了解吗?(三)》)网络
5.数据库操做优化(详见《关于并发你真的了解吗?(三)》)session
1.对于多台服务器来讲,首先也要知足单独服务器优化配置。上面有讲述,这里须要注意对于多服务器Session的保存机制可使用其余的方式下文有重点介绍。并发
2.您可能会遇到,某一台或者多台服务器已经超过了并发处理量。而其余服务器却还有很富余的并发处理能力的状况。
此种状况您可能须要分流操做,我知道的有三种分流:
2.1,集群 - 将并发请求分配到不一样的服务器上,能够是业务服务器,也能够是数据库服务器。集群技术:多台服务器应看做为一个服务集群而不是单一的个体服务器。群集技术是使单个服务器实现物理和程序上的链接,并对服务器之间的通信进行协调,以使它们可以执行共同的任务。即使某一台服务器中止运行,一个由进程台调用的故障应急程序会自动将该服务器的工做负荷转移至另外一台服务器,以保证提供持续不断的服务。除故障应急程序外,某些形似的群集也使用负载平衡功能,该功能可以使计算负载在联网的计算机间得以分配。
2.2,分布式 - 分布式是把单次请求的多项业务逻辑分配到多个服务器上,这样能够同步处理不少逻辑,通常使用与特别复杂的业务请求。分布式系统(distributed system)是创建在网络之上的软件系统。正是由于软件的特性,因此分布式系统具备高度的内聚性和透明性。所以,网络和分布式系统之间的区别更多的在于高层软件(特别是操做系统),而不是硬件。内聚性是指每个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每个数据库分布节点对用户的应用来讲都是透明的,看不出是本地仍是远程。在分布式数据库系统中,用户感受不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪一个站点以及事务在哪一个站点上执行等。
2.3,CDN - 在域名解析层面的分流,例如将华南地区的用户请求分配到华南的服务器,华中地区的用户请求分配到华中的服务器。
3.负载均衡设备(网上不少文章,不过多介绍)
4.使用消息队列。队列的使用除去了接收和发送应用程序同时执行的要求。减小并发处理数量的占用
5.缓存机制:将须要频繁访问的资源存放在缓存中不只能够下降数据库压力并且还能够提升访问速度进而提升用户体验。适程度而定必要时能够考虑缓存服务器的搭建。
6.数据库分库分离活跃数据 :能够自定义规则来断定哪些访问频繁的数据或者重要访问来访问单独库,即“重要数据特殊对待”。从而减轻主库压力。而且能够提升用户体验。
7.下降响应时间(详见《关于并发你真的了解吗?(三)》),整体分为下降程序执行时间,下降数据库操做时间。要知道即便是毫秒级的程序执行速度差别,在足够大的并发访问量下。差距也是异常惊人的。
8.Asp.Net的Session共享
Asp.Net提供了五种Session保存机制:
(1)Off 设置为不使用Session功能 性能 无
(2)InProc 置为将Session存储在进程内,就是ASP中的存储方式 性能 最好
(3)StateServer 设置为将Session存储在独立的状态服务中。 性能损失10-15% 通常用于服务器集群使用
(4)SQLServer 设置将Session存储在SQL Server中。性能损失10-20%
(5)Custom 自定制的存储方案 性能 由实现方式决定(通常自定义方式编写不难,可是好的性能方案很难)
在Asp.Net程序的web.config配置文件中对Session的保存方式进行设置。若是不显示指定Session的保存方式,默认使用InProc的方式保存,即Session由提供服务的工做进程保存。
为了提升IIS对高并发的支持,能够增长应用程序池的工做进程数,IIS会根据内置的调度算法,将用户的请求在多个工做进程间动态分配,若是搭建了服务器集群和负载均衡,则用户请求会在多台机器的多个工做进程间进行动态分配。在上述状况下,若是Session的保存方式依然为InProc,则用户请求在多个工做进程间切换时可能出现Session丢失的状况,致使请求失败或出错。
为解决上述为,须要将Session的保存方式设置为共享即StateServer”、“SQLServer”或“Custom”方式。这三种方法中,“SQLServer”方式须要安装独立的SQLServer数据库,“Custom”方式须要自行实现相应的Session存储与检索过程,部署起来相对复杂,相对上述两种方式,“StateServer”方式在功能性和可实施性上最好,所以重点介绍此种Session共享机制。
一、 肯定StateServer服务器。若是只有一台WEB服务器,可指定当前服务器为StateServer服务器。若是存在多台服务器集群,可指定集群中的一台符合较轻的服务器做为StateServer服务器。
二、 修改注册表,容许远程访问StateServer服务。
端口默认为42424,可根据须要进行修改,下文均以42424为例。
三、 打开【管理工具】-【服务】,找到“Asp.Net State Service”,点击右键,选择【属性】
在弹出的【属性】窗口中,将【启动方式】改成“自动”,而后点击【启动】按纽启动服务
四、 打开待修改网站主目录下的web.config配置文件,搜索找到“<sessionstate>”配置节点,若是不存在配置节点,则在“<system.web>”节点下新建“<sessionstate>”配置节点,并将节点属性修改成:
<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" />
其中“tcpip=*”后的主机IP地址和端口可根据实际状况修改。修改完后保存配置文件便可。
一、 Session中保存的自定义对象必须显示标记为可序列化“[serializable]”。若是未显示标记为可序列化,则在访问页面时会报错。
二、 StateServer服务器必须为Windows Server操做系统,如Windows Server 2003或Windows Server 2008。
本文版权归做者 心灬无痕(博文地址:http://www.cnblogs.com/xinwuhen/)全部,欢迎转载和商用,请在文章页面明显位置给出原文连接并保留此段声明,不然保留追究法律责任的权利,其余事项,可留言咨询。