数据记录超过150万、同时在线人数4000的社区,如何架构能满足要求

http://community.csdn.net/expert/topic/4345/4345939.xml
 
 
数据记录超过150万、同时在线人数4000的社区,如何架构能满足要求(不考虑硬件问题),数据库使用sql server,
 
 
 
答:
离开硬件空谈软件是不现实的,asp.net+sql2000企业版肯定满足你的要求,类似的我作过,
服务器 双cpu或者4颗8颗,用户有钱就多上, 2G内存,越大越好,其他的容措、热备等根据用户要求定,硬盘一般标配的都够用,大也无所谓,也可以web服务器和数据库服务器分别采用一台计算机,配置越高越好。总而言之这个系统不大,不用担心。
 
答:
你應該做一個項目評估:
一 4000 個人是同時在線最高地時候,還是平均人數;
二 他們是到網站上瀏覽信息,那麼平均每分鐘會有多少人發帖?
三 如果平均 4000 人在線,假如平均每個人每天發五個帖子(這是很少的情況,實際上遠遠超過這個),那麼一天下來至少是20000個帖子,所以樓主的150萬數字太保守
 
答:
象这样的访问量,并不是单纯搞程序优化就能获得性能的提升的..
建议还是升级硬件,加大带宽的投入..我们单位的网站日访问200W,6000在线的时候已经是3台服务器了...现在是8台服务器 + 网络负载平衡...
 
答:
大量应用Cache,比如论坛首页,5分钟一更新也无所谓,但是却大大减小了性能消耗。再则,论坛中的数据需要按日期分段存放在多个表,这个你可以看看CSDN就是这么做的,避免单表数据量过大,检索时候效率低。
 
答:
1.硬件方面服务器集群
2.软件方面,最解决问题得就是生成html或者用xml+xsl
  其次考虑用cache,我们现在也在做这个,基本上是这个思路!
 
答:
1、硬件要高
2、要生成静态网页HTML,(我不建议用xml+xsl,客户端打开多页的时候慢)
   多用cache,最好能把静态页面都读到cache中,
3、必须的地方如发帖回帖时候在用ASPNET
 
答:
http://pop.pcpop.com/default.aspx
数据量160w主帖+4,000w回复.
人气,自己看在线名单.
服务器配置
数据库服务器+web服务器,图片服务器只是为了分流带宽.
其实注意的问题
1:分表
2:Cache
3:数据操作部分多考虑存储过程的执行效率
4:底层的代码过硬.
 
答:
实时在线10多万用户的天涯社区(www.tianya.cn)用的技术是:
1、内容缓存。
2、应用层的语句优化。
3、高效的索引
4、分库分表,天涯访问量大的版块甚至单独分成一个库,用分区视图和链接服务器统一调用。
5、数据库调优,通过事件探查器对提交语句进行评估,优化。
6、调用频率非常高的表“钉”在内存中,减少磁盘IO。
7、通过服务器内的Agent,自动采集服务器CPU、内存、磁盘、网卡、连接数等参数,让网管即时了解WEB和DB服务器的实时性能参数。
答:
呵呵,转篇帖子给土人
     首先谢谢dudu,今天访问速度和稳定性提高很明显,不用对着sorry页发呆了@_@
       免费的安家在cnblogs上,很是感谢。最近看dudu为访问速度辛苦,想帮点忙,可是一直很懒人又苯,只好事后总结一下了。
       个人猜测总结的dudu目前提高性能的办法:
       1.阻止恶意robot
       2.Rss的优化缓存
       3.页面的缓存和静态化
       4.数据库的优化和查询缓存
       5.DotNet和IIS 6的配置优化
       6.DotText代码的重构
       7.Web页面的Html重构和布局优化     
       8.没想到,请dudu补充??
       个人分析和建议:
        1.目前看来,最大的速度问题是来自搜索的robot的疯狂爬行(cnblogs里的好东西太多了?),造成类似破坏的未来还可能来有恶意攻击或是病毒。dudu目前的办法是Asp.net程序里拒绝访问,或是高峰时段拒绝访问,但是涉及了一个检索的问题,所以建议返回一个错误让robot自己处理,比如:
                  • 500.12 - 应用程序正忙于在 Web 服务器上重新启动。
                  • 500.13 - Web 服务器太忙。
                  • 403.9 - 用户数过多。与该服务器连接的用户数量超过了您设置的连接限制。
         对于攻击类,就不行了。所以建议dudu最好在防火墙上做限制,禁止同一ip的最大连接数,或是几小时内禁止访问。或是把目前的处理robot应用的代码单独出来,C#重写用配置文件管理,不要经过IIS处理。
 
        2.缓存和静态化。页面缓存和静态化是dudu下了大工夫的地方了。建议多注意Rss,个人管理里看来聚合的访问比Web页面的大多了。建议仅仅聚合摘要,也倡议大家都写摘要,方便阅读,也可以减轻一点服务器负担。不知道cnblogs什么时候有自己的缓存服务器,呵呵。
        3.数据库的问题,最大化利用Sql Server的本身特性就好。建议注意管理并发锁定,使用行间锁定,可提高效率。重视查询缓存的策略,提高命中。
        4.代码和页面的重构。这就要辛苦dudu了,也没太多说的。想说的是除html+css外,还要注意页面上的布局显示,比如首页该显示的内容,目前显示的排名人数是不是太多?一些个人的页面上的图片,flash,第3方计数器等会不会影响最终用户页面打开速度,造成打开慢的印象。
         5.Win2003和IIS6 本身,这个还是让大家来建议吧。
         写了这么些,希望能为cnblogs出点力,不对就多包涵了。倡议大家都贡献点自己的力量,让cnblogs更好。 希望能有好的提议,所以暂时发首页。
另外架构方面呀,得考虑硬件,不是说处理器多了就好,得看你的程序支持不支持并发处理,
数据库呢,做好索引,最好用上分布式视图分区,这两点用好呢大量提高检索性能,关于分布式数据库的集成这个问题有好多方案,一会儿也说不清楚。
业务层嘛,最好用个独立的应用application server(应用服务器)来承载,算法方面说起来太多,不过大多提高性能的方面估计你都有相当的经验,使用缓存啦,不要缓存有状态对象啦,用remoting的单一实例什么的。
表示层的东西能在IE客户端处理的都在客户端处理,减少服务器压力,XML,XSLT都用上。
别的就没啥了,再不行就得加硬件,负责冗余了,可是你的架构得做的有高可伸缩性哦。
 
 
虽然问题已经结贴,还是想谈谈我的看法
一.文件存储还是数据库存储
  1.外存操作本身就是一个耗时的操作。文件系统和数据库都可以当作外存操作。从理论上来讲,数据库关注数据存储和检索,不会比文件系统存储效率低。数据库系统还往往会对查询和数据缓存进行优化。
  2.使用文件系统的话,检索数据的代价很高。安全性又如何处理?
  3.数据库可以使用集群部署。如果用文件系统,如何集群?如何容错?
  鉴于以上3点,还是应该使用数据库。数据库的出现就是用来解决数据存储和检索的,为什么要舍弃而采用功能相对较弱的文件系统?
二.多采用新的技术
  1.sqlserver2005的查询通知。可以只有在程序检索的结果发生变化时,才重新检索数据库。配合缓存技术可以使io操作降低到最低限度
  2.sqlserver2005的数据分区技术可以避免一个表中数据过多,不需要再分表存储数据。分表存储数据导致很多查询和管理上的不便。
  3.sqlserver2005的可编程性。sqlserver2005集成了clr,相信这方面也有很大潜力可挖。
三.合理的数据结构和算法。这点也相当重要,对效率的提升非常大。
四.使用负载均衡和分布式部署
  数据库和web服务器尽量分开。
Posted on 2006-11-21 10:03  罐头虫子  阅读(467)  评论(0)    收藏  举报