再快一点?动态内容如何加速

news2024/11/17 8:18:57

未来已来,只是不均衡地分布在当下

大家好,我是菜农,欢迎来到我的频道。

近年来 Web 3 的概念在程序员的小圈子也几乎是人尽皆知了。功能再强,噱头再足,但是如果访问速度没有跟上,一起都是浮云。哪怕拿现在已经成熟的 Web 2.0来说,内容也相当丰富,动态网页、个性化内容、电子交易数据等。但是内容逐渐丰富,人们的访问速度却逐渐变慢,使用体验也会随之下降。因此对于动态内容的加速也尤为重要,而这篇,我们将了解有几种加速方式可以实际改善我们使用体验。

经典的 MVC 架构分为了三层,分别是:

  1. 表现层

表现层是 Web 系统与外部系统的交互界面,这层负责接收用户端的 HTTP 内容访问请求,从文件系统中读取静态文件提供给用户,需要时向中间的应用逻辑层发起请求。

  1. 业务逻辑层

业务逻辑层是 Web 系统的核心层,负责处理所有业务逻辑和动态内容的生成。内容的动态生成通常涉及个性化内容处理、数据处理等工作,因此需要与前端的表现层、后端的数据访问层通信。

  1. 数据访问层

数据访问层位于系统的后端,负责管理Web系统的主要信息和数据存储,通常由数据库服务器和存储设备组成。

那么在我们已有认知的加速处理方案中,位当其先的要数 CDN 处理了。

CDN 认知

对于CDN 这个名词,大家大可以望文生义:Content Distribute Network,也就是 内容分发网络。CDN 的工作很纯粹:将内容从源站传递到用户端。

什么是互联网

说到 CDN 的认知,我们就需要先认知什么是 互联网,互联网这个词对于程序员乃至大部分用户来说已经是印着脑子里的东西了。但是我们常说的互联网,是指广义上的互联网,,由两层组成:一层是以 TCP/IP 为代表的网络层(四层协议);另一层是以万维网 WWW 为代表的应用层(七层协议)。目前普遍存在的一个认识误区也就是家好难过个互联网和万维网混为一谈。

  • TCP/IP 为代表的网络层

可理解为 狭义的互联网。实际上是广义互联网的下层,是网络的基础,这一层的主要作用是通过计算机之间的互联,将各种信息的数据报文以极低的成本进行传输,俗称 管道

互联网的设计理念是:网络是中立和无控制的,任何人都没有决定权;网络是与应用无关的,它的任务就是如何更好地将数据包进行端到端的传输。

  • 万维网WWW 为代表的应用层

可理解为 广义的互联网。这一层包括很多种类型的流量和应用,所有SP(Service Provider 服务提供商)提供的都是这些用户看得见、摸得着的应用。

两者的区别:以铁路为例子的话,*互联网是铁路轨道和信号系统,万维网则是在铁路上运行的列车之一。

影响互联网传输的4个因素
  1. “第一公里”。指的是万维网流量向用户传送的第一个出口,是网址服务器接入互联网的链路所能提供的带宽。
  2. “最后一公里”。指的是万维网流量向用户传送的最后一段接入链路,即用户接入带宽。
  3. 对等互联关口。这里的对等互联是指不同基础运营商之间的互联互通,一般两个运营商之间只有两三个互联互通点,那么可以想象这两三个点上会产生多么大的流量。
  4. 长途骨干传输。首先是长距离传输时延问题,是从网络服务器到用户之间要经过网络所在IDC、骨干网、用户所在城域网、用户所在接入网等,距离非常遥远,不可避免会带来较长的传输时延。
CDN 工作过程

有了CDN之后会极大地简化网站的系统维护工作量,网站维护人员只需将网站内容注入CDN的系统,通过CDN部署在各个物理位置的服务器进行全网分发,就可以实现跨运营商、跨地域的用户覆盖。由于CDN将内容推送到网络边缘,大量的用户访问被分散到网络边缘,就不再对网站出口、互联互通点的资源挤占,也不再需要跨越长距离IP路由了。

  1. 当用户点击网站页面上的内容URL,经过本地DNS系统解析,DNS系统会最终将域名的解析器交给CNAME指向的CDN专用DNS服务器
  2. CDN的DNS服务器将CDN的全局负载均衡设备IP地址返回用户
  3. 用户向CDN的全局负载均衡设备发起内容URL访问请求
  4. CDN全局负载均衡设备根据用户IP地址,以及用户请求的内容URL,选择一台用户所属区域的区域负载均衡设备,告用户这台设备发起请求
  5. 区域负载均衡设备会为用户选择一台合适的缓存服务器提供服务,选择的依据包括:根据用户IP地址,判断哪一台服务器距用户最近;根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需的内容;查询各个服务器当前的负载均衡情况,判断哪一台服务器具备服务能力。基于以上这些条件的综合分析之后,区域负载均衡设备会向全局负载均衡设备返回一台缓存服务器的IP地址
  6. 全局负载均衡设备把服务器的IP地址返回给用户
  7. 用户向缓存服务器发起请求,缓存服务器响应用户请求,将用户所需内容传送到用户终端。如果这台缓存服务器上并没有用户想要的内容,而区域均衡设备依然把它分配给用户,那么这台服务器就要向它的上一级缓存服务器请求内容,直至追溯到网站的源服务器将内容拉到本地

DNS 服务器根据用户 IP 地址,将域名解析成相应节点的缓存服务器 IP 地址,实现用户就近访问。使用 CDN 服务的网站,只需将其域名解析权交给 CDN 的 GSLB 设备,将需要分发的内容注入 CDN,就可以实现内容加速了

说到这里文章当然不可能就高一段落了,否则也太水了,我们近而深究下为什么 CDN 可以实现加速?究其原因还是逃脱不了 缓存定理

CDN 复制机制

Web 网站借助 CDN 技术能够获得更好的扩展性和高性能,关于这一优点已经是无可争议的事实了。那么其核心就在于 CDN 采用的缓存(Caching)和复制(Replication)机制。其中缓存是将最近经常被访问的原服务器拥有的内容复制到边缘服务器上,可被视为具有特定策略的复制。

CDN 的复制机制是指将源 Web 系统逻辑架构的各个层次的相应部分复制到边缘服务器上,以实现缓解源系统的处理压力 ,主要表现在 Web 传统的三层模型中:

  1. Web 系统表现层的复制。通过复制,边缘服务器能够负责静态内容的管理和提供,该方法在传统CDN中被广为使用,边缘服务器又被称为代理服务器,通过反向代理加速静态文件的交付。
  2. Web 系统业务逻辑层的复制。通过复制,CDN被用于改进动态生成内容的交付性能,该方法又被称为边缘计算,即将应用程序和业务组件直接在 CDN 的边缘服务器中计算,从而直接在靠近用户的地方生成动态 Web 内容。
  3. Web系统数据访问层的复制。通过复制,CDN 边缘服务器能够具备动态内容和掌握内容生产数据的能力,而源服务器只负责管理基础架构和存放数据的主版本。
  4. Web系统用户文件的复制。通过复制,CDN 边缘服务器能够掌控用于生成用户定制化内容的数据。(在 web2.0 时代用户对个性化需求的不断增强,用户的数据越来越受到业界的关注,利用大数据能力产品的智能价值日益增高,因此衍生出单独的一层)

软件加速技术

上面说到了 CDN 的复制机制能够有效提升动态内容的访问速度。

1、边缘计算能力

边缘计算用于将应用程序、数据和计算能力(服务)从网络中的少量集中点推送到网络的逻辑边缘位置。边缘计算复制并分发在多个分布式网络中的Web服务器中保存的信息片段。这一层复制能力直接将业务处理逻辑和数据层的访问能力也复制到了各个边缘节点上,进而利用边缘计算平台提供分发服务的同时减少从企业读取数据的次数和读取数据的大小,降低系统的响应延迟。

2、数据复制能力

在边缘计算能力分布后,源站提供的数据存储仍然还是单一一个,因此边缘服务器上的应用逻辑只能共享集中化的系统数据库。在这种情况下,对于那些瓶颈在后端数据访问层而不是业务逻辑层的 Web 应用,还是难以解决系统的扩展性和性能问题。因此就需要考虑用 CDN 对应用数据进行复制和管理,利用边缘服务器代替源站 Web 系统的后台数据访问层中的数据库系统。

我们通常的处理方式是将业务逻辑层处理过/查询过的数据进行边缘服务器的复制,这种查询结果的缓存技术影响效能的关键在于缓存的命中率。为了使得应用逻辑查询的结果能够高频率地被后续查询请求所命中,我们就需要提高以及优化查询匹配引擎。

在数据缓存层面最常面临的问题也是 缓存一致性 的问题,不过目前存在多种算法以解决分布式缓存的问题,这里就不再进行赘述。

硬件加速技术

我们在软件层面利用 CDN 以及复制计算能力为加速做出了不小的努力。但有一点不容忽视,那就是网络。

应用加速网络(Application Delivery Networking,ADN),利用网络优化和加速设备,确保客户业务应用能够快速、安全、可靠地交付给用户。应用加速网络实际上是传统的网络负载均衡的升级和扩展,综合使用了负载平衡、TCP 优化管理、链接管理、SSL VPN、压缩优化、智能网络地址转换、高级路由、智能端口镜像等各种技术。

广域网加速技术

如何能够让广域网像局域网一样工作

我们都知道广域网的传输范围大于局域网,而城域网又大于广域网。当然我们这里不做过多的扩展延伸,我们只讨论广域网的问题。

衡量广域网传输性能和质量的主要指标是带宽时延。跟局域网相比,广域网的带宽更低,时延更大,而这也是很多小伙伴家里宽带测试的常见误区,带宽大不一定网速就快,时延是个很重要的影响因素。

传输时延是由多方面的原因造成的:

  1. 物理距离带来一定的时延。数据在光纤中传输,途径多个路由设备和交换设备,源和目的设备之间的物理距离越长,其传输所需的时间也越长。
  2. TCP 协议的工作机制也带来一些延迟。

那么要进行广域网加速,就需要从以上几个问题入手:

网络带宽不足问题

  1. 加大IT投入,对带宽进行扩容和升级
  2. 减少跨越广域网的数据传输量

这里主要涉及的技术就是数据压缩和缓存技术。其次,针对广域网时延问题,目前最常用的办法是在广域网的两端成对部署设备,通过对TCP协议进行优化,实现整个传输过程的优化。最后,应用协议也存在低效的问题,一般是从应用层优化本身来做,即针对应用协议进行传输的改进,比如采用通过预测客户行为做一些数据包的提前发送等技术,同时缓存的应用也是一个手段。

TCP协议优化

  1. 减少传输数据包的数量,目前很多协议框架都会自行进行拆包重组
  2. 自适应拥塞窗口,基于网络时延等特征自动调整窗口大小,可以在给定用户网络条件下实现最高带宽传输
  3. 有限制地快速重传,设置被重发的数据包比其他数据包传输优先级高,从而使等待重传数据包的应用得到快速响应,减少应用程序等待时间
  4. 连接池,网路加速设备维护一个预先建立好的 TCP 连接池

好了,以上便是本篇的所有内容,如果觉得对你有帮助的小伙伴不妨点个关注做个伴,便是对小菜最大的支持。不要空谈,不要贪懒,和小菜一起做个吹着牛X做架构的程序猿吧~ 咱们下文再见!

今天的你多努力一点,明天的你就能少说一句求人的话!

我是小菜,一个和你一起变强的男人。 💋

微信公众号已开启,菜农曰,没关注的同学们记得关注哦!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

封装和解封装、跨层封装

封装和解封装 我们一般把数据从应用层开始到数据链路层的加工过程称为封装,反过程称为解封装 封装 — 将每一层最重要的数据添加到原始数据当中,来实现这一层的功能。 应用层 — 应用需要进行封装,但是,封装方式取决于不同的应用…

hiveSql 京东面试题-有效值问题

hiveSql 京东面试题-有效值问题需求准备数据分析实现最后需求 有入库成本表,一个商品每次入库就会产生一条数据,里面包含商品id,入库时间time,以及入库采购的成本。但由于某些某些原因,导致表中某些数据的成本是有丢失…

MySQL-慢sql优化思路

目录 1、开启Mysql慢查询 1.1、查看慢查询相关配置 1.2、查询慢查询sql耗时临界点 1.3、开启Mysql慢查询 2、explain查看SQL执行计划 2.1、Select_type 2.2、Type 2.3、Possible_keys 2.4、Key 2.5、Key_len 2.6、Rows 2.7、Extra 3、profile 分析执行耗时 3.1、…

gin web开发模板渲染

一、模板输出模板输出首先需要指定模板所放位置 r.LoadHTMLGlob("templates/**/*")参数中: **代表匹配任意名称的目录 *代表匹配任意名称的模板文件"templates/**/*" 代表可以匹配指定模板文件到 templates目录下的 hello/index.tmpl user/inde…

自然语言处理 第八章 机器翻译复习

机器翻译机器翻译概述典型神经机器翻译模型神经机器翻译 ( Neural Machine Translation, NMT神经机器翻译系统相关技术罕见词处理技术(词表受限问题)解决办法subword 方法beam searchcoverage penalty (翻译覆盖率问题)推敲网络&a…

qt运行外部exe并自定义外部功能界面(QWidget添加工具栏QToolBar)

先放效果图,就是在qt运行的界面中,不只是运行出了外部exe的界面,还可以在外围放置自定义的功能按钮。(本质就是在QWidget中添加工具栏QToolBar) 关于如何只运行出外部的exe,我之前写过教程:ht…

序列生成策略——束搜索、贪心搜索、穷举搜索

序列搜索策略包括贪心搜索、穷举搜索和束搜索。 贪心搜索所选取序列的计算量最小,但精度相对较低。 穷举搜索所选取序列的精度最高,但计算量最大。 束搜索通过灵活选择束宽,在正确率和计算代价之间进行权衡。 在序列到序列学习&#xff08…

Java集合面试题汇总大全

每个集合的出现一定是为了解决某种问题的解决方案。 集合流程图 JAVA中集合和数组的区别Collection和Collections的区别ArrayList和LinkedList 和Vector的区别list/set/map的区别HashSet和TreeSet和LinkedHashSet区别HashMap和Hashtable的比较HashMap和ConcurrentHashMap区别H…

【零基础】学python数据结构与算法笔记5

文章目录前言30.归并排序归并31.归并排序实现32.归并排序时间复杂度讨论33.NB三人组小结总结前言 学习python数据结构与算法,学习常用的算法, b站学习链接 30.归并排序归并 将两个箭头指向两个列表的首个元素,比较,哪个大就把它…

Java IO流 - 字符流的使用详细介绍

文章目录字符流的使用文件字符输入流创建字符输入流字符输入流读取文件字符输出流创建字符输出流字符输出流写入字符流的使用 字节流读取中文输出会存在什么问题? 会乱码。或者内存溢出。 读取中文输出,哪个流更合适,为什么? 字符…

MAX78000训练自己的神经网络模型

参考: The MAX78000 Microcontroller, Some Coffee, and Artificial Intelligence GitHub - MaximIntegratedAI/ai8x-training: Model Training for ADIs MAX78000 and MAX78002 AI Devices ai8x-synthesis/WSL2.md at develop MaximIntegratedAI/ai8x-synthesi…

移动金融管理系统设计与开发实训(课程设计报告)——基于Android+Django的银行系统部分功能设计与实现

阅读过程中若有不解和需要可私信,乐于解答 项目代码文档都保存着 基于AndroidDjango的银行系统部分功能开发与设计 摘要: 随着信息技术的快速发展以及经济的快速发展,金融界的信息化的进程也在不断推进,信息技术的不断成熟和人…

JavaWeb:EL表达式JSTL标签

1,EL表达式 1.1 概述 EL(全称Expression Language)表达式语言,用于简化JSP页面内的Java代码。 EL表达式的主要作用是 获取数据 。其实就是从域对象中获取数据,然后将数据展示在页面上。 而EL表达式的语法也比较简单…

HR软件七步帮助企业管理员工

对于中小企业(SMB)来说,员工就意味着一切。你的员工几乎掌握着企业的整体增长和发展,他们可以成就企业,但也能破坏企业的发展。为了提高员工效率,中小型企业需要出色的人力资源管理。员工只有在受到重视和培…

【Linux】Linux环境变量的理解

加油布鲁斯,你能行的! 文章目录一、环境变量PATH中的系统默认搜索路径1.将程序安装到/usr/bin目录(不带./运行自己写的程序)2.将程序路径添加到PATH环境变量里面(不带./运行自己写的程序)二、环境变量的深…

PyTorch基础部分——毕设进行时

为了完成毕设准备开始学习PyTorch,第一步到蓝桥云课搜索实验项目,找到了“PyTorch入门与实战(第二版)”,开始边实验边学习(本身有了一点点点点的相关基础了)学习传送门:PyTorch基础入…

SQL WHERE 子句

WHERE 子句用于过滤记录。 SQL WHERE 子句 WHERE 子句用于提取那些满足指定条件的记录。 SQL WHERE 语法 SELECT column1, column2, ... FROM table_name WHERE condition; 参数说明: column1, column2, ...:要选择的字段名称,可以为多个…

06SpringCloudAlibaba负载均衡服务调用-OpenFeign

目录 SpringCloud Feign 查看此博客:005SpringCloud--Feign:负载均衡(基于服务端)_gh_xiaohe的博客-CSDN博客 OpenFegin概述 OpenFeign是什么: OpenFegin能干什么 Feign和OpenFeign两者区别 OpenFeign使用步骤 服务消费者 接口注解 微…

TP相关知识

说明 该文章来源于徒弟lu2ker转载至此处,更多文章可参考:https://github.com/lu2ker/ 文章目录说明PHP中有一些内置类PHP反序列化问题绕过姿势:魔术方法(反序列化如何利用)CMS可能存在的部分逻辑问题$_REQUEST相关安全…

小游戏引擎选型参考指南

写在前面 前面写了几期有关于小游戏的文章,主要从小游戏开发、小游戏运营、小游戏变现等多个角度进行了较为粗略的介绍,很多同学表示对小游戏引擎部分很感兴趣,希望能够有一些更为深入的分析介绍。今天就对目前主流的小游戏引擎进行探讨。 …