MST

星途 面试题库

面试题:缓存设计之中等难度:缓存与CDN结合的基础架构

请阐述在一个典型的Web应用场景下,缓存与CDN结合的基本架构是怎样的?缓存和CDN分别在其中承担什么角色,它们是如何协同工作以加速内容分发的?
26.6万 热度难度
后端开发缓存设计

知识考点

AI 面试

面试题答案

一键面试

基本架构

  1. 客户端:发起对Web内容的请求,比如访问网页、加载图片、脚本等。
  2. CDN节点:分布在各地的边缘服务器,距离用户较近。CDN节点缓存了一部分经常被请求的内容。
  3. 缓存服务器:通常位于应用服务器前端,可能是基于内存的缓存,如Redis、Memcached等。应用服务器在处理请求时,先检查缓存服务器中是否有请求的内容。
  4. 应用服务器:处理业务逻辑,生成动态内容。如果缓存服务器中没有请求的内容,应用服务器会处理请求并将结果返回给缓存服务器和客户端。
  5. 源服务器:存储着Web应用的原始内容,包括静态文件(如HTML、CSS、图片)和动态生成的内容。当CDN节点和缓存服务器都没有请求的内容时,会从源服务器获取。

角色

  1. 缓存
    • 减少应用服务器负载:应用服务器可以从缓存中直接获取经常被请求的数据,避免重复执行相同的数据库查询或复杂的业务逻辑计算。例如,对于一些不经常变化的用户信息、配置数据等,可以缓存在内存中,下次请求直接从缓存获取。
    • 加速动态内容响应:对于动态生成的页面或数据,缓存可以存储其生成结果,使得后续相同请求能快速得到响应,减少处理时间。
  2. CDN
    • 地理上接近用户:通过将内容缓存到离用户更近的节点,大大减少了数据传输的物理距离,降低了延迟。比如用户在广州,CDN在广州有节点,就可以直接从本地节点获取内容,而不用到位于北京的源服务器获取。
    • 缓存静态内容:CDN主要负责缓存和分发静态内容,如图片、CSS、JavaScript文件等。这些文件不经常变化,非常适合CDN缓存,能显著提高用户访问速度。

协同工作加速内容分发

  1. 客户端请求:当客户端发起一个请求,首先会向本地DNS服务器查询域名对应的IP地址。
  2. CDN介入:如果请求的内容在CDN节点有缓存,CDN节点直接将内容返回给客户端。例如,一个用户请求一张图片,该图片已经被缓存在距离用户最近的CDN节点,CDN直接返回图片,完成请求。
  3. 缓存服务器参与:如果请求的是动态内容或者CDN节点没有缓存该内容,请求会到达应用服务器。应用服务器先检查缓存服务器中是否有对应的内容。若有,直接从缓存服务器获取并返回给客户端;若没有,则处理请求,生成响应内容,将内容返回给客户端的同时也缓存到缓存服务器中,以便后续相同请求能直接从缓存获取。
  4. 源服务器补充:如果CDN节点和缓存服务器都没有请求的内容,CDN节点会向源服务器请求内容,获取后一方面返回给客户端,一方面缓存到自身节点,下次相同请求就可以直接从CDN节点获取。同时,应用服务器生成的内容也会缓存到缓存服务器,为后续请求加速。