计算机系统架构梳理(八)缓存

Posted by A Chang on March 8, 2020

计算机系统架构梳理(八)缓存

计算机中的缓存

缓存(cache),原始意义是指访问速度比一般随机存取存储器(RAM)快的一种高速存储器,通常它不像系统主存那样使用DRAM技术,而使用昂贵但较快速的SRAM技术。缓存的设置是所有现代计算机系统发挥高性能的重要因素之一。

缓存的工作原理

当CPU要读取一个数据时,首先从CPU缓存中查找,找到就立即读取并送给CPU处理;没有找到,就从速率相对较慢的内存中读取并送给CPU处理,同时把这个数据所在的数据块调入缓存中,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。正是这样的读取机制使CPU读取缓存的命中率非常高(大多数CPU可达90%左右),也就是说CPU下一次要读取的数据90%都在CPU缓存中,只有大约10%需要从内存读取。这大大节省了CPU直接读取内存的时间,也使CPU读取数据时基本无需等待。总的来说,CPU读取数据的顺序是先缓存后内存。

缓存分类

RAM又分两种,一种是静态RAM,SRAM(Static RAM);一种是动态RAM,DRAM(Dynamic RAM)。
前者的存储速率要比后者快得多,使用的内存一般都是动态RAM。为了增加系统的速率,把缓存扩大就行了,扩的越大,缓存的数据越多,系统就越快了,缓存通常都是静态RAM,速率是非常的快, 但是静态RAM集成度低(存储相同的数据,静态RAM的体积是动态RAM的6倍),价格高(同容量的静态RAM是动态RAM的四倍),由此可见,扩大静态RAM作为缓存是一个非常愚蠢的行为,但是为了提高系统的性能和速率,必须要扩大缓存,这样就有了一个折中的方法,不扩大原来的静态RAM缓存,而是增加一些高速动态RAM做为缓存,这些高速动态RAM速率要比常规动态RAM快,但比原来的静态RAM缓存慢,把原来的静态RAM缓存叫一级缓存,而把后来增加的动态RAM叫二级缓存

网络中的缓存

网络缓存是一种降低Internet流量和提高终端用户响应时间的新兴网络技术。它的观念来自于计算机和网络的其他领域,如流行的Intel架构的CPU中就存在缓存,用于提高内存存取的速率;各种操作系统在进行磁盘存取时也会利用缓存来提高速率;分布式文件系统通常也通过缓存来提高客户机和服务器之间的速率。

影响Internet访问速率

访问网站的过程是通过建立在TCP/IP协议之上的HTTP协议来完成的。从客户端发出一个HTTP请求开始,用户所经历的等待时间主要决定于DNS和网站的响应时间。网站域名首先必须被DNS服务器解析为IP地址,HTTP的延时则由在客户端和服务器间的若干个往返时间所决定。往返时间是指客户端等待每次请求的响应时间,平均往返时间取决于三个方面:

  1. 网站服务器的延时
    网站服务器造成的延时在往返时间中占主要比例。当某个服务器收到多个并发HTTP请求时,会产生排队延时。由于响应一个HTTP请求,往往需要多次访问本地硬盘,所以即使是一台负载并不大的服务器,也可能产生几十或几百微秒的延时。
    由路由器、网关、代理服务器和防火墙引入的延时 通常在客户端和服务器之间的路径上会存在多个网络设备,如路由器、网关、代理和防火墙等。它们对经过的IP包都要做存储/转发的操作,于是会引入排队延时和处理延时。在网络拥塞时,这些设备甚至会丢包,此时会寄希望于客户端和服务器通过端到端的协议来恢复通信。

  2. 不同通信链路上的数据传输速率
    在广域网中,从一个网络设备到另一个网络设备间的数据传输速率是决定往返时间的一个重要因素。但基本带宽的作用并不是像人们想象的那么重要,一项测试表明,当网站采用T3速率接入Internet时,也仅有2%的网页或对象能以64kbps的速率提供给客户端,这显然表明,带宽在网络性能上不是最关键的因素。
    Internet在向世界的每一个角落延伸,用户向一个服务器发出的 请求可能会经过8000公里到1.6万公里的距离,光速带来的延时和网络设备的延时是网络如此缓慢的最根本原因。

  3. 网络缓存解决根本问题
    既然影响网络速率的原因是由距离和光速引起,那么加速Web访问的唯一途径就是缩短客户端与网站之间的距离。通过将用户频繁访问的页面和对象存放在离用户更近的地方,才能减少光速引入的延时,同时由于减少了路由中的环节,也相应地减少了路由器、防火墙和代理等引入的延时。
    传统的解决办法是建立镜像服务器来达到缩短距离的目的。但这个办法存在很大的不足,对于某个站点而言,不可能在离每个用户群较近的地方都建立镜像站点,若对大多数网站都用这样的办法就更不经济,同时管理和维护镜像站点是一项非常困难的工作。

Web缓存系统带来的问题

  1. 客户通过代理获取的可能是过时的内容。
  2. 如果发生缓存失效,客户的访问延迟由于额外的代理处理开销而增加。因此在设计Web缓存系统时,应力求做到Cache命中率最大化和失效代价最小化。
  3. 代理可能成为瓶颈。因此应为一个代理设定一个服务客户数量上限及一个服务效率下限,使得一个代理系统的效率至少同客户直接和远程服务器相连的效率一样。