关于一个大型web系统构架图的理解
我刚刚毕业,没有接触过什么大型的系统,甚至没见过多个服务器是怎么连起来的。但是我知道,大型的web系统要把服务器放在集装箱里面,要占很多空间,如何供电如何制冷都是非常慎重的。在网上见过Google的数据中心站片,简直像一个小型工厂一样。
下面这个图是我以前从网上看到的,于是就下载了下来,一直保存着。今天闲来无事,就和大家聊聊我的理解,有什么地方不对的,还请大家多多指教。
构架图如下:
我们从下往上就行分析:
1,对数据库的操作(提交数据):“应用服务器群”会向“数据库群”提交数据,也会从"数据库群"获取数据。当提交数据的时候,会把数据先提交给“异步队列”,然后定期把从“异步队列”提交到“数据库群”。
大型网站往往对应着海量数据,并且每时每刻都有大量数据提交。如果不用“异步队列”将提交数据分批处理,数据库会每时每刻都处于被提交状态。这样很可能不堪重负而死去。
2,对数据库的操作(查询数据):大家都知道缓存,这里的“分布式缓存服务器群”就是一个缓存,但它是一个有很多服务器连接起来的大型缓存,比如facebook有成千上万台服务器通过memcached连接成一个分布式缓存服务器群。“应用服务器群”首先会向“分布式缓存服务器群”获取数据,如果缓存的数据过期,再向“数据库群”获取数据,并再次把数据更新到缓存中,以便下次使用。
CPU访问缓存的速度要远远快于访问硬盘的速度,大型web系统每天有大量PV,海量的访问,如果没有缓存,每次访问都得从数据库中查询,那是不可想象的。再者,面对数据库的海量数据,缓存必须通过分布式解决,因为一台机器的缓存不足以应付那么大的数据量。
3,对数据库的操作(总结):不管是对数据库的提交还是查询,都有两个特点。第一,批量操作,对数据库的操作次数要远远低于系统的访问次数;第二,都经过内存,提交过程的“异步队列”和访问过程中的“分布式缓存”都是内存。这样的数据操作增加了系统的访问速度,同事减少了数据库的压力。
4,“动态web服务器群”直接面对用户访问,当用户向系统查询或者提交数据时,“动态web服务器群”只做一部分程序运算,设计到数据库操作的运算,直接调用“应用服务器群”来完成。
这样可以平均分担服务器的压力,而且使系统各层级各部门职责分明,便于管理。
5,“应用服务器群”会不断把一些既定的内容生成html静态页,保存到“静态web服务器群”中。用户对这些内容的访问,系统会提供静态页的链接,使用户直接访问静态页。
服务器对静态页的处理和动态页处理相比,大大减少了CPU的压力。另外,生成静态页也减少了缓存的压力,因为一般的静态页用不到复杂的缓存。
6,“文件服务器群”存储了系统的海量图片、视频等文件,于是这个服务器群需要很大的硬盘存储空间。用户访问网页,网页会加载其中相应的图片或视频。文件服务器对CPU和网络带宽的要求都相当高,单独用一个服务器群存储处理文件时,可以为这个服务器群单独加大带宽和CPU速度。
7,至于左上角的“外部资源,比如Google搜索和报表”,我暂时还不明白什么意思,希望大家多多指教。
以上就是我对这个构架图的理解,肯定有不准确甚至错误的地方,希望大家不吝赐教。