如何读懂Web服务的系统架构图

Web服务的一个重要特色就是流量大、数据多,仅靠一台服务器确定难以支撑大规模的服务。 因此咱们常常会看到诸如如下的一些术语,教人好生不懂:web

*:系统架构、物理架构、Web服务基础设施数据库

*:应用服务器浏览器

*:数据库服务器缓存

*:索引服务器服务器

*:反向代理服务器架构

*:缓存服务器app

*:分布式、可扩展性less

*:cpu负载、IO负载分布式

若是你也不懂,那么本文对你来讲就是一个很好的开始,关于web服务架构方面,前面还有几篇不错的文章可供参考阅读---大型网站架构演化历程(上)、大型网站架构演化历程(下)、大型网站的灵魂——性能(请戳我)。性能

本文的主要目标—读懂下面这张图例:

如何读懂Web服务的系统架构图

cpu负载和I/O负载

咱们从CPU和IO提及。 一个典型的Web服务就是网站服务——用户经过浏览器向服务器发起请求,服务器从数据库提取数据后,加工处理返回HTML页面给用户。

如何读懂Web服务的系统架构图

上图中的4个箭头“<—”都须要消耗Server的CPU计算资源,而从Database中获取数据则消耗IO资源。 当用户数量、请求数量上升时,Server的CPU资源告急(IO资源负载也有增长);当储存的数据量上升时,Server的IO资源也要告急。

好比说单台Server每分钟能够处理3000次请求(PV, Page View),那么每个月就能够处理100万PV,超过这个数量服务器就撑不住了; 每次请求都须要从文件系统提取数据的话,因为读取磁盘所需的时间是内存的100000-1000000倍,每分钟的请求数多了数据提取速度必然跟不上,数据库就挂了。

可扩展性

如何处理规模逐渐增大服务需求呢?这要求你的系统要有可扩展性:

横向扩展:横向扩展又叫分布式,一台Server撑不住我就多来几台。 但现实远比理想复杂。

纵向扩展:纵向扩展是金融高富帅或者企业软件比较常采用的方法,由于服务器的价格和性能不成正比,性能达到必定程度后,每一分性能的提升须要投入更多的钱——服务器性能的边际价格是不断上升的。 对于互联网的草根创业团队来讲,这显然是不可接受的。

cpu能力的扩展

CPU负载的分散比较容易,由于CPU的计算不存在依赖性,即当前请求的结果不依赖于上一次请求的结果。 HTTP协议的stateless就是一个很好的例子。 这样CPU撑不住的时候,我直接clone几台彻底一块儿的就行了,而被克隆的这种服务通常就称做应用服务器。

应用服务器和Web服务器的界限并不很清晰。 Web服务器负责接收用户发过来的请求和返回资源对象给用户,而应用服务器则负责经过计算产生这个资源对象(好比调用CGI脚本)。

这样CPU的负载问题就解决了,咱们的架构变成了这个样子。

如何读懂Web服务的系统架构图

I/O能力的扩展

内存读取的速度远高于磁盘,根据操做系统缓存(Cache)的原理,咱们提升数据读取速度的基本思路是——提升内存大小能够显著的下降IO负载,即为你的Server换上更大更多的内存条。 相应的基本方针——当操做系统的缓存没法处理时,再进一步考虑分布式。 IO负载分散的本质也就是廉价小容量内存的分散。

IO负载的分散可比CPU的难多了,因为存在数据同步的问题,咱们这里不讨论数据库服务器之间全盘的数据复制和冗余化。 既然数据量太大,大到一台服务器的内存装不下,那咱们就把数据分割开来——数据分割(数据压缩也能够达到必定的效果)。

Web服务的请求是存在访问模式,好比爬虫和普通用户的访问(爬虫会请求很早之前的页面,而普通用户大多访问当前的热门页面),咱们把应对用户的热门的资源对象放在一台服务器,应对爬虫的资源对象放在另外一台。

即便不存在访问模式,咱们也能够经过分区(Partitioning),即表分割来作到。 好比如今MySQL数据库里有一个用户ID表,用户量增加后表的record数是13亿,咱们根据ID的大小来排序,分割成几个ID表,每一个表几千万个ID,这样单个表大小就是GB级别——内存够装了。

不论是哪种状况,咱们都须要一台索引服务器,来作应用服务器和数据服务器的mapping。

那么如今咱们的架构就是:

如何读懂Web服务的系统架构图

本文的说明就到这里为止了,相信你如今再回头看开头的那张系统架构图将会很是容易了吧。

转自:灯塔大数据

相关文章
相关标签/搜索