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

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

*:应用服务器

*:数据库服务器

*:索引服务器

*:反向代理服务器

*:缓存服务器

*:分布式、可扩展性

*:cpu负载、IO负载

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

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

cpu负载和I/O负载

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

上图中的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的负载问题就解决了,我们的架构变成了这个样子。

I/O能力的扩展

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

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

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

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

不管是哪一种情况,我们都需要一台索引服务器,来做应用服务器和数据服务器的mapping。

那么现在我们的架构就是:

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

转自:灯塔大数据

如何读懂Web服务的系统架构图的更多相关文章

  1. (四)Web应用开发---系统架构图

    系统宏观架构:EASYUI+MVC 系统架构图一. 系统架构图二.

  2. android系统架构图

    android的系统架构和其操作系统一样,采用了分层的架构.从架构图看,android分为四个层,从高层到低层分别是应用程序层.应用程序框架层.系统运行库层和Linux核心层. 1.应用程序 Andr ...

  3. 五分钟!用python绘制漂亮的系统架构图

    Diagrams 是一个基于Python绘制云系统架构的模块,它能够通过非常简单的描述就能可视化架构,并支持以下6个云产品的图标: AWS.Azure.GCP.K8s.阿里云 和 Oracle 云 基 ...

  4. 一文读懂HarmonyOS服务卡片怎么换肤

    作者:zhenyu,华为软件开发工程师 关注HarmonyOS的小伙伴肯定对服务卡片已经很熟悉了.服务卡片(也简称为"卡片")是FA(FeatureAbility,元服务)的一种界 ...

  5. 三分钟读懂Oracle数据库容灾架之DataGuard

    Oracle数据库目前依然处于商用数据库的霸主地位. 运行在Oracle数据库上的核心业务及核心数据的安全性尤为重要. 目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle ...

  6. 转://三分钟读懂Oracle数据库容灾架之DataGuard

    目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle 公司自己的容灾产品 非Oracle公司的容灾产品 Oracle公司目前的容灾产品有我们常见的DataGuard和属于中 ...

  7. 画了一张基于Spring Cloud的微服务系统架构图

  8. hbase 学习(十六)系统架构图

    HBase 系统架构图 组成部件说明 Client: 使用HBase RPC机制与HMaster和HRegionServer进行通信 Client与HMaster进行通信进行管理类操作 Client与 ...

  9. 口碑外卖系统架构图(li)

随机推荐

  1. TFS 中如何将项目加入已有的源代码管理器中?

    Visual Studio 的某解决方案已经加入 Team Foundation Server,现在再将已经存在的项目加入到解决方案中,可是签入时,并没有把新加入的项目签入,怎么办呢? 在团队资源管理 ...

  2. Django框架(六)—— 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传

    目录 视图层 一.视图函数 二.视图层之HttpRequest对象 三.视图层之HttpResponse对象 四.视图层之JsonResponse对象 五.CBV和FBV 六.文件上传 视图层 一.视 ...

  3. Jenkins和Docker

    由于采用了Docker版的Jenkins,导致在Jenkins里无法调用Docker命令行工具进行Docker镜像构建 有三种解决方案: 1. 安装Docker插件,利用Jenkins插件进行构建 2 ...

  4. git入门基本命令

    第一个命令 git init (repo_dir) 初始化git版本库,如果省略repo_dir的话,那么就把当前目录作为git库进行初始化. 第二个命令 git status 查看版本库状态,随时可 ...

  5. Spark中的多线程并发处理

    Spark中的多任务处理 Spark的一个非常常见的用例是并行运行许多作业. 构建作业DAG后,Spark将这些任务分配到多个Executor上并行处理.但这并不能帮助我们在同一个Spark应用程序中 ...

  6. ArcGis基础——动态显示面要素的面积值

    很基础,不赘述. 1.在catalog(目录)新建一个PersonalGeoDatabase(个人地理数据库),导入需要处理的Shapefile文件. 坐标系统,存储路径与命名根据自己需求设定 2.直 ...

  7. 杭电多校第三场-H-Game

    题目描述 Again Alice and Bob is playing a game with stones. There are N piles of stones labelled from 1 ...

  8. 笔记33 Spring MVC的高级技术——Spring MVC配置的替代方案

    一.自定义DispatcherServlet配置  AbstractAnnotationConfigDispatcherServletInitializer所完成 的事情其实比看上去要多.在Spitt ...

  9. Python 3.3 IDLE 删除键出现空格卡顿

    Python 3.3 IDLE 删除文字时会出现"□",造成删除键卡顿 原因:使用的是百度输入法,由于输入法的编码方式不同,对IDLE造成了不兼容 换成了搜狗输入法问题解决.... ...

  10. 影响RAKsmart服务器稳定性的相关因素

    RAKsmart美国服务器近年来凭借着成熟的技术和性价比吸引着广大站长,那RAKsmart服务器稳定性怎么样呢?有什么影响因素呢?下面来了解一下吧. 因素一:服务器配置 服务器能正常运营是建立在服务器 ...