分布式软件架构——传输链路

传输链路

链路指无源的点到点的物理连接。链路是计算机网络中的一个重要概念,它指的是连接两个网络设备的物理或逻辑路径。简单来说,链路就是电信号或数据在网络中传输的路径。在计算机网络中,链路可以分为物理链路和逻辑链路两种。物理链路是指连接两个网络设备的物理媒介,例如网线、光纤等。逻辑链路则是指通过网络协议建立的逻辑连接,例如TCP/IP协议中的连接。

链路是计算机网络中非常重要的概念,它负责连接网络设备并保证数据的可靠传输。

前端优化

以优化链路传输为目的的前端设计原则未来或许不再使用,比如

  1. Minimize HTTP Requests,减少请求数量
    减少请求数量的手段有:
  • a.雪碧图(CSS Sprites)
  • b.CSS、JS文件合并/内联(Concatenation/Inline)
  • c.分段文档(Multipart Document)
  • d.媒体(图片、音频)内联(Data Base64 URI)
  • e.合并Ajax请求(Batch Ajax Request)
  • f. … …
  1. Split Components Across Domains,扩大并发请求数
    现代浏览器(Chrome、Firefox)一般可以为每个域名支持6个(IE为8~13个)并发请求。如果想要更快地加载大量图片或其他资源,就需要进行域名分片(Domain Sharding),将图片同步到不同主机或者同一个主机的不同域名上。
  2. GZip Components,启用压缩传输
    启用压缩传输能够大幅减少需要在网络上传输的内容大小,节省流量。
  3. Avoid Redirects,避免页面重定向
    当页面发生重定向,就会延迟整个文档的传输。
  4. Put Stylesheets at the Top, Put Scripts at the Bottom,按重要性调节资源优先级
    将重要的资源放在HTML的头部,以便优先下载。
  5. … …

连接数优化

HTTP是以TCP为传输层的应用层协议,但HTTP over TCP这种搭配,只能说是TCP目前在互联网的统治地位所造就的结果,而不能说它们两者配合工作就是合适的。

  • 一方面,HTTP传输对象(HTML、JS、CSS、图片等)的主要特征是数量多、时间短、资源小、切换快。
  • 另一方面,TCP协议要求三次握手完成后才能开始数据传输,TCP还有慢启动特性,导致通信建立连接时传输速率最低,后面逐步加速稳定。

由于TCP协议本身是面向长时间、大数据传输来设计的,所以只有在一段较长的时间尺度内,TCP协议才能展现出稳定性和可靠性的优势,不会因为建立连接的成本太高,成为了使用瓶颈。

开发Tricks的使用困境

为缓解HTTP与TCP之间的矛盾,程序猿们一方面致力于减少发出的请求数量,另一方面致力于增加客户端到服务端的连接数量。即前面提到的Minimize HTTP Requests和Split Components Across Domains两条优化措施的根本依据。

HTTP Archive对近2016~2020年数百万个URL地址进行了采样,得出一个结论:页面平均请求没有改变的情况下(桌面端下降3.8%,移动端上升1.4%),TCP连接正在持续且幅度较大地下降(桌面端下降36.4%,移动端下降28.6%),如下图
在这里插入图片描述

在这里插入图片描述
开发Tricks可以节省TCP连接外,也会带来不少副作用。比如,

  • CSS Sprites合并多张图片后,只要使用其中一张小图片,也必须加载整个大图片;如果某张小图片需要修改,会导致整个大图的缓存失效;样式、脚本等文件的合并同理;
  • 媒体内嵌时,除了要承受Base64编码导致的传输容量膨胀1/3的代价以外,也会无法有效利用缓存;
  • 合并异步请求后,导致所有请求的返回时间,都要受最慢请求的拖累,页面整体响应速度下降;
  • 图片放到不同子域下面,将会导致更大的DNS解析负担;

连接复用技术的优势和缺陷

HTTP连接复用技术,也即持久连接(Persistent Connection),或者叫连接Keep-Alive机制。它的原理是,让客户端对同一个域名长期持有一个或多个不会用完即断的TCP连接,典型做法是在客户端维护一个FIFO队列,每次取完数据之后的一段时间内,不自动断开连接,以便获取下一个资源时可以直接服用,避免创建TCP连接的成本
但是,连接复用技术最明显的副作用就是“队首阻塞”(Head-of-Line Blocking)问题。

解决方案:HTTP/2的多路复用技术
HTTP/1.x中,HTTP请求就是传输过程中最小粒度的信息单位,难以重组出有效信息;
HTTP/2中,帧(Frame)才是最小粒度的信息单位,它可以用来描述各种数据,比如请求的Headers、Body,或者用来做控制标识(打开流、关闭流)。
其中流(Stream),是一个逻辑上的数据通道概念,每个帧都附带有一个流ID,以标识这个帧数语哪个流。
在这里插入图片描述
与HTTP/1.x相反,HTTP/2本身反而变得更适合传输小资源,比如传输1000张10K的小图,HTTP/2要比HTTP/1.x快,但传输10张1000K的大图,则应该HTTP/1.x会更快。

传输压缩

HTTP很早就支持了GZip压缩,因为HTTP传输的主要内容,比如HTML、CSS、Script等,主要是本文数据,因此对于文本数据启用压缩的收益是非常高的,传输数据量一般会降至原有的20%左右。而对于不适合压缩的资源,Web服务器则能根据MIME(Multipurpose Internet Mail Extensions)类型,来自动判断是否对响应进行压缩。
几种压缩方式:

  • 静态预压缩(Static Precompression):把静态资源预先压缩为.gz文件的形式存放起来;
  • 即时压缩(On-The-Fly Compression):在内存的数据流中完成;

持久连接机制不再依靠TCP连接是否关闭,来判断资源请求是否结束了。它会重用同一个连接,以便向同一个域名请求多个资源。
这个机制最初(HTTP/1.0)就是根据Content-Length判断传输资源是否已经结束。但启动即时压缩后就无法给出Content-Length。依靠Content-Length来判断传输结束是有缺陷的。HTTP1.1版本修复了缺陷,增加了另一种“分块传输编码”(Chunked Transfer Encoding)的资源结束判断机制,彻底解决了Content-Length与持久连接的冲突问题。

快速UDP网络连接

要想从根本上改进HTTP,就必须直接替换掉HTTP over TCP的根基。使用UDP协议替换TCP传输协议就是一种思路,2013年,Google在它的服务器(Google.com、YouTube.com等)启用了名为快速UDP网络连接(Quick UDP Internet Connections,QUIC)的传输协议。2018年末,IETF正式批准了HTTP over QUIC使用HTTP/3的版本号,确立为最新一代的互联网标准。

QUIC自己实现的好处是能对每个流能做单独的控制,如果其中一个流发生错误,协议栈仍然可以独立地继续为其他流提供服务。
QUIC的另一个设计目标是面向移动设备的专门支持,在移动设备上的主要优势体现在网络切换的响应速度上,QUIC提出了连接标识符的概念,可以唯一标识客户端与服务器端之间的连接,而无需依靠IP地址。

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

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

相关文章

【UI自动化测试】appium+python+unittest+HTMLRunner

进阶Python接口自动化测试必备教程(2023全网最详细) 简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自…

举例说明基于线性回归的单层神经网络网络(以梯度下降算法来求解权重的过程)...

我们将通过一个简单的例子来说明基于线性回归的单层神经网络,以及如何使用梯度下降算法来求解权重。 假设我们有以下数据集,表示学生的学习时间(小时)与他们的考试分数: 学习时间(X)&#xff1a…

线程池学习(五)线程工厂、线程池工厂

Executors 定义的Executor, ExecutorService, ScheduledExecutorService, ThreadFactory和Callable类的工厂和实用程序方法,我们称为线程池工厂。ThreadFactory 为定制化创建新线程的对象,我们称为线程工厂 前面几期的学习中,我已经初步会使用线程池了&…

MySQL内置函数

内置函数从实现的功能角度可以分为数值函数、字符串函数、日期和时间函数、流程控制函数、加密与解密函数,获取MySQL信息函数、聚合函数等。 1.数值函数 来源: 版权声明:本文为CSDN博主「清风拂来水波不兴」的原创文章,遵循CC 4…

Ceph简介及部署

Ceph Ceph一、存储基础1、单机存储设备2、Ceph 简介3、Ceph 优势5、Ceph 架构6、Ceph 核心组件7、OSD 存储后端8、Ceph 数据的存储过程9、Ceph 版本发行生命周期10、Ceph 集群部署 二、部署ceph-deploy Ceph 集群前环境配置1、关闭 selinux 与防火墙2、根据规划设置主机名3、配…

数据中心水浸事件,该如何找回安全?

数据中心是现代企业和组织中不可或缺的基础设施,承载着大量的敏感数据和关键业务运作。然而,水浸事件可能成为数据中心的巨大威胁,可能导致设备故障、数据丢失以及业务中断,给组织带来严重的损失和风险。 因此,为了保护…

gd32f103vbt6 串口OTA升级3-linux端的部分

一. 简介 本文主要是对linux端升级单片机程序的功能部分做一些介绍,包括一些软件流程。 二.硬件部分 2.1 rk3399cpugd32f103 2.2 连接方式:串口(115200,8N1)或者iic(本文没有介绍iic) 三、其…

WebRTC不同方案对比

1.功能上会有一些出入,尤其是国内的metaRTC版本迭代很快, 2.后续的ffmpeg也在进行支持webrtc特性,obs新的版本好像已经支持了webrtc, 3.对于webrtc部分缺少的信令部分的标准化也有了对应的标准whip和whep协议 所以,如…

一道SQL题

有个搞数仓的朋友不知道从哪儿弄了个题。。。 做了做体验了一下。。。 记录记录。 分析 要保证每天都要做新题 5天必须都做题,不然GG 最后一天必须做新题,如果最后一天做新题了,前面那几天没做新题,做的是老题 最后一天&#…

QT:问题、解决与原因

在这里记录一些自己遇到的在QT开发上面的小问题和tips 目录 QComboBox 设置qss样式不生效qt按钮设置点击释放效果实现效果 QComboBox 设置qss样式不生效 我设置的样式是: box->setStyleSheet("QComboBox {""border: none;""padding:…

支付宝支付上线准备工作(商家自研接入)

商家自研流程 1.创建应用 登录支付宝开放平台创建 网页/移动应用 说明:生成的应用唯一标识 APPID 可用于调用开放产品接口。 2.配置应用 2.1 应用详情 2.2 产品绑定 2.3 开发设置 在开发 > 开发设置 中配置应用信息。 2.3.1 接口加密方式 按操作步骤进行…

抖音seo源码部署/开源不加密可二开/抖音seo优化开发方案

一、前言 抖音是目前国内非常流行的短视频平台之一,用户数量庞大,更是吸引了许多企业和个人在上面开设账号,通过发布内容来进行流量变现。但是,在一个账号发布内容的同时,管理员又需要同时关注多个账号,对账…

mysql中的行格式之compact格式分析

mysql中的行格式之compact格式分析 mysql行格式 所谓行格式,就是指mysql一行数据的存储格式。 InnoDB 储存引擎支持有四种行储存格式:Compact、Redundant、Dynamic 和 Compressed。 Redundant是很古老的行格式了,因为占用空间最多&#x…

基于深度学习的高精度道路瑕疵检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度道路瑕疵(裂纹(Crack)、检查井(Manhole)、网(Net)、裂纹块(Patch-Crack)、网块(Patch-Net)、坑洼块&#x…

【C++】模板进阶—非类型模板参数、模板特化及模板的分离编译

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🚁 个人主页:不 良 🔥 系列专栏:🛸C 🛹Linux 📕 学习格言:博观而约取&#xff0…

什么是云应用程序?

应用程序优先的云服务的日益普及导致应用程序与云服务的融合程度比以前更深。应用程序和云之间的运行时边界正在从虚拟机转移到容器和函数。集成边界正在从仅访问数据库和消息代理转向应用程序的机械部分混合并在云中运行的边界。在这个最终架构中,应用程序是“云绑…

pwm呼吸灯

文章目录 一、呼吸灯二、代码实现三、引脚分配 一、呼吸灯 呼吸灯是指灯光在微电脑的控制之下完成由亮到暗的逐渐变化,使用开发板上的四个led灯实现1s间隔的呼吸灯。 二、代码实现 c module pwm_led( input clk ,input rst_n ,output reg [3:0] led ); …

photoshop制作法线和凹凸贴图

做个选区 Ctrlj 法线贴图 生成凹凸贴图

Spring框架的创建和使用

目录 Spring框架概述 什么是Spring框架 什么是容器 什么是IoC容器 Spring的核心功能 IoC容器和普通程序开发的区别 DI Spring项目的创建和使用 Spring项目创建 创建一个maven项目 添加Spring框架支持 添加一个启动类 Spring项目的使用 存储Bean对象 获取并使用B…

应用级监控方案Spring Boot Admin

1.简介 Spring Boot Admin为项目常用的监控方式,可以动态的监控服务是否运行和运行的参数,如类的调用情况、流量等。其中分为server与client: server: 提供展示UI与监控服务。client:加入server,被监控的…