建立中大型社区类网站的技术方案讨论

clj2005 2010-03-02 10:25:32
加精
实话实说,本人目前正在开发一个社区类网站,网站前景还不错,也正在向中大型社区类网站转型。

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



背景:网站目前日访问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)缓存方案:公用数据,一般缓存5到6分钟,更新少的可以缓存更长时间,任何缓存在后台可以清除,使得数据能更新。如有用户缓存,用户个人后台也有缓存清除。
(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

...全文
4260 204 打赏 收藏 转发到动态 举报
写回复
用AI写文章
204 条回复
切换为时间正序
请发表友善的回复…
发表回复
cbluehehe 2011-11-26
  • 打赏
  • 举报
回复
真是好文章阿!!
cjfriends 2010-06-08
  • 打赏
  • 举报
回复
好帖,回家慢慢看
shaluo520 2010-06-07
  • 打赏
  • 举报
回复
恩~看看
sc274491910 2010-06-04
  • 打赏
  • 举报
回复
顶一下,写的很好!
jiankeqcaf 2010-06-03
  • 打赏
  • 举报
回复
很不错
yapprsnow 2010-04-21
  • 打赏
  • 举报
回复
学习经验
jlugjb 2010-03-12
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
logon29 2010-03-11
  • 打赏
  • 举报
回复
写的不错 !顶顶顶顶顶顶顶
Andytuoye 2010-03-11
  • 打赏
  • 举报
回复
mark
  • 打赏
  • 举报
回复
大的设计思路很好
可是难的是细节~~
细节~~~~~~~~~~~
gzpyming 2010-03-11
  • 打赏
  • 举报
回复
很黄很暴力~好东西啊,要多点
TimDavid 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 ojlovecd 的回复:]
上传我推荐你使用flash或者silvelight控件来实现
[/Quote]
用Silverlight来实现冒失不太好。
dannylee322 2010-03-11
  • 打赏
  • 举报
回复
看起来不错,帮顶了
小波诺夫斯基 2010-03-11
  • 打赏
  • 举报
回复
方案很不错,是一般中型网站通用的方案。
naruto1021 2010-03-11
  • 打赏
  • 举报
回复
顶一下,慢慢研究
superdiablo 2010-03-10
  • 打赏
  • 举报
回复
fei chang hao de jing yan
tuqiang566 2010-03-10
  • 打赏
  • 举报
回复
俗话说,条条大路通罗马。不同的路都能走向成功。到底选哪条路,取决于自己的兴趣。可能有程序员会问:如果还没找到自己的兴趣怎么
l13560721968 2010-03-10
  • 打赏
  • 举报
回复
uygjhgjhbguiytuyjgvjhvuyfr
zzggzc 2010-03-10
  • 打赏
  • 举报
回复
路过 顶一下了 哈哈
sjt000 2010-03-10
  • 打赏
  • 举报
回复
mark一下吧,还没搞过这么大的~
加载更多回复(178)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧