分享CDN内容分发网络实战技巧

小新发布于:2022-08-01阅读:0

和大家分享一下CDN总共分为两部分:原理、详解。

首先说一下CDN的基本原理部分,主要分4块来描述:CDN原因,如何调度,什么是缓存,什么是安全。

分享CDN内容分发网络实战技巧

什么是CDN?

这是一个做过的人CDN在拓扑图之后,有几个概念需要澄清:

OriginServer:源站,也就是做CDN以前的客户真正的服务器;

User:访问者,即想要访问网站的网民;

EdgeServer:CDN服务器,不仅是边缘服务器s/指/;

LastMile:最后一公里,也就是网友访问他的时候CDN服务器之间的路径。

我们平时用的DNS一般称为服务器LDNS,在分析域名时,通常有两种情况,一种是域名DNS上有记录,另一种情况是没有记录,两种情况的处理流程不一样。

如果您访问163域名LDNS上面有缓存记录,然后它会直接IP地址直接给你。如果没有缓存记录,它将一步一步地要求后面的服务器,然后将所有数据汇总给最终客户。

当您访问163地址时,事实上,如果没有内容,它将不得不在后面获取数据。这个过程术语被称为递归。它将首先要求世界上13个根域服务器com域名在哪里,然后根域服务器一步一步回答。这个过程比较复杂。如果你感兴趣,你可以查看相关信息,这里就不赘述了。

DNS调度

很多人一定很好奇如何调度和定位。

其实也是通过的LDNS例如,如果您是广东电信客户,则使用具体地址DNS当服务器做递归时,它会访问某个CDN厂商的GRB,他可以看到来自世界各地的调度系统LDNS。假设用户和LDNS使用同一区域的服务器,他会间接认为用户也是广东电信。

再举一个例子,比如北京联通联通的用户DNS地址一般由北京联通的服务器自动分配。当该服务器进行递归时,调度服务器将看到该请求来自北京联通LDNS服务器将分配北京联通的服务器地址,然后让北京联通的用户直接访问北京联通的服务器地址,实现准确的区域调度。

从这个调度理论来看,我们可以发现假设用户使用的问题LDNS地址和你在同一个区域,所以此时我们的调度可能是正确的。但例如,如果你是北京联通的用户,但的是广东电信LDNS如果是,就会让GRB系统误以为你是广东电信的客户,所以会误调度过去。

之前在小区上网过,因为路由器有问题,我设了202.106.0.北京联通20DNS服务器地址,后来去深圳出差,访问大网站发现比较慢。经过分析,我发现我设置了它DNS地址来自北京联通,我在广东和深圳使用的网络是通过电信访问的,但分配给我的是北京联通的地址。如果我用电信线访问北京联通的地址,一定会很慢。

因为刚才讲到的DNS调度机制存在一些问题,因此在某些情况下,我们将使用第二种调度机制,称为HTTP的调度。

了解http协议的人知道,在http协议中有一个叫做302跳转的功能,它的实现并不意味着你访问一个URL,然后立即吐出你想要的数据,但吐出一个302返回信令,头会告诉你,有一个location目标,这个location就是告诉你下一步将要怎么做,而具体调度是通过location来实现的。

即使是我用的DNS和我不在同一个区域,但是当我来的时候httpserver的时,这个server是由CDN公司提供的。客户访问server虽然通过了DNS这种方式无法获得客户的真实性IP但是如果你访问的话httpserver,他一定能直接看到客户的真相IP,用这种方法可以调度纠偏,可以直接给你302,然后location携带一个真正离你最近的CDNserver。

这种调度方优点是准确的,但也有缺点,需要一次TCP他不像三次握手建连DNS那样直接请求一个数据包过去给一个反馈就OK他需要一次TCP三次握手建连。

二是你如何访问http假如你以前通过了服务器DNS调度过去的,其实前面的DNS也是省不了,国内也没办法anycast是的,没有办法直接访问一个众所周知的大人物IP因此,一般都是通过的DNS第一次调度,然后使用http第二次纠正。在这种情况下,你可以想象,如果你下载了一个大文件,比如电影,但你访问了一个页面元素,比如只有几张图片k,所以,事实上,你的调度时间占据了很大的成分。事实上,这种302调度是一种磨刀不误砍柴的计划。如果你以后有很多工作要做,比如下载一部电影需要很长时间,那么你的调度是准确的,即使你花了一点时间。但如果你的后续访问结束了,那么你的调度就没有多大意义了。

除了DNS调度和http除了302调度,还有一种调度方式叫做httpDNS调度,其原理是正常的http请求,发一个get请求,然后请求以参数的形式携带一个我想分析的域名,然后通过数据库查询服务器,然后通过http正常响应,你要求的IP通过http协议给你,这个协议的一个特点是双方都必须支持,因为这个模式是非标准的。没有人RFC文件说,您的客户端或您的操作系统自然支持这种机制。这有点类似API这样,如果要实现,双端都必须支持。

一般来说,手机上有第三种调度应用场景APP端,在APP在软件中,如果你想访问一些可能被运营商劫持的问题,那么在这个劫持问题之后还有很长的时间要谈。这可能用于避免劫持httpDNS调度方法APP所有的程序都是你自己写的,所以简单API借口很容易。

CDN的接入

有人可能会问,你说了这么多DNS和具体CDN调度有什么关系?

因为我在说你得到了一个具体的DNS当域名地址时,他会给你一个IP地址CDN他以前给你的IP原来没有做地址CDN原始服务器地址。但如果你这样做了CDN你会发现你最终得到的IP地址是CDN节点,而不是真正的原始服务器。

我们通常说得到一个IP这实际上是地址DNS的A记录。DNS里面有很多不同的记录,比如像A记录负责给你一个IP比如像CNAME域名的别名是记录给你的。当然还有很多其他,比如TXT的记录、MX记录等等。这个跟着CDN没关系,这里就不细说了,有兴趣查一下DNS相关文件。

上图很明显CDN介入后的效果图。linux有一个命令叫dig,它可以直接列出要访问域名的具体分析。然后,从这张图可以看出,当你想访问的时候www.163.com他终于给出了一个IP但实际上,它经历了两次CNAME记录。第一次CNAEM我们之前说过记录CDN的GRB,当他得到这个数据时,他可以间接知道你的数据LOCODNS它来自哪里,然后间接地给你一个定位。以这张照片为例,他的第一个跳跃实际上是跳到网络速度地址,第二个跳跃是一个分配网络速度的平台,其他平台是分开的IP给最终客户。

Cache系统-缓存系统

除DNS除了调度,在CDN还有一个很大的亮点Cache系统,即缓存系统。它用于缓存可以缓存的东西CDN边缘节点,当第二个人访问同一节点、同一特定电影或MP3点不用再经过了CDN链路回到真正的源站获取数据,而是由边缘节点直接提供数据。

在Cache该系统包含了许多高效的数据结构和算法,用空间换时间,多级缓存用热量来区分,前端是SSD后面是机械硬盘等等。很多细节就不说了。如果你感兴趣,以后可以交流。

对于Cache就系统而言,有两种不同的工作状态。第一种工作状态叫命中(hit),二是没有命中(miss)。如果命中,通过检索直接找到磁盘或内存上的数据,直接将数据吐出给客户,而不是从后面获取数据。这样,它就有了完美的加速效果。

第二种是在miss时,其实,miss的时候跟hit唯一的区别是,当我发现我的机器上没有这样的资源时,我会去我的upstream(上游)拿数据。拿完这个数据,除了第一时间给客户,还会在硬盘上缓存一个。如果硬盘空间满了,会用一系列替换方法替换最旧最冷的数据。

提到了upstream,不是原始服务器,因为当客户访问时CDN在节点上,他发现上面没有数据,不是直接从原来的服务器上拿走,而是通过他的另一个CDN节点,然后通过middlemell一些数据传输的方式upstream这一层,从原始服务器拿数据,通过一系列的加速手段,快速的把数据投递给我们的边缘节点,再把这个数据给最终客户。在过程当中upstream和downstream这两层将缓存一个数据。通过这种树形结构,如多个边缘节点,然后总结到一个或多个副层结点,流量可以逐渐收敛。

提到Cache我相信这里的很多朋友都来自同一个行业。有些人会说,这并不难。只要你有网络和运维人员。事实上,我不这么认为,因为如果你想把它做好,那就很难了。例如,你在考虑我列出的许多技术吗?

举几个例子,你有多个队列和网卡吗?CPU亲和力绑定?您是否改进了磁盘的调度算法?此外,您是否在存储时使用它?等等。包括核心调整,包括结构和CPU的绑定,CPU使用多级缓存,然后使用你的处理,或者使用标准的机制。另一个例子是编译程序或英特尔,然后你做很多调用。例如,一个非常简单的字符串复制,然后你使用它,你仍然使用汇编,你仍然使用什么方式等等。

还有很多关于高性能的研究。如果你感兴趣,你可以以后和我进一步沟通。我想表达的一个观点是,它似乎是这样做的CDN很简单,入门真的很简单,但真的很难做好。

安全问题

在没有做CDN你的网站以前可能会遭受各种攻击。然后攻击通常分为两种,第一种是蛮力攻击,大量的带宽无法抵抗,最终导致拒绝服务,另一种是技能攻击。

作为CDN说,已经您的原始服务器IP隐藏。这样,当攻击者访问你的域名时,实际上并不是你真正的服务器。当他访问时CDN没有办法控制节点CDN换句话说,即使你有能力把节点打倒CDN的比如10g的节点或者是40g但是因为CDN自然分布式部署,他也很难在同一时间内迅速拥有全国CDN所有边缘节点都瘫痪了。

还有一种攻击是针对你的DNS假如你的GRB瘫痪会导致整个调度系统失灵。如果调动系统失灵,即使你的CDN的Cacheserver请求仍然可以正常接受,但由于流量调度不能。所以,你需要在那里DNS层做很多保护机制,比如高性能DNS或分布式部署等。

技能攻击可以击倒你的原针,或者让你的网页出错,而不需要大量的流量。例如,如果注入、挂马甚至更严重,它会直接拖走你的数据库等等。所以做CDN来说,有很多厂商实际上已经开始具备这样的技巧性的防护能力了,比如说WAF(WebApplicationFierwall),是应用层防火墙,他可以直接分析你的请求内容,分析内容是否恶意,如恶意过滤、报警等一系列措施,以确保你原始服务器的安全。

第二部分主要是优化网络层和架构Cache在整体选择、性能分析等方面CDN深入分析了基本原理。

原始的CDN其实是ContentDeliveryNetwork这三个词的缩写,即内容分发网络。但我认为应该是candosomethingonNetwork。CDN的理念是加速,所以,我们就尽一切可能去做各种优化,从一层到七层的优化来实现最终的优化效果。

为什么说一层是优化,其实是硬件,你的服务器选择是优化。你用它ssd,还是用saker你应该用硬盘pce卡是应该用卡ssd。你的CPU要考虑应该用到最强还是阿童木等。

至于二楼,链路层的优化是指资源。例如,如何选择机房。

三层路由层指你middlemell以下是真正选择道路的具体细节。

四层是指传输层的优化,我们的一般业务都是TCP,所以可以清楚地说,这是指TCP优化。七层也可以优化。比如你强行压缩内容,甚至改变压缩水平压缩。

作为CDN基本上,我列出了一些可能使用的技术,大约10种。例如,附近的分布、战略缓存、传输优化、链路层优化,包括内容提取和合并回源。然后持续连接池,主动压缩,当您的原始服务器挂断时,您如何确保客户能够看到许多细节,如数据。

事实上,我们可以把路径的优化抽象成解决真正问题的最短路径的最佳解决方案的想法。当你走的时候a点到b当点需要传输数据时,通常会经过一个点c点,比直接从a到b更快。互联网上有一个三角形原理,不同于地理位置原理。虽然有一定的相关性,但还是有区别的,有可能a经过c到b会比a直接到b更快。

在数据传输过程中,有许多综合因素需要考虑。到目前为止,包括阿克麦在内的完全系统自动化很难进行链路选择和切换。在调度过程中,许多公司都有专门的团队来管理流量调度。许多系统可能只起到支持和参考的作用,而真正需要决策的是人。因为你需要考虑太多的元素,比如带宽成本、带宽节点冗余、服务器承载能力、客户敏感性、应该切割和不应该切割。

刚才提到了传输层的优化TCP在今天的互联网上,优化,TCP优化是实现客户体验最直接的方式。

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:shawn.lee@vecloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

本站原创内容未经允许不得转载,或转载时需注明出处:https://news.kd010.com/fwqjs/12210.html

TAG标签:

上一篇:深入浅出反向代理服务器“Nginx”
下一篇:小程序开发需要服务器吗?

相关文章

返回顶部