微服务 Spring Cloud 9,RPC框架,客户端和服务端如何建立网络连接?

在这里插入图片描述

目录

    • 一、客户端和服务端如何建立网络连接?
      • 1、HTTP通信
      • 2、Socket通信
    • 二、服务端如何处理请求?
      • 1、通常来说,有三种处理方式:
      • 2、不同的处理方式对应着不同的业务场景:
    • 三、HTTP协议传输流程
    • 四、数据该如何序列化和反序列化?
      • 1、选择合适的序列化方式
      • 2、考虑数据传输效率
      • 3、考虑数据结构的变化
      • 4、考虑跨语言和跨平台的需求
      • 5、考虑数据的安全性
    • 五、总结
    • 微服务 Spring Cloud系列

大家好,我是哪吒。

在服务化拆分之后,服务提供者和服务调用者会运行在两台不同的物理机的不同的进程内,他们之间的调用称为远程方法调用,简称RPC。

RPC的大体流程是:

  1. 建立网络连接;
  2. 按照某种约定的协议进行网络通信;
  3. 正常通信后,服务端接收到客户端的请求,然后进行处理;
  4. 处理成功后,对处理结果进行压缩、序列化,再将其返回给客户端;

这也就对应着4个问题:

  1. 客户端和服务端如何建立网络连接?
  2. 服务端如何处理请求?
  3. 数据传输采用什么协议?
  4. 数据该如何序列化和反序列化?

在这里插入图片描述

一、客户端和服务端如何建立网络连接?

1、HTTP通信

HTTP通信是一种基于请求和响应模型的通信协议,用于在网络中传输数据。它由客户端和服务器组成,客户端向服务器发送请求,服务器处理请求并返回适当的响应。

(1)HTTP通信的过程如下

  1. 建立连接:HTTP协议是应用层协议,需要在传输层协议(如TCP)的基础上建立连接。当客户端向服务器发送请求时,首先需要建立TCP连接。
  2. 发送请求:一旦建立了TCP连接,客户端就可以向服务器发送HTTP请求。请求命令包括请求方法(如GET、POST、PUT、DELETE等)、请求URI、HTTP协议版本以及请求头和请求体等信息。
  3. 接收请求:服务器接收到请求后,会对其进行解析和处理,包括对请求方法、URI、协议版本以及请求头和请求体的处理。
  4. 返回响应:服务器处理完请求后,会返回适当的响应。响应包括HTTP协议版本、响应状态码、响应头和响应体等信息。
  5. 断开连接:在完成通信后,客户端和服务器会断开TCP连接。

(2)HTTP通信的特点如下:

  1. 支持B/S模式:HTTP通信是浏览器和服务器之间的通信,支持B/S模式,不需要客户端和服务器建立直接的连接。
  2. 简单快速:HTTP协议简单快速,能够快速地传输数据,减少网络延迟。
  3. 灵活:HTTP协议支持多种请求方法,可以支持不同的操作类型,如GET用于获取数据,POST用于提交数据等。
  4. 无连接:HTTP协议无连接,每个请求都需要建立TCP连接,但连接建立后可以处理多个请求,减少了网络开销。
  5. 无状态:HTTP协议无状态,每个请求都是独立的,服务器不会记录之前请求的状态。这使得HTTP通信具有更好的可扩展性和可维护性。

完成请求后,再经历一次“四次挥手”的过程来断开连接。

2、Socket通信

Socket通信是基于TCP/IP协议的封装,建立一次Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ;另一个运行于服务器端,称为ServerSocket 。就像下图所描述的,Socket通信的过程分为四个步骤:服务器监听、客户端请求、连接确认、数据传输。

  1. 服务器监听:ServerSocket通过调用bind()函数绑定某个具体接口,然后调用listen()函数实时监控网络状态,等待客户端的连接请求;
  2. 客户端请求:ClientSocket调用connect()函数向ServerSocket绑定的地址和端口发起连接请求;
  3. 服务端连接确认:当ServerSocket监听到或者接收到ClientSocket的连接请求时,调用accept()函数响应ClientSocket的请求,同客户端建立连接;
  4. 数据传输:当ClientSocket和ServerSocket建立连接后,ClientSocket调用send()函数,ServerSocket调用receive()函数,ServerSocket处理完请求后,调用send()函数,ClientSocket调用receive()函数,就可以得到返回结果。

在这里插入图片描述

当客户端和服务端建立网络连接后,就可以发起请求了。但网络不一定总是可靠的,经常会遇到网络闪断、连接超时、服务端宕机等各种异常,通常的处理手段有两种:

  1. 链路存活检测:客户端需要定时发送心跳检测信息(一般为ping请求)给服务端,如果服务端连续n次心跳检测或者超过规定的时间都没有回复消息,则认为此链路已经失效,这个时候客户端就需要重新与服务端建立连接。
  2. 断连重试:通常多种情况会导致连接断开,比如客户端主动关闭、服务端宕机、网络故障等。这个时候客户端就需要与服务端重新建立连接,但一般不会立刻完成连接,而是要等待一个固定的时间后再发起连接,避免服务端的连接回收不及时,而客户端瞬间重连的请求太多而把服务端的连接数占满。

二、服务端如何处理请求?

网络已经连通,服务端如何处理客户端请求呢?

1、通常来说,有三种处理方式:

  1. 同步阻塞BIO,客户端的每一个请求,服务端就会生成一个线程去处理。当客户端同时发起的请求很多时,服务端需要创建很多的线程去处理每一个请求,如果达到了系统最大的线程瓶颈数,新来的请求就无法处理了。
  2. 同步非阻塞NIO,客户端的每一个请求,服务端并不是每次都创建一个新的线程来处理,而是通过IO多路复用技术进行处理。系统的一个线程可以处理多个客户端请求,这种方式的优势是开销小,不用为每个请求创建一个新的线程,可以节省系统开销。
  3. 异步非阻塞方式AIO,客户端只需要发起一个IO操作,然后会立即返回,等IO操作完成后,客户端得到IO操作完成的通知,此时客户端再对返回值进行处理,不需要进行IO读写操作,真正的IO读取和写入操作已经由内核完成了。这种方式的优势是客户端无需等待,不存在阻塞等待的问题。

2、不同的处理方式对应着不同的业务场景:

  1. BIO适用于连接数比较少的业务场景,系统会有足够的线程供你使用,这种程序比较简单直观,易于理解;
  2. NIO适用于连接数比较多但是每个请求的业务量不是很大,处理速度很快,比如聊天服务器。
  3. AIO适用于连接数比较多,而且每个请求的业务量比较大,处理比较耗时。

三、HTTP协议传输流程

最常用的协议是HTTP协议, 它是一种开放协议,各大网站的服务器和浏览器之间的数据传输大都采用这种协议。

  1. 根据协议的规定,服务消费者对数据进行处理;
  2. 然后通过网络传送到服务端;
  3. 服务端从网络中获取数据后,根据规定,对传输的数据进行解码操作;
  4. 然后根据业务逻辑进行处理;
  5. 再把处理结果返回给服务消费者;
  6. 服务消费者对返回的结果进行解码处理,最终得到服务端返回的数据结果。

通常协议规定中包含消息头和消息体两部分。消息头存放的是协议的公共字段以及用户扩展字段,消息体存放的是传输数据的具体内容。

四、数据该如何序列化和反序列化?

在微服务中,数据的序列化和反序列化是非常重要的环节,它们涉及到数据的传输和存储。以下是一些关于微服务中数据序列化和反序列化的建议:

1、选择合适的序列化方式

序列化是将数据结构或对象状态转换为可以存储或传输的格式的过程,而反序列化则是将已序列化的数据还原为原始数据结构或对象状态的过程。在微服务中,需要选择一种高效的、易于理解和使用的序列化方式。常见的序列化方式包括JSON、XML、Protocol Buffers等。其中,JSON是一种轻量级的数据交换格式,它以可读性高、兼容性好、支持多种语言等优点而被广泛使用。而Protocol Buffers则是一种高效的数据序列化格式,它能够将结构化的数据序列化成字节流,并可以在网络中进行传输。

2、考虑数据传输效率

在微服务中,数据传输效率是非常重要的,因此需要选择一种高效的序列化方式。JSON和XML虽然易于理解和使用,但它们的传输效率相对较低。而Protocol Buffers则是一种更高效的序列化格式,它能够将数据结构化并压缩成更小的字节流,从而提高了数据传输效率。

3、考虑数据结构的变化

在微服务中,数据结构可能会随着业务需求的变化而变化。因此,在选择序列化方式时需要考虑数据结构的变化情况。如果数据结构经常变化,那么选择一种灵活的序列化方式是非常重要的。如果数据结构相对稳定,那么可以选择一种更高效的序列化方式。

4、考虑跨语言和跨平台的需求

微服务通常需要支持不同的语言和平台。因此,在选择序列化方式时需要考虑跨语言和跨平台的需求。JSON和XML是一种通用的数据交换格式,支持多种语言和平台。而Protocol Buffers则是一种跨语言的数据序列化格式,它可以在不同的语言之间进行数据交换。

5、考虑数据的安全性

在微服务中,数据的传输和存储都需要考虑安全性问题。因此,在选择序列化方式时需要考虑数据的安全性。如果需要在网络中进行数据传输,那么可以选择一种加密的序列化方式来保护数据的安全性。如果需要在本地存储数据,那么可以选择一种加密的存储方式来保护数据的安全性。

在微服务中,数据的序列化和反序列化是非常重要的环节。需要根据实际情况选择合适的序列化方式,并考虑数据传输效率、数据结构的变化、跨语言和跨平台的需求以及数据的安全性等因素。

五、总结

  1. 通信框架,主要解决客户端和服务端如何建立连接、管理连接以及服务端如何处理请求的问题;
  2. 通信协议,主要解决客户端和服务端采用哪种数据传输协议的问题;
  3. 序列化和反序列化,主要解决客户端和服务端采用哪种数据编解码的问题。

这三个部分就组成了一个完整的RPC调用框架,通信框架提供了基础的通信能力,通信协议描述了通信契约,而序列化和反序列化则用于数据的编/解码。一个通信框架可以适配多种通信协议,也可以采用多种序列化和反序列化的格式,比如服务化框架Dubbo不仅支持Dubbo协议,还支持RMI协议、HTTP协议等,而且还支持多种序列化和反序列化格式,比如JSON、Hession 2.0以及Java序列化等。


微服务 Spring Cloud系列

微服务 Spring Cloud 1,服务如何拆分?使用微服务的注意事项?

微服务 Spring Cloud 2,一文讲透微服务核心架构(注册中心、服务通信、服务监控、服务追踪、服务治理)

微服务 Spring Cloud 3,如何对微服务进行有效的监控?

微服务 Spring Cloud 4,分布式系统如何进行数据分区

微服务 Spring Cloud 5,一图说透Spring Cloud微服务架构

微服务 Spring Cloud 6,用了这么多年Docker容器,殊不知你还有这么多弯弯绕

微服务 Spring Cloud 7,Nacos配置中心的Pull原理,附源码

微服务 Spring Cloud 8,开源RPC框架如何选型?


🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

浅谈安科瑞智能照明系统在马来西亚国家石油公司项目的应用

摘要:随着社会经济的发展及网络技术、通信技术的提高,人们对照明设计提出了新的要求,它不仅要控制照明光源的发光时间、 亮度,而且与其它系统来配合不同的应用场合做出相应的灯光场景。本文介绍了马亚西亚石油公司智能照明项目的应…

2023.11.22 IDEA Spring Boot 项目热部署

目录 引言 操作步骤 1. 在 pom.xml 中添加热部署框架支持 2. Setting 开启项目自动编译 3. 以后创建的新项目进行同步配置 4. 重复 配置 步骤2 的内容 5. 开启运行中的热部署 引言 Spring Boot 的热部署是一种在项目正在运行的时候修改代码,却不需要重新启动…

无线电通信常见的12种天线

天线,作为无线通信系统的重要组成部分,有着不可替代的作用。 在我们的生活中,有很多类型的通信需求,例如长距离通信、短距离通信、卫星通信、微波通信、手机通信、点对点通信、点对面通信等等。 使用卫星电话进行通信 不同的需求&…

【高级程序设计】django与网页设计

django安装与配置 使用pip进行Django的安装: pip install djangoconda install django验证django安装成功 import django django.__version__ ## django.get_version()新建一个名称为blog的django项目(project), D:\>cd web-project D:\web-project>django-admi…

亚马逊防关联要注意什么?看这一篇,防关联有技巧!

亚马逊账号关联的问题,对于跨境电商来说都不陌生,店铺的安全问题往往和账号关联有关,一旦亚马逊账号被关联就很可能导致我们的店铺被封,对于被亚马逊封店的卖家都会有申诉机会,如果无法成功申诉,那将永久被…

政务大数据与资源平台建设解决方案:PPT全文75页,附下载

关键词:智慧政务解决方案,大数据解决方案,数据中心解决方案,数据治理解决方案 一、政务大数据与资源平台建设背景 1、政务大数据已成为智慧城市建设的必要基础 为响应国家不断加快5G基建、大数据、人工智能等新型基础设施建设布…

生命周期评估(LCA)与SimaPro碳足迹分析

SimaPro提供最新的科学方法和数据库以及丰富的数据,使您可以收集和评估产品和流程的环境绩效。通过这种方式,您可以将改变公司产品生命周期的想法提交给您的同事,以便阐明您的业务未来。 SimaPro软件的特点和功能: 完全控制产品生…

oracle数据库巡检常见脚本-系列三

简介 作为数据库管理员(DBA),定期进行数据库的日常巡检是非常重要的。以下是一些原因: 保证系统的稳定性:通过定期巡检,DBA可以发现并及时解决可能导致系统不稳定的问题,如性能瓶颈、资源利用率…

时间复杂度 空间复杂度 ---java

目录 一. 算法效率 二.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3常见时间复杂度计算举例 三. 空间复杂度 一. 算法效率 算法效率分析分为两种:第一种是时间效率,第二种是空间效率 。 时间效率被称为时间复杂度,而空间…

基于 Flink CDC 打造企业级实时数据集成方案

本文整理自Flink数据通道的Flink负责人、Flink CDC开源社区的负责人、Apache Flink社区的PMC成员徐榜江在云栖大会开源大数据专场的分享。本篇内容主要分为四部分: CDC 数据实时集成的挑战Flink CDC 核心技术解读基于 Flink CDC 的企业级实时数据集成方案实时数据集…

算法复杂度分析

文章目录 有数据范围反推算法复杂度以及算法内容一般方法递归 有数据范围反推算法复杂度以及算法内容 c一秒可以算 1 0 7 10^7 107~ 1 0 8 10^8 108次 一般方法 看循环 有几层循环就可以初步分析O( n i n^i ni) 双指针算法除外O(n) 递归 公式法 根据公式的形式&#xff0…

痤疮分级实验笔记-ResNet

组织数据集 方式1:根据txt文件分类的数据集组织形式(放弃) 你可以使用Python来读取txt文件中的训练集图片信息,并将这些图片从原始文件夹复制到目标文件夹中。 当程序无法找到标签对应的图片或者目标文件夹中已经存在同名图片时…

技术细分|推荐系统——推荐系统中的数据去偏方法

本篇的主要脉络同样依据中科大何向南教授、合工大汪萌教授联合在 TKDE 上的一篇综述文章展开:Bias and Debias in Recommender System: A Survey and Future Directions。 下面按照前导文章中介绍的数据偏差 Selection Bias、Conformity Bias、Exposure Bias、Posit…

洛谷P1036 [NOIP2002 普及组] 选数【回溯搜索+素数】

P1036 [NOIP2002 普及组] 选数 前言题目题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 题目分析注意事项 代码后话王婆卖瓜 题目来源 前言 期中考逆天大作业,都快没时间写了。不过还是得抽空写一下题目,今天还是做搜索的题单,一题…

【0基础学Java第十一课】-- 认识异常

11. 认识异常 11.1 异常的概念与体系结构11.1.1 异常的概念11.1.2 异常的体系结构11.1.3 异常的分类 11.2 异常的处理11.2.1 防御式编程11.2.2 异常的抛出 throw11.2.3 异常的捕获异常声明throwstry-catch捕获并处理finally问题:既然 finally 和 try-catch-finally …

运动规划Motion-Planning随笔

online verification技术 实时安全校验技术:留一手 首先计算能否通过刹车这种方式得到一条安全轨迹,(让速不让道),当刹车有可能碰撞到行人或其他车辆时,则判断变道是否会产生碰撞。如果能变道&#xff0…

Mapbox中点图层和面图层点击事件重叠,禁止点击穿透方案

使用mapbox的小伙伴们可能都遇到过这个问题,就是当地图上有两个图层,一个面图层一个点图层,二者相重合的时候。假设我们想点击点位弹窗展示一些内容,也想点击面图层的时候弹窗展示一些内容,这时候一个有意思的问题就产生了,就是点击点位弹窗的时候面图层对应的弹窗也会弹…

几款Java源码扫描工具(FindBugs、PMD、SonarQube、Fortify、WebInspect)

说明 有几个常用的Java源码扫描工具可以帮助您进行源代码分析和检查。以下是其中一些工具: FindBugs:FindBugs是一个静态分析工具,用于查找Java代码中的潜在缺陷和错误。它可以检测出空指针引用、资源未关闭、不良的代码实践等问题。FindBu…

项目经理只需要有PMP证书就行?

就目前而言,大部分人对于项目经理的认识还停留在:有项目管理经验,有对应的工作年限,有PMP证书。所以绝大多数人都认为只要报考了PMP项目管理,取得PMP证书,即可加入项目经理的圈子,薪资翻倍。 但…

没有PDF密码,如何解密?

PDF文件有两种密码,一个打开密码、一个限制编辑密码,因为PDF文件设置了密码,那么打开、编辑PDF文件就会受到限制。忘记了PDF密码该如何解密? PDF和office一样,可以对文件进行加密,但是没有提供恢复密码的功…