热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[转]asp.net解决高并发的方案

最近几天一直在读代震军的博客,他是Discuz!NT的设计者,读了他的一系列关于Discuz!NT的架构设计文章,大呼过瘾,特别是Discuz!NT在解决高访问高并发时所设计的一系

最近几天一直在读代震军的博客,他是Discuz!NT的设计者,读了他的一系列关于Discuz!NT的架构设计文章,大呼过瘾,特别是Discuz!NT在解决高访问高并发时所设计的一系列方案,本人尤其感兴趣。写这篇文章的目的,算是对初次阅读之后的总结备忘吧,以便以后有时间亲自测试,如果能在生产环境中得到应用,那就更有参考价值了。

测试方法:
本地模拟测试网站高访问高并发采用的测试工具是大名鼎鼎的Loadrunner,这个工具做测试的一般都知道。在代震军的博客中,有以下几篇介绍了通过Loadrunner进行压力并发测试。

当DiscuzNT遇上了Loadrunner(上)
http://www.cnblogs.com/daizhj/archive/2009/09/25/1573926.html

当DiscuzNT遇上了Loadrunner(中) 
http://www.cnblogs.com/daizhj/archive/2009/09/27/1574897.html

当DiscuzNT遇上了Loadrunner(下) 
http://www.cnblogs.com/daizhj/archive/2009/09/27/1575091.html


Discuz!NT是一个论坛程序,是典型的互联网应用,在设计时本身就考虑了互联网应用场景下高并发高访问量的需求,在普通开源版本中,主要采用的缓存机制来提高系统的性能。

一、缓解数据库读取压力

 

相关文章如下:
Discuz!NT 缓存设计简析 [原创] 
http://www.cnblogs.com/daizhj/archive/2007/08/15/855163.html

这个缓存机制使用的是.Net本身提供的缓存功能,System.Web.Caching.Cache
这个方案可以解决一般访问量不是很大的站点的需求,更高一级的,可以通过增加Web园工作进程来达到提升性能的需求,而且这个方案里面,已经解决多进程下缓存同步的问题。


在Discuz!NT企业版中,提供了更高层次的解决方案,使用了分布式缓存机制,引入了Memcached、Redis、LLServer,相关文章如下:

Discuz!NT中集成Memcached分布式缓存
http://www.cnblogs.com/daizhj/archive/2009/03/23/1386652.html

 

在Discuz!NT中进行缓存分层(本地缓存+memcached)  
http://www.cnblogs.com/daizhj/archive/2009/11/17/1604436.html

 

Discuz!NT中的Redis架构设计

http://www.cnblogs.com/daizhj/archive/2011/02/21/1959511.html

 

Discuz!NT跨站缓存同步

http://www.cnblogs.com/daizhj/archive/2010/06/18/discuznt_memcache_syncdata.html

 

Discuz!NT中的LLServer架构设计

http://www.cnblogs.com/daizhj/archive/2011/08/26/discuznt_llserver_arch.html

 


Memcached是danga.com(运营LiveJournal的技术团队)开发的一套分布式内存对象缓存系统,用于在动态系统中减少数据库负载,提升性能。具体的介绍可以参考:

Memcached深度分析
http://www.cnblogs.com/luluping/archive/2009/01/14/1375456.html

通过以上的方案,能解决大部分高访问高并发的需求,因为论坛产品的特殊性,读写比大概是4:1,所以首先应该在读数据方面进行减压优化。

 

二、缓解Web服务器压力

 

Discuz!NT在缓解Web服务器压力上采用了如下的方案。

 

  1. 将用户上传的附件通过FTP方式传送到另外一台服务器上,相关的文章如下:

  Discuz!NT中远程附件的功能实现[FTP协议]

  http://www.cnblogs.com/daizhj/archive/2008/07/28/1254648.html


3. 通过SQUID将静态文件缓存分布
使用SQUID做静态前端,将论坛中的大部分静态文件布署或外链到一个新的HTTP链接上,从而给Web服务器减压,提升性能。

Discuz!NT静态文件缓存(SQUID)解决方案
http://www.cnblogs.com/daizhj/archive/2010/06/10/1692758.html


三、负载均衡

 

通过以上的方案,Web服务器压力小了,性能也提升了,但是如果遇到更高的并发访问量,单台Web服务器还是不能满足需求,Discuz!NT采取了负载均衡的方案。使用了LVS+KEEPALIVED、NGINX等。相关文章如下:

 

    Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)
    http://www.cnblogs.com/daizhj/archive/2010/06/13/1693673.html

 

    Discuz!NT负载均衡解决方案(HA)之---LVS(Linux Virtual Server)

    http://www.cnblogs.com/daizhj/archive/2010/06/13/1693673.html

 

    Discuz!NT负载均衡方案

    http://www.cnblogs.com/daizhj/archive/2010/06/24/1667422.html

 

    使用的是nginx,使用nginx作为前端负载均衡,这个确实很有吸引力,有时间能试用下就好。

 

 
四、缓解数据库压力


在Discuz!NT中,数据库作为数据持久化工具,必定在并发访问频繁且负载压力较大的情况下成为系统性能的‘瓶颈’。即使使用上面的本地缓存等方式来解决频繁访问数据库的问题,但仍旧会有大量的并发请求要访问动态数据, 其中的‘读写分离’方案就是一种被广泛采用的方案。相关文章:

 

    Discuz!NT数据库读写分离方案

    http://www.cnblogs.com/daizhj/archive/2010/06/21/dbsnap_master_slave_database.html

    全文搜索方案:

    Discuz!NT企业版之Sphinx全文搜索(上)

    http://www.cnblogs.com/daizhj/archive/2010/06/28/discuznt_entlib_sphinx_one.html

 

     Discuz!NT企业版之Sphinx全文搜索(下)

    http://www.cnblogs.com/daizhj/archive/2010/06/30/discuznt_entlib_sphinx_two.html

 

    处理大数据量:

    Discuz!NT千万级数据量上的两驾马车--TokyoCabinet,MongoDB

    http://www.cnblogs.com/daizhj/archive/2010/07/22/1781140.html

 

好了,上面就是Discuz!NT企业版为了提升性能采取的一系列方案,确实对asp.net互联网应用很有参考价值,其中用到的很多开源产品都是基于Linux的,如Memcached、Redis、LLServer、SQUID、NGINX、LVS、Sphinx,虽然有些产品有Windows版本,但是其性能表现能力远远比不上Linux上面,看来在Web应用上,性能方面的表现以及开源产品的研究,Linux远远的走在了Windows前面。


推荐阅读
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • 解决Sharepoint 2013运行状况分析出现的“一个或多个服务器未响应”问题的方法
    本文介绍了解决Sharepoint 2013运行状况分析中出现的“一个或多个服务器未响应”问题的方法。对于有高要求的客户来说,系统检测问题的存在是不可接受的。文章详细描述了解决该问题的步骤,包括删除服务器、处理分布式缓存留下的记录以及使用代码等方法。同时还提供了相关关键词和错误提示信息,以帮助读者更好地理解和解决该问题。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了authenticationplugincaching_sha2相关的知识,希望对你有一定的参考价值。操作系统:windows1 ... [详细]
  • yii框架目录结构详细分析说明
    php教程|php手册yii,目录结构php教程-php手册yii框架目录结构详细分析说明猫狗大战源码,华为云电脑ubuntu,梦见放走很多爬虫,parttmpphp,seo页面描 ... [详细]
  • smarty(模板引擎,模板技术)使用smarty主要是为了实现逻辑和外在内容的分离;特点:1、速度快 ... [详细]
  • 【MyBatis系列7】原来SqlSession只是个甩手掌柜,真正干活的却是Executor等四大对象
    Executor原理分析前言MyBatis架构分层ExecutorBaseExecutorSimpleExecutorReuseExecutorBatchExecutor三种常用批 ... [详细]
author-avatar
545229628_efb16a
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有