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

news2024/11/14 22:05:39

传输链路

链路指无源的点到点的物理连接。链路是计算机网络中的一个重要概念,它指的是连接两个网络设备的物理或逻辑路径。简单来说,链路就是电信号或数据在网络中传输的路径。在计算机网络中,链路可以分为物理链路和逻辑链路两种。物理链路是指连接两个网络设备的物理媒介,例如网线、光纤等。逻辑链路则是指通过网络协议建立的逻辑连接,例如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://www.coloradmin.cn/o/758078.html

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

相关文章

传承与进取的力量-节选

只简单谈如下两点: 传承:家族各类关系网总和 进取:个人提升获取资源和 少数人的晚餐 之前,每一届都会在交流中谈及,时间才是真正的公平公正,生命只有一次,至少在目前还没有公开报道的永生人。…

动态内存分配(2)——经典例题的讲解

前言: 在前面我们已经学习动态分配内存,今天我们就来做一做它的几道经典例题,加深巩固我们所学的知识。 知识复习:动态内存管理(1)_从前慢,现在也慢的博客-CSDN博客 题目1: 下面代码…

福利!打造自己的ChatGPT聊天小程序,前后端代码全开源

简介 本文分享一个我前几个月实现的一个智能聊天系统小项目,包含了java后端,微信小程序端,web页面端三个子工程。 代码已经全部开源,地址放在了文末。 最近一年,chatGPT的火爆程度,已经不需要我再多说了…

使用docker简单创建一个python容器

/root/docker_python目录结构: . |-- demo | -- main.py -- docker-compose.ymlmain.py内容: # codingutf-8 # -*- coding: utf-8 -*-if __name__ __main__:print("hello world")docker-compose.yml内容: version: "3&q…

Spark高级特性

spark shuffle 中 map 和 reduce 是一个相对的概念,map是产生一批数据,reduce是接收一批数据,前一个任务是map,后一个任务是reduce。 hashShuffle:hash分组,一个task里面按hash值的不同,分到不…

7.Java 运算符

运算符分成以下几组 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 1.算术运算符 public class Test {public static void main(String[] args) {int a 10;int b 20;int c 25;int d 25;System.out.println("a b " (a b) );System.out.print…

Gitlab 多重构建镜像上传私有 Harbor与 Dockerhub

文章目录 1. 预备条件2. 安装 docker2.1 安装 docker buidx2.2 docker 配置2.3 安装 Buildx2.4 安装模拟器 3. 安装 git4. 安装 gitlab5. 部署 gitlab-runner6. 搭建 harbor7. 开发应用8. 配置 BuildKit8.1 Registry mirror8.2 设置镜像仓库正式 9. 编写 .gitlabs-ci.yaml 1. 预…

Java Stream流对多个字段进行排序

谈起Java 8,不少熟悉它的人,都会知道有一个对我们帮助很大的新特性,没错,就是我们在项目中经常用到的stream,它对我们处理数据的过程中提供了很多的便利,而这边文章主要讲述stream的便利之一:对…

聊一聊Java抽象同步队列AQS

抽象同步队列AQS概述 AQS是锁的底层支持 AQS类图 由该图可以看到,AQS是一个FIFO的双向队列,其内部通过节点head和tail记录队首和队尾元素,队列元素的类型为Node。其中Node中的thread变量用来存放进入AQS队列里面的线程;Node节点内部的SHARED用来标记该线程是获取共享资源时…

考核:QTableWidget开发[折叠/展开单元格QTableWidgetItem]

目录 效果要求一、功能概述二、功能三、关系FATable 表NTable 表CTable 表 实现infos.hmain.cppcomplextablewidget.hcomplextablewidget.cppschemedialog.hschemedialog.cpp 源码模糊知识点 效果 要求 一、功能概述 二、功能 三、关系 FATable 表 CREATE TABLE fatable (idF…

UE4从零开始制作数字孪生道路监测平台

UE4从零开始制作数字孪生道路监测平台 UE4集成Cesium for Unreal和WebSocket,后端使用NodeJs搭建服务器进行数据模拟和真实数据实时转发。 1:新建UE4项目并集成Cesium for Unreal Cesium for UE4插件解锁了虚幻引擎中的3D地理空间生态系统。通过将高精…

基于FPGA的softmax函数优化及实现

文章目录 前言优化方案测试数据产生及Matlab结果处理流程工程说明功耗与面积标准softmax函数功耗与面积总结前言 FPGA异构计算是一个趋势,在AI推理、深度学习中广泛使用FPGA进行加速,减小系统延迟。而AI推理中有一个组件被广泛使用,各种网络模型中都有其身影,那就是激活函…

【雕爷学编程】Arduino动手做(152)---BMI160 六轴陀螺仪模块2

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

走进Linux世界【三、Linux文件与路径】

第三章 Linux文件与路径 1、文件结构 ​ Windows和Linux文件系统区别 ​ 在windows平台下,打开“此电脑”,我们可以看到盘符分区 ​ 每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形 ​ 但是在 Linux 下,我们是看…

创建和分析二维桁架和梁结构研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

03_008内存映射原理_虚拟内存区域vm_area_struct详解,和mmap系统钓调用完全分析

前言 上一个记录中的 虚拟地址里的虚拟内存区域没有说的很完全 这次补充一下 同时记录一些 物理地址空间 内存映射原理 最后直接通过进程使用函数完成虚拟空间到物理空间的映射 物理地址空间 物理地址是处理器在系统总线上看到的地址。使用RISC的处理器通常只实现一个物理地…

递归函数(详解+实战)

目录 递归函数介绍 递归函数的作用 案例:实现10以内阶乘 递归思想 递归的编写 斐波那契数列(实战) 循环实现 递归实现 递归函数介绍 递归函数是指在函数的定义中调用函数本身的过程。递归函数可以用于解决那些可以通过将大问题拆分为更小的相似子问题来解决的…

窗口看门狗 WWDG

窗口看门狗介绍 Q: 什么是窗口看门狗? A: 窗口看门狗用于监测单片机程序运行时效是否精准,主要检测软件异常(独立看门狗检测的是硬件异常),一般用于需要精准检测(独立看门狗不太精准)程序运行时间的场合。 窗口看门狗…

MySQL数据库操作篇3(聚合函数分组查询)

通过MySQL提供的聚合函数,可以很方便的进行一些计算来辅助查询,所谓聚合函数就是将表中的数据统计后进行的某种处理 分组查询可以理解成将一张表按照某个属性分成多张表,属性值相同的在一张表里 比如说学生表,按照性别这个属性分组…