系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第一部分:通信协议(1)

本心、输入输出、结果

文章目录

  • 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第一部分:通信协议(1)
    • 前言
      • 通信协议
      • REST API vs. GraphQL 对比
        • GraphQL
      • gRPC 运行原理
        • 步骤说明
      • 什么是 WebHook (网络钩子)
      • 如何提升 API 性能
        • 分页
        • 异步日志记录
        • 缓存
        • 有效负载压缩
        • 连接池
      • HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC)
      • 弘扬爱国精神

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第一部分:通信协议(1)


编辑:简简单单 Online zuozuo
地址:https://blog.csdn.net/qq_15071263

在这里插入图片描述

前言

我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节

我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节

在这里插入图片描述

通信协议

软件体系结构风格定义应用程序编程接口 (API) 的不同组件如何相互交互。因此,它们通过提供设计和构建 API 的标准方法来确保效率、可靠性和与其他系统的轻松集成。

以下是常见的形式

在这里插入图片描述

在这里插入图片描述

REST API vs. GraphQL 对比

下图显示了 REST 和 GraphQL 之间的比较

在这里插入图片描述

GraphQL

GraphQL 是由 Meta 开发的 API 查询语言。它提供了 API 中数据的完整描述,并让客户能够准确询问他们需要什么。

GraphQL 服务器位于客户端和后端服务之间。 GraphQL 可以将多个 REST 请求聚合到一个查询中。GraphQL 服务器在图形中组织资源。

GraphQL 支持查询、突变(将数据修改应用于资源)和订阅(接收有关模式修改的通知)

在这里插入图片描述

gRPC 运行原理

gRPC 运行原理

在这里插入图片描述

步骤说明

RPC(远程过程调用)之所以称为“远程”,是因为当服务部署到微服务体系结构下的不同服务器时,它支持远程服务之间的通信。从用户的角度来看,它的作用类似于本地函数调用。

下图说明了 gRPC 的整体数据流。

第 1 步:从客户端进行 REST 调用。请求正文通常采用 JSON 格式。

步骤 2 - 4:订单服务(gRPC 客户端)接收 REST 调用,对其进行转换,并对付款服务进行 RPC 调用。gPRC 将客户端存根编码为二进制格式,并将其发送到低级传输层。

第 5 步:gRPC 通过 HTTP2 通过网络发送数据包。由于二进制编码和网络优化,据说 gRPC 比 JSON 快 5 倍。

步骤 6 - 8:支付服务(gRPC 服务器)从网络接收数据包,对其进行解码,然后调用服务器应用程序。

步骤 9 - 11:结果从服务器应用程序返回,并被编码并发送到传输层。

步骤 12 - 14:订单服务接收数据包,对其进行解码,并将结果发送到客户端应用程序

在这里插入图片描述

什么是 WebHook (网络钩子)

我们先看看轮询和 WebHook 的对比

在这里插入图片描述

假设我们运行一个电子商务网站。客户端通过 API 网关将订单发送到订单服务,该网关转到支付服务进行支付交易。然后,支付服务与外部支付服务提供商 (PSP) 交谈以完成交易。

有两种方法可以处理与外部PSP的通信。

1、短轮询

向PSP发送付款请求后,付款服务会不断向PSP询问付款状态。经过几轮比赛,PSP终于以状态回归。

短轮询有两个缺点:

  • 状态的持续轮询需要支付服务的资源。
  • 外部服务直接与支付服务通信,从而产生安全漏洞。

2、网络钩子

我们可以向外部服务注册一个网络钩子。这意味着:当您对请求有更新时,请通过某个 URL 给我回电。当PSP完成处理后,它将调用HTTP请求来更新付款状态。

通过这种方式,编程范式发生了变化,支付服务不再需要浪费资源来轮询支付状态。

如果PSP从不回电怎么办?我们可以设置一个家政工作,每小时检查一次付款状态。

Webhook 通常被称为反向 API 或推送 API,因为服务器向客户端发送 HTTP 请求。使用网络钩子时,我们需要注意 3 件事:

  • 我们需要为外部服务设计一个合适的 API。
  • 出于安全原因,我们需要在 API 网关中设置适当的规则。
  • 我们需要在外部服务中注册正确的 URL。

在这里插入图片描述

如何提升 API 性能

我们可以参考如图所示的 5 个技巧

在这里插入图片描述

分页

当结果的大小很大时,这是常见的优化。结果将流式传输回客户端,以提高服务响应能力。

异步日志记录

同步日志记录处理每个调用的磁盘,并可能降低系统速度。异步日志记录首先将日志发送到无锁缓冲区,然后立即返回。日志将定期刷新到磁盘。这大大降低了 I/O 开销。

缓存

我们可以将经常访问的数据缓存到缓存中。客户端可以先查询缓存,而不是直接访问数据库。如果缓存未命中,客户端可以从数据库进行查询。像 Redis 这样的缓存将数据存储在内存中,因此数据访问比数据库快得多。

有效负载压缩

请求和响应可以使用gzip等进行压缩,以便传输的数据大小要小得多。这样可以加快上传和下载速度。

连接池

在访问资源时,我们经常需要从数据库中加载数据。打开关闭的数据库连接会增加大量开销。因此,我们应该通过开放连接池连接到数据库。连接池负责管理连接生命周期。

在这里插入图片描述

HTTP 1.0 -> HTTP 1.1 -> HTTP 2.0 -> HTTP 3.0 (QUIC)

让我们了解一下每一代的 HTTP 都做了什么事情

  • HTTP 1.0于1996年完成并完整记录。对同一服务器的每个请求都需要单独的 TCP 连接。
  • HTTP 1.1 发布于 1997 年。TCP 连接可以保持打开状态以供重用(持久连接),但它不能解决 HOL(行头)阻塞问题。
  • HOL 阻塞 - 当浏览器中允许的并行请求数用完时,后续请求需要等待前一个请求完成。
  • HTTP 2.0 于 2015 年发布。它通过请求多路复用解决了 HOL 问题,从而消除了应用层的 HOL 阻塞,但 HOL 仍然存在于传输 (TCP) 层。
  • 正如你在图中所看到的,HTTP 2.0引入了HTTP“流”的概念:一种抽象,允许将不同的HTTP交换多路复用到同一个TCP连接上。每个流不需要按顺序发送。
  • HTTP 3.0 初稿于 2020 年发布。它是HTTP 2.0的后继者。它使用 QUIC 而不是 TCP 作为底层传输协议,从而消除了传输层中的 HOL 阻塞

QUIC基于UDP。它将流作为一等公民引入传输层。QUIC 流共享相同的 QUIC 连接,因此不需要额外的握手和缓慢启动来创建新流,但 QUIC 流是独立交付的,因此在大多数情况下,影响一个流的数据包丢失不会影响其他流

在这里插入图片描述

弘扬爱国精神

在这里插入图片描述

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

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

相关文章

【Jetson 设备】window10主机下使用VNC可视化控制Jetson Orin NX

文章目录 前言VNC连接搭建(WiFi模式)Jetson Orin NX操作本地主机操作 VNC连接搭建(以太网模式)Jetson Orin NX操作本地主机操作 总结 前言 最近需要使用Jetson Orin NX对一些深度学习算法进行测试,为了方便主机与Jetson Orin NX之间的数据的传输,以及方…

性能优化-卡顿优化-tarce抓取及分析

性能优化(卡顿分析) 文章目录 一、抓取trace的方法1.使用systrace抓取trace2.使用atrace抓取3.使用Perfetto抓取trace 二、trace文件的分析1.快捷操作1.1 导航操作1.2 快捷操作 2.chrome trace工具分析trace文件3.Prefetto分析trace文件 一、抓取trace的…

精益求精:使用Ansible集中式自动备份核心数据

1、引言 在当今数字化时代,数据是企业和组织的核心资产。为了确保数据的安全性和可恢复性,备份是至关重 要的。然而,手动备份数据可能会繁琐且容易出错,特别是在面对大规模和分布式的数据存储情况下。幸运的是,Ansibl…

(N-128)基于springboot,vue酒店管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 系统分前后台,项目采用前后端分离 前端技术:vueelementUI 服务端技术:springbootmybatis 本系统功…

C语言柔性数组

大家好,我们今天来补充一个知识,就是柔性数组。 柔性数组概念: 也许你从来没有听说过柔性数组(flexible array)这个概念,但是它确实是存在的。 C99 中,结构中的最后一个元素允许是未知大小的数…

【C++】:类和对象(中)之类的默认成员函数——构造函数and析构函数

1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数 默认成员函数:用户没有显式实现,编译器会生成…

斯坦福JSKarel编程机器人使用介绍

斯坦福JSKarel编程机器人使用介绍 为了避免被编程语言固有的复杂性所困扰,有一个被称为卡雷尔(Karel)机器人的微型世界(microworld)的简化环境,可以让编程初学者从中学习理解编程的基本概念,而…

unity(WebGL) 截图拼接并保存本地,下载PDF

截图参考:Unity3D 局部截图、全屏截图、带UI截图三种方法_unity 截图_野区捕龙为宠的博客-CSDN博客 文档下载: Unity WebGL 生成doc保存到本地电脑_unity webgl 保存文件_野区捕龙为宠的博客-CSDN博客 中文输入:Unity WebGL中文输入 支持输…

Peter算法小课堂—正整数拆分

大家可能会想:正整数拆分谁不会啊,2年级就会了,为啥要学啊 例题 正整数拆分有好几种,这里我们列举两种讲。 关系 我们看着第一幅图,头向左转90,记住你看到的图,再来看第二幅图,你…

KubeSphere安装mysql8

需要持久化储存数据的,建立有状态服务。 无状态服务是不会持久化的,重启就归零 KubeSphere 创建自建应用后,创建有状态服务,但是自己应用的有状态服务不能外放端口,需要在服务哪里删除pod,在创建负载指定相关的有状态服务,就可以外放端口了 安装mysql8 添加初始化密码参…

Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务

Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务 一. CentOS7 安装配置SFTP服务器详解一、SFTP简介二、关闭防火墙三、安装SSH服务在CentOS7中,sftp只是ssh的一部分,所以采用yum来安装ssh服务即可1. 查看是否已经安装了ssh2.…

狄克斯特拉(Dijkstra) 算法 php实现

《算法图解》中提到的狄克斯特拉算法,用php实现。 一 原理及解释 根据示例图求出起点到终点的最小耗费路径。 因为涉及每条路径的权重,所以这种算法仅适合有向路径。 所谓有向路径,指仅从起点指向终点的路径。 相对的无向路径&#xff0…

【面试题笔记】C++继承和多态常见高频经典面试题

1.继承相关习题 1.1 什么是菱形继承?菱形继承的问题是什么? 菱形继承:菱形继承是多继承的一种特殊情况。两个中间类继承父类,而派生类继承了两个中间类,从而在继承关系上呈现出一种菱形。如下图所示: **…

ZKP3.2 Programming ZKPs (Arkworks Zokrates)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 3: Programming ZKPs (Guest Lecturers: Pratyush Mishra and Alex Ozdemir) 3.3 Using a library ( tutorial) R1CS Libraries A library in a host language (Eg: Rust, OCaml, C, Go, …)Key type: constraint system Mai…

光伏三相并网逆变器的控制策略与性能分析(Simulink仿真实现)

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

24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

基于Java的师生交流答疑管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

攻防世界web篇-Training-WWW-Robots

直接点击给出的地址,然后会转到另一个网页界面,在这个界面,已经给出了提示,robots.txt 在浏览器中,直接在地址的后面加上robots.txt,会进到下面这个界面 因为对php语言一窍不通,所以这里纯粹就…

【数据结构】队列(C语言实现)

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 队列 1. 队列的概念及结构…

搜维尔科技:Varjo-探讨汽车工业使用虚拟现实/XR的可能性

新的 奇亚EV9 被定位为起亚有史以来最豪华的车型。在一次活动中,起亚通过向芬兰媒体、利益相关者和经销商网络推出新的汽车车型(起亚EV9,EV9是一款高度超过5米的全电动车,拥有100千瓦的电池、快速充电能力、2500公斤的拖曳能力和7公斤的座位--这在市场上是一个独特的…