热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于前端:高性能利器CDN我建议你好好学一下

CDN全称ContentDeliveryNetwork,即内容散发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳固

硬核干货分享,欢送关注【Java补习课】成长的路上,咱们一起前行 !\
《高可用系列文章》 已收录在专栏,欢送关注!

CDN 概述

CDN 全称 Content Delivery Network,即内容散发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳固

CDN 的工作原理 就是将源站的资源缓存CDN各个节点上,当申请命中了某个节点的资源缓存时,立刻返回客户端,防止每个申请的资源都通过源站获取,防止网络拥塞、缓解源站压力,保障用户拜访资源的速度和体验。

举一个生存中的例子,咱们在某东上购买商品,快递能做到当日送达,其基本原理是通过在全国各地建设本地仓库。当用户购买商品时,通过智能仓配模式,为消费者抉择就近仓库发货,从而缩短物流配送工夫。

而商品库存的调配,流程能够参考下图,从 工厂(源站) -> 地区仓库(二级缓存) -> 本地仓库 (一级缓存)

内容散发网络 就像后面提到的 智能仓配网络 一样,解决了因散布、带宽、服务器性能带来的拜访提早问题,实用于站点减速、点播、直播等场景。使用户可就近获得所需内容,解决 Internet网络拥挤的情况,进步用户拜访网站的响应速度和成功率。

CDN的诞生

CDN 诞生于二十多年前,为解决内容源服务器和传输骨干网络压力过大的问题,在 1995 年,麻省理工学院传授,互联网发明者之一 Tom Leighton 率领着研究生 Danny Lewin 和其余几位顶级钻研人员一起尝试用数学问题解决网络拥挤问题。

他们应用数学算法,解决内容的动静路由安顿,并最终解决了困扰 Internet 使用者的难题。起初,史隆治理学院的 MBA 学生 Jonathan Seelig 退出了 Leighton 的队伍中,从那以后他们开始施行本人的商业打算,最终于 1998 年 8 月 20 日正式成立公司,命名为 Akamai。Akamai 公司通过智能化的互联网散发,完结了 “World Wide Wait” 的难堪场面。

同年 1998 年,中国第一家 CDN 公司 ChinaCache 成立

CDN工作原理

接入CDN

在接入CDN前,当咱们拜访某个域名,间接拿到第一个实在服务器的IP地址,整个流程如下(图有点简陋)

当咱们须要减速网站时,通过向运营商注册本人减速域名,源站域名,而后进入到本人域名的DNS配置信息,将 A 记录批改成 CNAME 记录即可。阿里云减速申请参考如下:

CDN拜访过程

  • 1、用户拜访图片内容,先通过 本地DNS 解析,如果 LDNS 命中,间接返回给用户。
  • 2、LDNS MISS,转发 受权DNS 查问
  • 3、返回域名 CNAME [picwebws.pstatp.com.wsglb0.com.]() 对应IP地址(理论就是DNS调度零碎的ip地址)
  • 4、域名解析申请发送至DNS调度零碎,DNS调度零碎为申请调配最佳节点IP地址。
  • 5、返回的解析IP地址
  • 6、用户向缓存服务器发动申请,缓存服务器响应用户申请,将用户所需内容传送到用户终端。

图:华为云全站减速示意图

CDN解决了什么问题

骨干网压力过大

Tom Leighton1995 年, 率领团队尝试用数学问题解决网络拥挤问题,从而解决骨干网络压力过大的问题。因为上网冲浪 的少年越来越多,造成骨干网的外围节点流量吞吐不足以撑持互联网用户的增长,通过CDN能够防止用户流量流经骨干网。

骨干网是一个全球性的局域网,一级互联网服务提供商(ISP)将其高速光纤网络连贯在一起,造成互联网的骨干网,实现在不同天文区域之间高效地传输流量。

1、局域网

局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组,比方:在大学期间,早晨12点后断网了,咱们依然可能通过路由器开黑打CS魔兽。那就是基于局域网互联,实现材料共享与信息之间的通信。

2、骨干网

这里援用一下中国电信全网架构,骨干网能够了解成是一个全国性的局域网,通过外围节点的流量互通,实现全网网络的互通。这也是为什么咱们称为互联网 的起因。

北京、上海、广州,是ChinaNet的超级外围。除了超级外围之外,ChinaNet还有天津、西安、南京、杭州、武汉、成都等一般外围。

三公里之 middlemile

通常网络拜访中会有”三公里”途程

  • 第一公里为:源站到ISP接入点
  • 第二公里为:源站ISP接入点到拜访用户的ISP接入点
  • 第三公里(最初一公里)为:用户ISP接入点到用户客户端

CDN网络层次要用来减速第二公里(middlemile),

在 CDN 的基础架构中,通常应用两级 server 做减速:

  • L1(上层):间隔用户(或俗称网民)越近越好,通常用于缓存那些可缓存的静态数据,称之为 lastmile(最初一公里)。
  • L2(下层):间隔源站越近越好,称之为 firstmile(第一公里),当 L1 无奈命中缓存,或内容不可缓存时,申请会通过 L1 透传给 L2,若 L2 依然没有命中缓存或内容不可缓存,则会持续透传给 L2 的 upstream(有可能是源站,也有可能是 L3),同时 L2 还能够做流量、申请数的量级收敛,缩小回源量(如果可缓存),升高源站压力。
  • L1 和 L2 之间的局部,是 CDN 的 ”外部网络“,称之为 middlemile(两头一公里)。

CDN的组成

全局负载平衡零碎 GLB(Global Load Balance)

  • 当用户拜访退出CDN服务的网站时,域名解析申请将最终由 “智能调度DNS”负责解决。
  • 它通过一组事后定义好的策略,将过后最靠近用户的节点地址提供给用户,使用户能够失去疾速的服务。
  • 同时它须要与散布在各地的CDN节点放弃通信,跟踪各节点的衰弱状态、容量等信息,确保将用户的申请调配到就近可用的节点上.

缓存服务器

缓存服务器次要的性能就是缓存热点数据,数据类型包含:动态资源(html,js,css等),多媒体资源(img,mp3,mp4等),以及动态数据(边缘渲染)等。

家喻户晓耳熟能详的与 CDN 无关的开源软件有:

  • Squid
  • Varnish
  • Nginx
  • OpenResty
  • ATS
  • HAProxy

具体比照可参考:https://blog.csdn.net/joeyon1985/article/details/46573281

CDN的分层架构

源站

源站指公布内容的原始站点。增加、删除和更改网站的文件,都是在源站上进行的;另外缓存服务器所抓取的对象也全副来自于源站。

CDN 调度策略

DNS 调度

基于申请端 local DNS 的进口 IP 归属地以及运营商的 DNS 调度。

DNS 调度的问题:

  • DNS 缓存工夫在 TTL 过期前是不会刷新的, 这样会导致节点异样的时候主动调度延时很大,会间接影响线上业务拜访。
  • 大量的 local DNS 不反对 EDNS 协定,拿不到客户的实在IP,CDN 绝大多数时候只能通过local DNS IP来做决策,常常会呈现跨区域调度的状况。

HTTP DNS 调度

客户端申请固定的 HTTP DNS 地址,依据返回获取解析后果。能够进步解析的准确性(不像DNS调度,只能通过local DNS IP来做决策),能很好的防止劫持等问题。

当然这种模式也有一些问题,例如客户端每次加载URL都可能产生一次HTTP DNS查问,这就对性能和网络接入要求很高。

302调度

基于客户端 IP 和 302 调度集群进行实时的流量调度。

咱们来看一个例子:

  1. 拜访 URL 链接后,此时申请到了调度群集上,咱们能拿到的客户端信息有 客户端的进口IP(绝大多状况下是雷同的),接下来算法和基于 DNS 的调度能够是一样的,只是判断根据由 local DNS 进口 ip 变成了客户端的进口IP。
  2. 浏览器收到302回应,追随 Location 中的 URL,持续发动 http 申请,这次申请的指标 IP 是CDN 边缘节点,CDN节点会响应理论的文件内容。

302 调度的劣势:

  • 实时调度,因为没有 local DNS 缓存的,适宜 CDN 的削峰解决,对于老本管制意义重大;
  • 准确性高,间接获取客户端进口 IP 进行调度。

302 调度的劣势:

  • 每次都要跳转,对于延时敏感的业务不敌对。个别只实用于大文件。

AnyCast BGP路由调度

基于 BGP AnyCast 路由策略,只提供极少的对外 IP,路由策略能够很快的调整。

目前 AWS CloudFront、CloudFlare 都应用了这种形式,在路由层面进行调度。

这种形式能够很好地抵挡 DDOS 攻打,升高网络拥塞。

当然这种形式的老本和方案设计都比较复杂,所以国内的 CDN 目前还都是用 UniCast 的形式。

一些概念

CDN运作原理

本地缓存的数据,通过key-value 的模式,将url 和本地缓存进行映射,存储构造与 Map类似,采纳 hash+链表模式进行缓存。

CDN命中率

掂量咱们CDN服务质量的一个外围规范,当用户拜访的资源恰好在缓存零碎里,能够间接返回给用户,阐明CDN命中;如果CDN缓存中,没有命中资源,那么会触发回源动作。

CDN回源

当CDN本地缓存没有命中时,触发回源动作,

  • 一级缓存 拜访二级缓存是否有相干数据,如果有,返回一级缓存。
  • 二级缓存 Miss,触发 二级缓存 回源申请,申请源站对应数据。获取后果后,缓存到本地缓存,返回数据到一级缓存。
  • 一级缓存 获取数据,缓存本地后,返回给用户。

CDN预热数据

下面说的拜访模式,都是基于Pull模式,由用户决策哪局部热点数据会最终存留在CDN缓存中;对于大促场景,咱们往往须要事后将流动相干资源预热边缘节点(L1),防止大促开启后,大量用户拜访,造成源站压力过大。这时候采纳的是 Push模式

CDN的特点总结

1、资源拜访减速: 本地Cache减速,进步了企业站点(尤其含有大量图片和动态页面站点)的访问速度,并大大提高以上性质站点的稳定性

2、打消运营商间网络互联的瓶颈问题: 镜像服务打消了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络减速,保障不同网络中的用户都能失去良好的拜访品质。

3、近程减速: 近程拜访用户依据DNS负载平衡技术 智能主动抉择Cache服务器,抉择最快的Cache服务器,放慢近程拜访的速度

4、带宽优化: 主动生成服务器的近程Mirror(镜像)cache服务器,近程用户拜访时从cache服务器上读取数据,缩小近程拜访的带宽、分担网络流量、加重原站点WEB服务器负载等性能。

5、集群抗攻打: 宽泛散布的CDN节点加上节点之间的智能冗余机制,能够无效地预防黑客入侵以及升高各种D.D.o.S攻打对网站的影响,同时保障较好的服务质量 。

点关注,不迷路

好了各位,以上就是这篇文章的全部内容了,我前面会每周都更新几篇高质量的大厂面试和罕用技术栈相干的文章。感激大伙能看到这里,如果这个文章写得还不错, 求三连!!! 感激各位的反对和认可,咱们下篇文章见!

我是 九灵 ,有须要交换的童鞋能够关注公众号:Java 补习课! 如果本篇博客有任何谬误,请批评指教,不胜感激 !


推荐阅读
  • 分布式系统关注点——360°全方位解读「缓存」
    如果这是第二次看到我的文章,欢迎文末扫码订阅我个人的公众号(跨界架构师)哟~  本文长度为3578字,建议阅读10分钟。坚持原创,每 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • EvanWeaver是Twitter服务团队的总工程师,他的主要工作是优化与伸缩性。在QConLondon2009上,他谈到了Twitter的架构&#x ... [详细]
  • Ivearails3app,runningwellfastonherokusbamboostack.Totestwhethermyappworksontheu ... [详细]
  • 在不用缓存、集群之类东东只情况下,PHP框架哪家强?我指的是高并发高负载,并且适合做大型项目的。高负载不是一个语言的问题,这 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 本文介绍了关于Java异常的八大常见问题,包括异常管理的最佳做法、在try块中定义的变量不能用于catch或finally的原因以及为什么Double.parseDouble(null)和Integer.parseInt(null)会抛出不同的异常。同时指出这些问题是由于不同的开发人员开发所导致的,不值得过多思考。 ... [详细]
  • redis理论知识redis:非关系型数据库基于键值对的形式存储数据的查询效率非常的高没有表之间的约束查询起来比较方便redis特点:1.支持多种数据类型2.支持分布式存储3.功能 ... [详细]
  • Varnish搭建CDN内容分发网络
    概述:1.CDN内容分发网络CDN的全称是ContentDeliveryNetwork,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据 ... [详细]
author-avatar
狗子汪_322
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有