架构设计(四):CDN
架构设计(四):CDN
作者:Grey
原文地址:
CDN 全称 Content delivery network ,即:内容分发网络。
CDN 是一个地理上分散的服务器网络,主要用于提供静态内容。如:图片、视频、CSS、JavaScript 文件等。
还有一种是动态内容缓存,它可以实现基于请求路径、查询字符串、cookies和请求头的HTML页面的缓存。参考Amazon CloudFront 动态内容分发。本文主要介绍 CDN 技术
当用户访问一个网站时,离用户最近的 CDN 服务器将提供静态内容。也就是说,用户离 CDN 服务器越远,网站的加载速度就越慢。架构如下

整个工作流程如下
客户端通过使用一个图像 URL 来获取图片信息。该 URL 的域是由 CDN 提供者提供的。URL 类似如下的形式:https://mysite.cloudfront.net/logo.jpg
如果 CDN 服务器的缓存中没有这张图片,则 CDN 服务器就会从原始服务器中请求该文件。
原始服务器向 CDN 服务器返回该图片,其中包括可选的 HTTP 头 TTL(Time-to-Live),描述图像被缓存多长时间。
CDN 缓存图像并将其返回给用户A。图像一直缓存在CDN中,直到 TTL 过期。
另外一个客户端发送请求以获得相同的图像。
只要 TTL 没有过期,图像就会从 CDN 缓存中返回。
使用 CDN 要考虑的因素
成本。CDN 是由第三方供应商运行的,要为进出 CDN 的数据传输付费。缓存不经常使用的内容不会带来明显的好处,还会增加成本,所以,你应该考虑将它们从 CDN 中移出。
设置一个适当的缓存过期时间。对于时间敏感的内容,设置一个缓存过期时间时间是很重要的。缓存过期时间既不能太长也不能太短。如果它是太长,内容可能不再是最新的。如果它太短,它可能会导致重复从原始服务器重新加载内容到 CDN。
考虑你的网站或应用程序如何应对 CDN 故障。如果 CDN 暂时中断,客户应该能够检测到这个问题并从原始服务器请求资源。
如果 CDN 的内容无效了,应该要可以在一个文件过期前从 CDN 中把无效内容删除,有两种删除方式
- 第一种方式,是使用 CDN 供应商提供的 API 使 CDN 对象失效。
- 使用版本管理来提供对象的不同版本。可以在 URL 中添加一个参数,比如说版本号,
image.png?v=2,当版本号不同的时候,获取的内容也就不一样了。
参考资料
架构设计(四):CDN的更多相关文章
- GPS部标平台的架构设计(四)-百度地图设计
部标GPS软件平台之百度地图设计 地图是客户端中不可缺少的一个模块,很多人在设计和画图时候,喜欢加上地图引擎这样高大上的字眼,显得自己的平台有内涵,说白了就是用第三方的SDK来开发,早期的GPS监 控 ...
- .NET应用架构设计—四色原型模式(色彩造型、域无关的模型)(概念版)
阅读文件夹: 1.背景介绍 2.问自己,UML对你来说有意义吗?它帮助过你对系统进行分析.建模吗? 3.一直以来事实上我们被一个缝隙隔开了,使我们对OOAD遥不可及 4.四色原型模式填补这个历史缝隙, ...
- MySql(十四):MySql架构设计——可扩展性设计之数据切分
一.前言 通过 MySQL Replication 功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈.这时候,我 ...
- mybatis深入理解(四)-----MyBatis的架构设计以及实例分析
MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单.优雅.本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例, ...
- 我读《大数据时代的IT架构设计》
架构设计是一门艺术,对架构的掌握要通过多看,多学,多交流,多积累,从实战架构上总能吸收到很好的营养,这边书虽然 (一).hadoop技术处理电信行业的上网日志 根据上网的url或未知url爬取内容,进 ...
- 朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招
朱晔的互联网架构实践心得S2E6:浅谈高并发架构设计的16招 概览 标题中的高并发架构设计是指设计一套比较合适的架构来应对请求.并发量很大的系统,使系统的稳定性.响应时间符合预期并且能在极端的情况下自 ...
- vivo 服务端监控架构设计与实践
一.业务背景 当今时代处在信息大爆发的时代,信息借助互联网的潮流在全球自由的流动,产生了各式各样的平台系统和软件系统,越来越多的业务也会导致系统的复杂性. 当核心业务出现了问题影响用户体验,开发人员没 ...
- 一种简单的CQRS架构设计及其实现
一.为什么要实践领域驱动? 近一年时间我一直在思考一个问题:"如何设计一个松耦合.高伸缩性.易于维护的架构?".之所以有这样的想法是因为我接触的不少项目都是以数据库脚本来实现业务逻 ...
- ABP架构设计交流群-上海线下交流会的内容分享(有高清录像视频的链接)
点这里进入ABP系列文章总目录 ABP架构设计交流群-7月18日上海线下交流会内容分享 因为最近工作特别忙,很久没有更新博客了,真对不起关注我博客和ABP系列文章的朋友! 原计划在7月11日举行的AB ...
- 架构设计:负载均衡层设计方案(2)——Nginx安装
来源:http://blog.csdn.net/yinwenjie(未经允许严禁用于商业用途!) 目录(?)[-] Nginx重要算法介绍 1一致性Hash算法 2轮询与加权轮询 Nginx的安装 1 ...
随机推荐
- 使用docker-compose部署SonarQube
sonarqube 安装 1.系统配置,避免启动问题 # 系统配置,避免启动问题 echo "vm.max_map_count=262144" >> /etc/sysc ...
- .NET 反向代理 YARP 自定义配置提供程序(Configuration Providers)
介绍 基本 Yarp 示例显示从 appsettings.json 加载的代理配置.相反,代理配置可以从您选择的源以编程方式加载.您可以通过提供几个实现 IProxyConfigProvider 和 ...
- ERP 软件为什么很贵?
ERP软件的贵体现在两个方面,一个是软件系统贵,一个是部署实施贵,究其原因,就是ERP专业性太高.内部业务逻辑忒复杂,而面向形形色色的实体企业时个性化需求又加剧了它整体的复杂性,实施部署客制化无法避免 ...
- 汇编指令:lea
lea指令变种(按大小分类): leaw #2个字节 leal #4个字节 leaq #8个字节 lea的用法: leaq a(b, c, d), %rax 首先lea指令是mov指令的变种,据说,l ...
- 驱动开发:内核特征码扫描PE代码段
在笔者上一篇文章<驱动开发:内核特征码搜索函数封装>中为了定位特征的方便我们封装实现了一个可以传入数组实现的SearchSpecialCode定位函数,该定位函数其实还不能算的上简单,本章 ...
- 9.MongoDB系列之创建副本集(二)
1. 如何设计副本集 大多数:选取主节点时需要由大多数决定,主节点只有在得到大多数支持时才能继续作为主节点,写操作被复制到大多数成员时就是安全的写操作.这里的大多数定义为"副本集中一半以上的 ...
- js红宝书学习笔记(一)引用类型
一.引用类型 ECMAScript中,引用类型是一种数据结构称之为对象定义,,引用对象不同于传统面向对象语言所支持的类和接口等基本结构 创建Object 实例的两种方式: new操作符跟Object构 ...
- Vue中组件化编码使用(实战练习一)
Vue中组件化编码的大致流程(初接触).组件之间的参数传递(最基础的形式).组件之间的配合完成一个需求 1.在Vue中进行组件化编码 1.1.组件化编码流程: (1).拆分静态组件:组件要按照功能点拆 ...
- iview table json数据里的num排序问题
title: 'Num', key: 'num', sortable: true, sortMethod:function(a,b,type){ //可以用Number()或者parseInt(a)转 ...
- 【笔记】P1606 [USACO07FEB]Lilypad Pond G 及相关
题目传送门 建图 首先,根据题目,可以判断出这是一道最短路计数问题. 但是要跑最短路,首先要用他给的信息建图,这是非常关键的一步. 根据题意,我们可以想出以下建图规则: 起点或是一个空白处可以花费 \ ...