我本将心向明月

.NET工作室

导航

[思考加讨论]建立中大型社区类网站的技术方案

实话实说,本人目前正在开发一个社区类网站,网站前景还不错,也正在向中大型社区类网站转型。

面临改版,我需要负责整体网站的技术规划,以下是我改版的一些计划,分享出来,一方面是希望得到指点,一方面也共享给没有做过这方面工作的同行。

 

背景:网站目前日访问12万IP,30~40万PV左右.采用C#+SQL2005+IIS6.0+Windows2003。

 

一)网站结构介绍

 

改版思路如下:

 

1文件和图片与网站分离
这样做的好处可以加快含大量图片的网页的访问速度,另外也不至于因为存在大量下载而使整个网站访问受阻。
    1)硬件需求,一台大容量硬盘的服务器,CPU,内存配置一般即可。
    2)包含数据:这一部分并不包括论坛的数据,论坛(已经改用NTdiscuz 3.0)是discuz开发,有自己的存储方案,文件服务用于存新闻,论文,博客,会议,用户相册,文件,文献等等数据。
    3)数据量大小:数据量会越来越大。程序开发时可以考虑对每个用户进行上传数量的限制。另个文件服务器硬盘需500G以上。以后再考虑加磁盘阵列也可以。但需要考虑到能加。
    4)存储方案:不同频道建立一个文件夹,如blog,news,paper等,每个文件夹下分开文件(files),图片(images)然后再按日期建立文件夹
2010/3/
    5)文件类型,附件允许.doc,.pdf,rar,zip,xls,ppt。图片允许.jpg, .gif, .png.大小控制附件不于5M,图片不大于1.5M.另个可以对各个频道进行分别处理,即可以设置每个频道上传类型和类型大小。严格控制非法文件上传。
    6)权限控制:文件服务器文件没有脚本可以执行的权限,整个服务器根限只有读取,即使木马上传也无能为力。
      (7)技术实现,使用webservices或其它手段,进行远程文件上传.上传接口要统一.另可以iframe实现,这个待考虑。
    8)目前状况:已经写好统计文件上传类。旧的数据存储保持不动。

2)加入高速缓存服务器
做社区,做博客没有缓存是很可怕的,数据库无法应付。加入高速缓存的好处能极大提高网页访问速度,对于访问频繁的页面尤其需要。
    1)硬件需求,一台大内存的服务器(64位,16G内存)CPU最好也好点,硬盘很小就行。
    2)缓存数据:主要缓存各个公用页页数据,如博客首页,最新博文章,博文章精选,人才首页等,还有就是更新少访问频繁的数据,如领域,分类等等。内存大的情况会缓存用户的数据,如用户博客首页等。
    3)缓存方案:公用数据,一般缓存56分钟,更新少的可以缓存更长时间,任何缓存在后台可以清除,使得数据能更新。如有用户缓存,用户个人后台也有缓存清除。
      (4)技术实现:需要更改大量程序的实现方式,读取数据方式。优先读取缓存区数据。不需要公网IP,内网实现即可。不需要分配带宽。
    5)技术保证:加快网站访问的同时,假如缓存服务器停止工作,网站访问不受到影响,直接从数据库读取数据,慢点而已,正常工作。
    6)目前状况:已经写好缓存类,可以进行完善。主要采用memcached.

3)带宽分离以及频道分离
做样做的好处就是好控制带宽分配,文件服务器,论坛,博客,SNS,人才等应该分配不同的带宽。另个可以解决以前网站慢,带宽满找不到谁占用带宽过多的问题。频道分离也更利于搜索引擎优化。
1)硬件需求,网站分离需要增加相应N台服务器。都是WEB服务器,另外相应的数据库服务器也会相应分离。这些服务器的标准,CPU要求稍微高点。硬盘稍微大点就行。现在的WEB服务器标准就行。
2)技术需求:带宽分离的实现没有应该问题的。
3)技术实现:对代码重构,整合。有些模块需要重新开发,有些需要整合。如不做样式改版,则主要是程序员的工作,美工可以协助制件页面,估计不少地方需要版面设计和功能调整。
4)目前状况:部分频道已经分离,独立域名访问,如新闻,论坛,论文,人才,会议已经网站分离,但带宽没有分离。

4模板技术,静态化技术,伪静态化技术
这样做的好处除了加快网站访问,减轻服务器压力外,还可以增加安全性。
1)目前的任何CMS系统都采用了模板技术,使用网站全面的静态化,并且丰富了网站的样式,采用这种机制的话,会使得网站更加丰富,拿新闻专题举例:目前的专题形式虽然能实现比较统一性的表现形式,但无法满足像其它网站那样复杂的专题。这一部分有待开发,当然保留现有专题,使建快速。另开发新专题,使表现丰富。
2)更多的静态化公用页面,特别是1.0的东西,参照各大网站,新闻,博文,论文等列表页都是静态化,而且也是只显示前六~十页。可以采用模板机制并且自动发布。当然用缓存也可以,不过没有静态化效果好。
3)对于动态页面,尽量所有页面采用伪静态,这样做可以优化SEO,并且可以增加安全性,不好发现开发语言,更不好找注入点。
4)技术实现,做这些东西增加不少工作量,所以肯定需要增加人员开支。
5)目前状况,新闻,论文频道大部分已经静态化,新闻,论文页采用了模板技术,用.shtm可包含方式,留有广告位。博客,圈子有少部分伪静态。关于我们,english等其它频道有待开发的改进。

5)数据库分离和优化
这部分也是改版的重点,数据库往往是做社区的瓶颈.改版需对各个频道建立独立数据库。并对数据库的结构重建,尽量使用窄表和建立好索引。对于复杂逻辑使用存储过程。
新数据库方案

数据库架构也是至关重要的,大型网站的数据库都不止一个数据库,成百上千数据库都很常见。当然我们网站还小。

数据库结构图如下:

说明文字:

1)      用户数据库包括所有用户,记录用户的数据,用于登录系统。包括用户名,密码,USER_ID.存储用户各种资料和相关信息,如教育信息,联系方式,相片,用户好友等,此数据库可以拆分,如用户量足够大时,可以垂直划分出用户资料库1,用户资料库2,用户资料库3

2)      CMS数据库, 新闻,论文,人才,会议,电子杂志等编辑部发布的数据放在此服务器。互动内容不多,只有各种对新闻,论文等的评论。

3)      博客数据库 此部分包含圈子部分的所有数据表圈子样式,模板,文章列表,讨论区,留言板,圈子成员信息.博客相关数据表都放在此,文章列表,模板,评论,留言等。此数据库可以拆分,以user_ID为纽带,文章数量,和评论量很容易非常大。如数据量足够大时,可以分表。

4)      SNS数据库 SNS必然会有各种功能模块,暂把其数据存在此数据库,以user_ID为纽带,如果功能模块多,再考虑再分个数据库出来。

5)      DISCUZ论坛数据库,由于已经启用DISCUZ论坛,必须得保留其数据库。

6)      专家库 不做介绍

 



6
)开发规范
此次开发需遵守源代码管理规范,编码规范,数据库设计规范。参考以下规范书。
参见《项目组编程规范》、《项目组界面设计规范》、《项目组SourceSafe使用规范》

 

我的大体思路就是上面这些了,最后打个广告,不知道博客园允许不允许,如您对上面的技术比较了解,或对我们的开发感兴趣,欢迎加入。这个项目经费还可以,当然也不能乱花。

有意都可以跟我联系。QQ:282268726

posted on 2010-03-02 09:47  小丛  阅读(715)  评论(4编辑  收藏  举报