(转2007)思考高并发高负载网站的系统架构

阿赞 2011-04-20

下面是我10月中旬的想法,经过和小黑的讨论,现在想法有些变化。

如今百家@*店的网站架构已经在超负荷工作了。服务器经常达到100%的使用率。主要是数据库占用了大量的CPU资源。这样的系统,根本无法跟上网站的发展。

所以,我针对我们网站,考虑了一些关于网站流量分流的方法。

1,看了一下别人的文章,大部分都说,现在的网站瓶颈在于数据库。所以,我们这里放在第一条。我们设计的网站要求用户数量要达到1亿。(目前淘宝用户近2000万,腾讯用户近10亿,活跃用户1亿多)。当然,我们的设计要多考虑一些,所以,就定位在淘宝的用户数和腾讯的用户数之间。

用户名列表单独建立数据库,以便随时将此数据库独立出去单独建服务器。用户登录的时候,数据库要从1亿记录中查找数据,即使使用主索引,也要将近1秒时间(在SQLSERVER中,使用like查找20万条数据,就需要大约2秒种,这里是按照精确匹配以及主索引联合的方式查找)。所以,我们要将用户表分表。以26个字母为分表顺序,中文开头的用户名一张表,数字开头的用户名一张表。这样就有28张表,平均下来,一张表300万数据,最多的一张表估计大约1000万数据。然后,以用户名为主索引,SQLSERVER数据库应该可以应付过来了。

除了用户表单独建立数据库以外,还要准备大城市大约需要100万左右的商品数据,500万左右的帖子(目前杭州网论坛有超过30万主题贴,600万回复贴),所以,现将商品数据存放在一个独立的数据库中,论坛帖子也存放在一个独立的数据库中,商品数据按城市分表,论坛帖子也安城市分,分别是主题贴一张表,回复贴一张表。

商店数量(淘宝目前有约60万活跃商店)我们网站应为不释放商店,所以需要更多的表存储该数据,目前无法确定,约为1000万家商店。保险期间,也独立建一个数据库,到时候可以和其他小数据库同用一个服务器。

商店对应的商店分类,以及友情链接,由于数量要预定至少10倍于商店数量,所以也要分别单独建立数据库,并按照用户名分表。

网站总设置,以及城市列表,版主信息等,这些可以生成静态内容的单独建立一个数据库。城市内商品分类需要单独建立一个数据库。并按照城市分表。

其他内容同理。到这里为止,理论上解决了数据库的瓶颈问题。

2,尽可能生成静态HTML页面。首页生成HTML页面,城市首页生成HTML页面,所有商品页面生成HTML页面,帖子第一页(前10篇)也生成HTML页面。如果一个主题贴超过1页,可以点击“更多”查看。这样可以节省服务器资源。生成页面的时候,服务器会占用大量CPU资源。所以,此功能要单独放置在一个独立的服务器中,并在该服务器上建立一个缓存队列数据库,用户在提交表单的时候,将数据保存在缓存队列数据库中,等待服务器的处理。服务器按照发表时间顺序(主索引)处理这些内容。将生成的HTML商品页面放在一个文件夹内(可随时增设服务器),上传图片和处理图片,存放图片在另一个文件夹内(图片最消耗IIS资源,以后一定要增设图片服务器)。并将处理好的内容存入主数据库中,并在缓存队列数据库中删除处理好的记录。这2块是占用CPU的大头,要随时准备移除主WEB服务器。

3,使用缓存。有些网页,像首页,可以学习百度首页,缓存24小时。

4,读取和写入数据库分开。用2个完全一样的数据库,一个专门用来写入,一个用来读取,隔断时间将新加入的数据从写入数据库拷贝到读取数据库,这样可以减少数据库的符合。这个方法听说很多网站都采用的。

5,在北方,教育网等特殊网络做镜像服务器;

6,使用负载均衡技术。由特殊的服务商提供方案。

相关推荐