鬼吹灯-漫谈大型网站的架构

看到很多社区的小组里头有人在讨论大型网站的架构问题,发觉这几年虽然没搞出个新浪百度出来,但是在大型系统的架构上还是有点心得,遂鬼吹一把,来谈谈大型网站的架构设计。

首先我们要明白什么算是大型网站,大型的网站有多大才叫大型?新浪、百度还是Google这般巨大?是用户数量很多,还是业务量很大。这里又分是社区类网站还是新闻类还是电子商务类的网站。

新闻类的最简单,因为大部分是静态新闻的发布,比如新浪新闻等站点(个人觉得新浪应该算是一个站点群集)。社区类的就比较复杂了,功能复杂,数据关联性大,比如天涯,猫扑一类,又或Myspace,校内等。尤其是论坛,国内论坛水风太盛,发帖量居高不下,对优化查询是很大的挑战。电子商务类的网站最大挑战来自于订单量,订单处理有很高的可靠度要求,要保证数据的绝对完整性,这样对数据库的性能肯定有要求,而处理的账务逻辑也很复杂,所以要求跟新闻类和社区类又不相同。我们在这里无法一一分析,既然是鬼吹,就和到一起说了。

 

如果老师布置的作业多做不完怎么办呢?在我小时候一般有这样的解决方案,几个同学一起做,每人负责一个科目的作业,做好互相抄,这样就只需要很少的时间就能完成。那么网站也是如此,访问量太大怎么办呢?一台服务器忙不过来肯定要几台来一起咯,于是,我们把网站的功能分一分,用户功能一台来负责,新闻栏目一台来负责,论坛功能一台来负责,下载一台来负责,所有的图片放一台,最后留一台当数据库服务器(其实应该两台,做HR热备,防止单点故障),数据库就类似最后负责抄作业的同学,把最后的答案落实到实体上(真的,小时候我就这么做的)。那么这样的方式我称之为纵向的责任分割。这样就把流量分开了。

如果 数学作业太多,一个人也做不完怎么办?一个人不够不会让两个人做啊?那么服务器一样,如果两台服务器都做同一件事情,新闻还好办,如果是论坛怎么办呢?为了动态的分配流量,我们就需要用两台或者多台服务器来做负载均衡(2003自带功能不需要另购软件)。ok,现在我的站点访问量蹭蹭蹭的就上去了。但是现在又有点问题了,一台服务器又是网页又是逻辑的,要负责的责任太重啦,跑不动了,每一台都做这么多事情那么每一台的可承载能力就下降了,为了不再增加更多的服务器,那么我们还要对职责进行一次分割。

 

这次我们要向福特学习学习,福特发明了生产流水线,每个工人只负责很少的一部分重复的工作,比如拧拧螺丝,但是生产的总体产量得到了很大提高。那么我们也要把一次访问的职责拆分开。

其实呢也就是多层架构的方式,不过这次呢,多层架构的每个层次都在不同的计算机上。如下图

 

 

这样子就能够将责任分摊在不同的计算机上了。但是有人可能会问,这样子不是每个人访问的时候响应会变慢?

那是肯定的,但是每个人慢一点点所带来的是整个网站可以容纳更多的用户,每个用户慢1秒,但是能够提高一倍的用户量的话我想大家都会算。这类方式对电子商务类的网站比较适用,对论坛啊新闻类的就不大适合了。

这种方式我称之为横向责任分割。

 

通过上面两个例子,我们用了,横纵两个方向的责任分割来达到减小每一个服务器的压力并保证系统的完整一致性。基本上几百万的PV是完全没问题的。最后为了改善客户访问的响应速度,还可以在前端通过加缓存的方式来进一步提高性能。

好了,鬼吹至此我已经语枯辞穷语无伦次了。最后感谢各位看客对我的大力支持,谢谢CCTV,感谢MTV ,感谢博客园给我这个鬼吹的机会,谢谢,谢谢大家。

 

posted on 2008-08-14 13:17  亚历山大同志  阅读(7394)  评论(49编辑  收藏  举报

导航