深入浅出 -- 系统架构之日均亿级吞吐量的网关架构(CDN内容分发)

本文主要是介绍深入浅出 -- 系统架构之日均亿级吞吐量的网关架构(CDN内容分发),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

亿级吞吐第二战-CDN内容分发

   CDN(Content Delivery Network)内容分发网络是一种构建在现有网络基础上的智能虚拟网络,依靠部署在全球各地的节点,通过负载均衡、内容分发、机器调度等功能,使用户的请求能够被分发到离自身最近的节点处理,就近获取所需的资源,最终达到提升用户访问速度以及降低服务器访问压力等目的。

   CDN出现的本质是为了解决不同地区用户访问速度不一致问题,在之前的《TCP/IP》文中曾提到过,网络上的数据传输本质上最终都会依赖于物理层的传输介质,那么当用户和目标服务器的“实际地理距离”越长,访问的速度自然会越慢,而CDN的核心就在于:各地区都会部署子节点,当用户访问时,会将其请求分发到距离最近的节点处理,就好比生活中的例子:

某个想吃北京烤鸭的人身在美国,最初仅北京有相应的店铺,因此想吃的时候必须得跑到北京去买,那么这一去一回的过程自然会需要很长时间,而CDN的思想就是在各地都开分店,好比美国也有北京烤鸭的分店,当某个用户想吃时,不再需要跑到北京去买,而是可以直接选择就近的店铺进行购买,这样速度自然会更快。

2.1、CDN分发的内容

   通常一个平台的资源都会分为静态与动态两种类型,而CDN本质上是一种类似于缓存的技术,缓存必然会存在延迟性,对于会经常发生变化的动态资源,使用CDN意义并不大,因为CDN无法确保数据的实时性。
由于静态资源很少发生变更,所以CDN一般会用于静态资源的分发,如果你要使用CDN服务,国内有大量的CDN提供商提供这类服务,当购买CDN服务后,将静态资源传给CDN服务,那么这些静态资源将自动的被分发到提供商全球各地的CDN节点。

2.2、CDN实现原理

   在系统接入CDN服务并将静态资源传递给CDN后,那么当用户再访问系统时,对应的一些请求就会被分发到距离用户最近的CDN节点处理,但这究竟是如何实现的呢?接下来简单聊一聊。

一般用户发送请求都是通过域名去进行访问的,域名最终会被解析成一个IP,那么如何解析出一个距离用户最近的服务器IP,这是普通的DNS服务器做不到的,因此CDN为了实现这点,需要特殊的DNS服务器去解析域名请求,该DNS服务器需要解决两个问题:
①需要得知用户目前的所在位置。
CDN所有节点中,哪个节点离用户最近。

对于上述两个问题,第一个问题可以直接从用户的请求中提取客户端IP,然后根据IP去判断,可以将IP解析为上海电信、北京移动等,从而能够确定用户的大概位置。

第一个问题容易找到答案,但实现CDN请求分发的难点在于第二个问题:如何确定距离用户最近的CDN节点。这时就需要用到DNS解析中的CNAME机制了,DNS域名解析主要会分为两种:

  • ①将一个域名解析为一个具体的IP,这种方式被称为A记录机制。
  • ②将一个域名解析为另一个域名,这种方式就被称为CNAME机制。

CDN中,这个CNAME会被配置为CDN专用DNS服务器的域名地址。

某个用户通过域名static.xxx.com请求静态资源时,这个域名会映射着一个CNAME,例如cdn.xxx.com,当普通的DNS服务器收到用户的static.xxx.com域名请求后,经过解析得到一个CNAME,该CNAME对应的则是CDN专用的DNS服务器,那么会将域名解析工作转交给该DNS服务器处理,CDN专用DNS服务器对cdn.xxx.com域名解析,根据服务器上记录着的所有CDN节点信息,选出距离用户最近的CDN服务器地址并返回给用户,最后用户就可通过该地址访问距离自己最近的CDN节点。

上述这个过程也被称为智能DNS解析技术。

2.3、CDN带来的优势

   大致聊了CDN分发原理后,再来思考思考CDN的引入能够给系统带来哪些好处呢?

  • ①加快用户的访问速度,带来更好的用户体验感。
  • ②分担系统50%以上的访问流量,降低系统的负载压力。
  • ③节省系统源站的带宽消耗,降低网络带宽的成本。
  • ④进一步提升系统安全性,大部分攻击请求会被CDN节点阻挡。

   从上看来,系统接入CDN服务后带来的收益很大,就算原本的系统访问速度很慢,在接入CDN后也能够快速加载,对于用户而言体验感会进一步提升,并且最关键的是:对于网站整体而言,几乎90%以上的静态请求会由CDN去响应,系统源站能够减轻很大的访问压力,从而能够确保系统本身拥有更大的“动态请求”吞吐能力。

这篇关于深入浅出 -- 系统架构之日均亿级吞吐量的网关架构(CDN内容分发)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/895429

相关文章

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

深入浅出Java中的Happens-Before核心规则

《深入浅出Java中的Happens-Before核心规则》本文解析Java内存模型中的Happens-Before原则,解释其定义、核心规则及实际应用,帮助理解多线程可见性与有序性问题,掌握并发编程... 目录前言一、Happens-Before是什么?为什么需要它?1.1 从一个问题说起1.2 Haht

Python进行word模板内容替换的实现示例

《Python进行word模板内容替换的实现示例》本文介绍了使用Python自动化处理Word模板文档的常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录技术背景与需求场景核心工具库介绍1.获取你的word模板内容2.正常文本内容的替换3.表格内容的

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

JAVA实现亿级千万级数据顺序导出的示例代码

《JAVA实现亿级千万级数据顺序导出的示例代码》本文主要介绍了JAVA实现亿级千万级数据顺序导出的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 前提:主要考虑控制内存占用空间,避免出现同时导出,导致主程序OOM问题。实现思路:A.启用线程池

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

504 Gateway Timeout网关超时的根源及完美解决方法

《504GatewayTimeout网关超时的根源及完美解决方法》在日常开发和运维过程中,504GatewayTimeout错误是常见的网络问题之一,尤其是在使用反向代理(如Nginx)或... 目录引言为什么会出现 504 错误?1. 探索 504 Gateway Timeout 错误的根源 1.1 后端

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环