浅谈CDN内容分发与全局负载均衡

CDN简介

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

简而言之,就是将数据部署在各地的服务器中,通过负载均衡技术,让用户就近获取服务器中的数据。

CDN原理

CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。

全局负载均衡主要用于在多个区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度。

CDN的基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。

image-20221027194829542

CDN功能

归纳起来,CDN具有以下主要功能:

  1. 节省骨干网带宽,减少带宽需求量;
  2. 提供服务器端加速,解决由于用户访问量大造成的服务器过载问题;
  3. 服务商能使用Web Cache技术在本地缓存用户访问过的Web页面和对象,实现相同对象的访问无须占用主干的出口带宽,并提高用户访问因特网页面的相应时间的需求;
  4. 能克服网站分布不均的问题,并且能降低网站自身建设和维护成本;
  5. 降低“通信风暴”的影响,提高网络访问的稳定性

CDN服务模式

内容分发网络(CDN)是一个经策略性部署的整体系统,包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件,而内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务。总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,距用户仅有"一跳"(Single Hop)之遥。

同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间有任何延迟的。

全局负载均衡

全局负载均衡(Global Server Load Balance, GSLB),全局负载均衡是指对分别放置在不同的地理位置的服务器群间作负载均衡。服务器负载均衡是指对本地的服务器群做负载均衡。主要用于在多个区域拥有自己服务器的站点,为了使全球用户只以一个IP地址或域名就能访问到离自己最近的服务器,从而获得最快的访问速度。

服务器群选择

对于全局负载均衡而言,其核心就是服务器群的选择。对于某个特定的客户,应该将其定向到哪一个服务群?应该使用什么标准来进行这种选择?一般情况下,主要考虑两个因素:临近程度和负载大小。

临近机制主要考察服务器群与用户之间的物理距离。选择地理位置最接近用户的服务器集群,可以减少服务响应到达用户所经过的中转次数,从而降低中转节点对服务质量的影响。常见的有两种方式,一种是静态配置,例如根据静态的IP地址配置表进行IP地址到服务器群的映射。另一种方式是动态的检测,例如实时地探测到目标IP的距离(可以采用到达目标IP经过的跳数作为度量单位),然后比较探测结果进行选择。

负载机制比较各个服务器群的负载,确定由哪一个服务器群来响应请求。在全局负载均衡中,考察的是服务器群的负载,而不是单个服务器的负载,因此,需要更多地考虑普遍的问题,比如,需要考虑站点的最大连接数、站点的平均响应时间、服务质量等。

常见的GSLB实现方式有三种: DNS轮询、HTTP重定向、IP欺骗(又称三角传输)。这三种实现方式都是在用户通过域名来访问目标服务器时,由GSLB设备进行智能决策,将用户引导到一个最佳的服务IP。

基于DNS的GSLB

用户访问某个网站时,需要首先通过域名解析服务(DNS)获得网站的IP。域名解析通常不是一次性完成的,常常需要查询若干不同的域名服务器才能找到对应的IP。如下图所示,用户首先在本地配置一个本地DNS服务器地址,本地DNS服务器收到DNS请求后若不能解析,会将请求转发给更高一级的DNS服务器直到找到域名对应的IP或确定域名不存在。

image-20221027195713727

对于加入了GSLB的情况,一个GSLB设备(可能是一个4层交换机)会最终代替DNS服务器完成域名解析。下图展示两种流程的不同。

image-20221027195810263

基于DNS的GSLB优缺点

优点是:实现简单、实施容易、成本低。

缺点是:当GSLB设备采用“用户就近访问”的原则作为选择最优服务器的策略时,会存在判断不准的现象。原因是在这种策略下,GSLB设备是根据用户IP地址和内容服务器IP地址比较来判断其就近性的,但由于DNS响应是通过本地DNS服务器到达用户的,GSLB设备实际上只能得到用户的本地DNS服务器地址,若用户指定的DNS服务器IP不能正确代表用户的实际位置,就会出现判断不准的现象。

基于HTTP重定向的GSLB

为了解决基于DNS实现方式判断不准的问题,又出现了基于HTTP重定向的GSLB。这种方案中GSLB使用HTTP重定向技术,将用户访问重定向到最合适的服务器上。

image-20221027200253212

使用基于HTTP重定向方案,首先在DNS中将GSLB设备的IP地址登记为域名的A记录(既域名对应的IP)。如上图所示,用户首先通过DNS得到GSLB设备的IP地址,此时用户以为这就是站点服务器的IP,并向其发送HTTP请求。GSLB设备收到HTTP请求后使用一定策略选择一个最合适的服务器,然后GSLB设备向用户发送一个HTTP重定向指令(HTTP302),并附上选出的服务器的IP地址。最后,用户根据重定向IP访问站点的服务器。

基于HTTP重定向的GSLB优缺点

优点:由于直接向用户发送HTTP重定向指令,可以得到用户的真实IP,从而解决了判断不准确的问题。

缺点: 只能为HTTP访问重定向。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/151462.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言学生成绩录入系统

一、系统概述 该系统是一个由链表创建主菜单的框架,旨在快速创建学生成绩录入系统的主菜单结构。其主要任务包括: 实现链表的创建、插入和遍历功能,用于存储和展示学生成绩录入系统各个模块的菜单项。 2. 提供用户友好的主菜单界面&#xf…

【回顾一下Docker的基本用法】

文章目录 回顾一下Docker的基本用法1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结 1.2.Docker和虚拟机的区别1.3.Docker架构1.3.1.镜像和容器1.3.2.DockerHub1.3.3.Docker架构1.3.4.小结 1.4.…

CSS小计

1:设置图片随窗缩放 使用百分比 width: 100%;height: 100%; 使用vmin: 将可视区域分为100vmin width: 100vmin;height: 100vmin; 2:设置字体颜色与背景色融合 mix-blend-mode: difference 3: 设置宽度自适应 width:fit-content 4:外边距合并 当两个相领的两个容…

Git 学习笔记 | 使用码云

Git 学习笔记 | 使用码云 Git 学习笔记 | 使用码云注册登录码云,完善个人信息设置本机绑定SSH公钥,实现免密码登录创建远程仓库 Git 学习笔记 | 使用码云 注册登录码云,完善个人信息 网址:https://gitee.com/ 可以使用微信&…

RT-Thread 内存管理(学习二)

内存堆管理应用示例 这是一个内存堆的应用示例&#xff0c;这个程序会创建一个动态的线程&#xff0c;这个线程会动态申请内存并释放&#xff0c;每次申请更大的内存&#xff0c;当申请不到的时候就结束。 #include <rtthread.h>#define THREAD_PRIORITY 25 #defi…

机器学习之旅-从Python 开始

你想知道如何开始机器学习吗&#xff1f;在这篇文章中&#xff0c;我将简要概括一下使用 Python 来开始机器学习的一些步骤。Python 是一门流行的开源程序设计语言&#xff0c;也是在人工智能及其它相关科学领域中最常用的语言之一。机器学习简称 ML&#xff0c;是人工智能的一…

lv7 嵌入式开发-网络编程开发 08 TCP并发功能

目录 1 TCP 多进程并发 1.1 现象&#xff1a; 1.2 多进程并发 2 僵尸进程处理 3 TCP并发多线程 4 练习 1 TCP 多进程并发 1.1 现象&#xff1a; 之前的代码&#xff0c;先关服务端&#xff0c;再次打开会出现错误bind:Address already in use 使用setsockopt 地址快速重…

vuejs中使用axios时如何追加数据

前言 在vuejs中使用axios时&#xff0c;有时候需要追加数据,比如,移动端下拉触底加载,分页加载,滑动滚动条,等等,这时候就需要追加数据了,下面我们来演示下. 代码演示 <template><div><div><el-button type"primary" click"handleBtnGetJ…

【智能家居项目】裸机版本——设备子系统(LED Display 风扇)

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《智能家居项目》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 输入子系统中目前仅实现了按键输入&#xff0c;剩下的网络输入和标准输入在以后会逐步实现&am…

三十二、【进阶】hash索引结构

1、hash索引结构 &#xff08;1&#xff09;简述&#xff1a; hash索引&#xff0c;就是采用一定的hash算法&#xff0c;将键值换算成新的hash值&#xff0c;映射到对应的槽位上&#xff0c;然后存储在hash表中。 &#xff08;2&#xff09;图示&#xff1a; 2、hash索引结构…

阿里云服务器ECS详细介绍_云主机_服务器托管_弹性计算

阿里云服务器ECS英文全程Elastic Compute Service&#xff0c;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;阿里云提供多种云服务器ECS实例规格&#xff0c;如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等&#xff0c;阿里云服务器网分享阿…

手写Demo体验volatile可见性的作用

volatile是java的关键字&#xff0c;作用&#xff1a;①保证线程间的可见性&#xff1b;②防止指令重排。下面看一个demo&#xff0c;启动2个线程&#xff0c;一个线程读取flag变量的值&#xff0c;另外一个线程修改flag变量的值。 public class VolatileDemo {private static…

二、Excel VBA 简单使用

Excel VBA 从入门到出门一、Excel VBA 是个啥&#xff1f;二、Excel VBA 简单使用 &#x1f44b;Excel VBA 简单使用 ⚽️1. 如何在Excel中手动编写VBA代码⚽️2. 如何在 Excel 中运行 VBA 代码⚽️3. 如何在Excel中记录VBA代码⚽️4. 如何在Excel中编辑录制的VBA代码⚽️5. 如…

集合的基本运算

集合的运算等式&#xff1a; 常用的集合运算不等式&#xff1a; 、 试题 A&#xff0c;B&#xff0c;C是集合&#xff0c;证明&#xff1a;(A-B)-CA-(B∪C) 【答案】 设A、B、C是集合&#xff0c;证明 (A∪B)-C(A-C)∪(B-C)。 【答案】 已知A{1,2,3}&#xff0c;A-B{1,2}&…

css图形化理解--扭曲函数skew()

transform: skewX(30deg);transform: skewY(45deg);transform: skew(30deg,45deg);transform: skewX(angleX);transform: skewY(angleY);transform: skew(angleX,angleY); 是CSS中的一个2D变换方法&#xff0c;它用于对元素沿X轴、Y轴进行倾斜变换。其中&#xff0c;angle表示倾…

通过位运算,实现单字段标识多个状态位

可能经常有如下这种需求: 需要一张表,来记录学员课程的通过与否. 课程数量不确定,往往很多,且会有变动,随时可能新增一门课. 这种情况下,在设计表结构时,一门课对应一个字段,就有些不合适, 因为不知道课程的具体数量,也无法应对后期课程的增加. 考虑只用一个状态标志位,利用位运…

【软考】9.1 顺序表/链表/栈和队列

《线性结构》 顺序存储和链表存储 每个元素最多只有一个出度和一个入度&#xff0c;表现为一条线状链表存储结构&#xff1a;每个节点有两个域&#xff0c;即数据&#xff0c;指针域&#xff08;指向下一个逻辑上相邻的节点&#xff09; 时间复杂度&#xff1a;与其数量级成正…

微信小程序使用路由传参和传对象的方法

近期在做微信小程序开发&#xff0c;在页面跳转时&#xff0c;需要携带参数到下一个页面&#xff0c;尤其是将对象传入页面。为了方便重温&#xff0c;特此记录。 路由传字符串参数 原始页面 传递字符串参数比较简单。路由跳转有两种方式&#xff0c;一种是通过navigator组件…

【Java接口性能优化】skywalking使用

skywalking使用 提示&#xff1a;微服务中-skywalking使用 文章目录 skywalking使用一、进入skywalking主页二、进入具体服务1.查看接口 一、进入skywalking主页 二、进入具体服务 可以点击列表或搜索后&#xff0c;点击进入具体服务 依次选择日期、小时、分钟 1.查看接口 依次…

聊天、会议、多媒体一体化:多平台支持的即时通讯系统 | 开源日报 No.44

harness/gitness Stars: 28.2k License: Apache-2.0 Gitness 是一个建立在 Drone 之上的新型开源开发者平台&#xff0c;具备代码托管和流水线功能。它提供了以下核心优势&#xff1a; 轻量级、超快速的代码托管和持续集成服务支持 Docker 容器化部署可以在本地环境中构建和…