asp.net解决高并发的方案.
2016-03-18 11:46
274 查看
最近几天一直在读代震军的博客,他是Discuz!NT的设计者,读了他的一系列关于Discuz!NT的架构设计文章,大呼过瘾,特别是Discuz!NT在解决高访问高并发时所设计的一系列方案,本人尤其感兴趣。写这篇文章的目的,算是对初次阅读之后的总结备忘吧,以便以后有时间亲自测试,如果能在生产环境中得到应用,那就更有参考价值了。
测试方法: 本地模拟测试网站高访问高并发采用的测试工具是大名鼎鼎的Loadrunner,这个工具做测试的一般都知道。在代震军的博客中,有以下几篇介绍了通过Loadrunner进行压力并发测试。
当DiscuzNT遇上了Loadrunner(上) /article/4598236.html
当DiscuzNT遇上了Loadrunner(中) /article/4598237.html
当DiscuzNT遇上了Loadrunner(下) /article/4598238.html
Discuz!NT是一个论坛程序,是典型的互联网应用,在设计时本身就考虑了互联网应用场景下高并发高访问量的需求,在普通开源版本中,主要采用的缓存机制来提高系统的性能。
一、缓解数据库读取压力
相关文章如下: Discuz!NT 缓存设计简析 [原创] /article/4599016.html
这个缓存机制使用的是.Net本身提供的缓存功能,System.Web.Caching.Cache 这个方案可以解决一般访问量不是很大的站点的需求,更高一级的,可以通过增加Web园工作进程来达到提升性能的需求,而且这个方案里面,已经解决多进程下缓存同步的问题。
在Discuz!NT企业版中,提供了更高层次的解决方案,使用了分布式缓存机制,引入了Memcached、Redis、LLServer,相关文章如下:
Discuz!NT中集成Memcached分布式缓存 /article/4598177.html
在Discuz!NT中进行缓存分层(本地缓存+memcached) http://www.cnblogs.com/daizhj/archive/2009/11/17/1604436.html
Discuz!NT中的Redis架构设计
/article/4598269.html
Discuz!NT跨站缓存同步
/article/4598256.html
Discuz!NT中的LLServer架构设计
/article/4598292.html
Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。具体的介绍可以参考:
Memcached深度分析 /article/4702493.html
通过以上的方案,能解决大部分高访问高并发的需求,因为论坛产品的特殊性,读写比大概是4:1,所以首先应该在读数据方面进行减压优化。
二、缓解Web服务器压力
Discuz!NT在缓解Web服务器压力上采用了如下的方案。
将用户上传的附件通过FTP方式传送到另外一台服务器上,相关的文章如下:
Discuz!NT中远程附件的功能实现[FTP协议]
/content/3511862.html
3. 通过SQUID将静态文件缓存分布 使用SQUID做静态前端,将论坛中的大部分静态文件布署或外链到一个新的HTTP链接上,从而给Web服务器减压,提升性能。
Discuz!NT静态文件缓存(SQUID)解决方案 /article/4598253.html
三、负载均衡
通过以上的方案,Web服务器压力小了,性能也提升了,但是如果遇到更高的并发访问量,单台Web服务器还是不能满足需求,Discuz!NT采取了负载均衡的方案。使用了LVS+KEEPALIVED、NGINX等。相关文章如下:
Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)
/article/4598255.html
Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)
/article/4598255.html
Discuz!NT负载均衡方案
/article/4598257.html
使用的是nginx,使用nginx作为前端负载均衡,这个确实很有吸引力,有时间能试用下就好。
四、缓解数据库压力
在Discuz!NT中,数据库作为数据持久化工具,必定在并发访问频繁且负载压力较大的情况下成为系统性能的‘瓶颈’。即使使用上面的本地缓存等方式来解决频繁访问数据库的问题,但仍旧会有大量的并发请求要访问动态数据, 其中的‘读写分离’方案就是一种被广泛采用的方案。相关文章:
Discuz!NT数据库读写分离方案
/content/3512000.html
全文搜索方案:
Discuz!NT企业版之Sphinx全文搜索(上)
/content/3512002.html
Discuz!NT企业版之Sphinx全文搜索(下)
/article/4598258.html
处理大数据量:
Discuz!NT千万级数据量上的两驾马车--TokyoCabinet,MongoDB
/content/3512004.html
好了,上面就是Discuz!NT企业版为了提升性能采取的一系列方案,确实对asp.net互联网应用很有参考价值,其中用到的很多开源产品都是基于Linux的,如Memcached、Redis、LLServer、SQUID、NGINX、LVS、Sphinx,虽然有些产品有Windows版本,但是其性能表现能力远远比不上Linux上面,看来在Web应用上,性能方面的表现以及开源产品的研究,Linux远远的走在了Windows前面。
测试方法: 本地模拟测试网站高访问高并发采用的测试工具是大名鼎鼎的Loadrunner,这个工具做测试的一般都知道。在代震军的博客中,有以下几篇介绍了通过Loadrunner进行压力并发测试。
当DiscuzNT遇上了Loadrunner(上) /article/4598236.html
当DiscuzNT遇上了Loadrunner(中) /article/4598237.html
当DiscuzNT遇上了Loadrunner(下) /article/4598238.html
Discuz!NT是一个论坛程序,是典型的互联网应用,在设计时本身就考虑了互联网应用场景下高并发高访问量的需求,在普通开源版本中,主要采用的缓存机制来提高系统的性能。
一、缓解数据库读取压力
相关文章如下: Discuz!NT 缓存设计简析 [原创] /article/4599016.html
这个缓存机制使用的是.Net本身提供的缓存功能,System.Web.Caching.Cache 这个方案可以解决一般访问量不是很大的站点的需求,更高一级的,可以通过增加Web园工作进程来达到提升性能的需求,而且这个方案里面,已经解决多进程下缓存同步的问题。
在Discuz!NT企业版中,提供了更高层次的解决方案,使用了分布式缓存机制,引入了Memcached、Redis、LLServer,相关文章如下:
Discuz!NT中集成Memcached分布式缓存 /article/4598177.html
在Discuz!NT中进行缓存分层(本地缓存+memcached) http://www.cnblogs.com/daizhj/archive/2009/11/17/1604436.html
Discuz!NT中的Redis架构设计
/article/4598269.html
Discuz!NT跨站缓存同步
/article/4598256.html
Discuz!NT中的LLServer架构设计
/article/4598292.html
Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。具体的介绍可以参考:
Memcached深度分析 /article/4702493.html
通过以上的方案,能解决大部分高访问高并发的需求,因为论坛产品的特殊性,读写比大概是4:1,所以首先应该在读数据方面进行减压优化。
二、缓解Web服务器压力
Discuz!NT在缓解Web服务器压力上采用了如下的方案。
将用户上传的附件通过FTP方式传送到另外一台服务器上,相关的文章如下:
Discuz!NT中远程附件的功能实现[FTP协议]
/content/3511862.html
3. 通过SQUID将静态文件缓存分布 使用SQUID做静态前端,将论坛中的大部分静态文件布署或外链到一个新的HTTP链接上,从而给Web服务器减压,提升性能。
Discuz!NT静态文件缓存(SQUID)解决方案 /article/4598253.html
三、负载均衡
通过以上的方案,Web服务器压力小了,性能也提升了,但是如果遇到更高的并发访问量,单台Web服务器还是不能满足需求,Discuz!NT采取了负载均衡的方案。使用了LVS+KEEPALIVED、NGINX等。相关文章如下:
Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)
/article/4598255.html
Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)
/article/4598255.html
Discuz!NT负载均衡方案
/article/4598257.html
使用的是nginx,使用nginx作为前端负载均衡,这个确实很有吸引力,有时间能试用下就好。
四、缓解数据库压力
在Discuz!NT中,数据库作为数据持久化工具,必定在并发访问频繁且负载压力较大的情况下成为系统性能的‘瓶颈’。即使使用上面的本地缓存等方式来解决频繁访问数据库的问题,但仍旧会有大量的并发请求要访问动态数据, 其中的‘读写分离’方案就是一种被广泛采用的方案。相关文章:
Discuz!NT数据库读写分离方案
/content/3512000.html
全文搜索方案:
Discuz!NT企业版之Sphinx全文搜索(上)
/content/3512002.html
Discuz!NT企业版之Sphinx全文搜索(下)
/article/4598258.html
处理大数据量:
Discuz!NT千万级数据量上的两驾马车--TokyoCabinet,MongoDB
/content/3512004.html
好了,上面就是Discuz!NT企业版为了提升性能采取的一系列方案,确实对asp.net互联网应用很有参考价值,其中用到的很多开源产品都是基于Linux的,如Memcached、Redis、LLServer、SQUID、NGINX、LVS、Sphinx,虽然有些产品有Windows版本,但是其性能表现能力远远比不上Linux上面,看来在Web应用上,性能方面的表现以及开源产品的研究,Linux远远的走在了Windows前面。
相关文章推荐
- 2016-AspNet-MVC教学-3-基于EntityFramework数据模型的控制台测试
- Asp.net SignalR 实现服务端消息推送到Web端
- asp.net小数点四舍五入的正确写法
- ASP.NET Web 配置指南
- asp.net教程:编译错误同时存在于不同dll中
- ASP.NET Core 1.0 中 EntityFramework 与 PostgreSQL 的使用
- ASP.net的指令
- ASP.net的文件扩展名
- 深入了解asp.net框架。生命周期以及事件处理机制
- asp.net UrI URL编码解码
- ASP.NET Web API的安全管道
- ASP.NET Core
- asp.net 基础
- asp.net 中错误页面的配置问题
- OPENWRT ON ARM-BASED PLATFORM (RASPBERRY PI 2)
- Global文件的作用
- ASP.NET MVC
- Spring AOP(三)——通过@AspectJ注解切面
- ASP.NET网站开发中的配置文件
- .Net用js实现aspx页面删除TextBox输入框的前后空格