首页 > 其他分享 >谈tcp,http,socket,rpc,grpc

谈tcp,http,socket,rpc,grpc

时间:2024-03-25 19:12:01浏览次数:17  
标签:调用 http grpc RPC 接口 rpc tcp

谈tcp,http,socket,rpc,grpc

简介:计算机网络的五(七)层协议:物理层、数据链路层、网络层、传输层、(会话层、表示层)和应用层。

tcp:是传输层协议,主要解决数据如何在网络中传输。

http:是应用层协议,主要解决如何包装数据(文本信息),是建立在tcp协议之上的应用。tcp协议是以二进制数据流的形式解决传输层,但对上层的应用开发不友好,所以面向应用层的开发又产生了http协议。

socket:是针对TCP或UDP的具体接口实现,提供了在传输层进行网络编程的方法。

rpc:Remote Procedure Call)是远程过程调用,比如说现在有两台服务器A, B,一个在A服务器上的应用想要调用B服务器上的应用提供的某个,由于不在两个方法不在一个内存空间,不能直接调用,需要通过网络表达调用的语义和传达调用的数据。常存在于分布式系统中。

之前的攻略中,也有实践使用过 rpc 服务的案例。请参考:

微服务框架nameko + sanic简单使用

微服务是什么、为什么、测哪些、怎么测

http与rpc的区别与联系:

1、RPC跟HTTP不是对立面,RPC中可以使用HTTP作为通讯协议。RPC是一种设计、实现框架,通讯协议只是其中一部分。

2、RPC的本质是提供了一种轻量无感知的跨进程通信的方式,在分布式机器上调用其他方法与本地调用无异(远程调用的过程是透明的,你并不知道这个调用的方法是部署在哪里,通过PRC能够解耦服务)。RPC是根据语言的API来定义的,而不是基于网络的应用来定义的,调用更方便,协议私密更安全、内容更小效率更高。

3、http接口是在接口不多、系统与系统交互较少的情况下,解决信息孤岛初期常使用的一种通信手段;优点就是简单、直接、开发方便。利用现成的http协议 进行传输。但是如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先(基于TCP协议的情况下)就是长链接,不必每次通信都要像http 一样去3次握手什么的,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统 一化的操作。第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RPC框架是一个强力的支撑。

rpc的过程本质:

1、建立通信:在客户端与服务端建立起数据传输通道,大都是TCP连接(gRPC使用了HTTP2)。

2、寻址:A服务器上的应用需要告诉RPC框架:B服务器地址、端口,调用函数名称。所以必须实现待调用方法到call ID的映射。

3、序列化与反序列化:由于网络协议都是二进制的,所以调用方法的参数在进行传递时首先要序列化成二进制,B服务器收到请求后要再对参数进行反序列化。恢复为内存中的表达方式,找到对应的方法进行本地调用,得到返回值。返回值从B到A的传输仍要经过序列化与反序列化的过程。

名词小结
名词 特点

RPC:远程过程调用(分布式、微服务间的方法调用)
HTTP:无状态,每次请求都要发送一个request,服务器响应之后就断掉(http header中的keep-alive指的是tcp)
TCP:面向连接,三次握手保证通信可靠
UDP:非面向连接,不可靠,速度快(可以手动对数据收发进行验证,IM系统多采用,QQ)
socket:TCP协议的接口实现,面向传输层进行网络编程

RPC:远程过程调用(分布式、微服务间的方法调用)
HTTP:无状态,每次请求都要发送一个request,服务器响应之后就断掉(http header中的keep-alive指的是tcp)
TCP:面向连接,三次握手保证通信可靠
UDP:非面向连接,不可靠,速度快(可以手动对数据收发进行验证,IM系统多采用,QQ)
socket:TCP协议的接口实现,面向传输层进行网络编程

  


grpc:grpc是谷歌开源的一个 rpc 框架,面向移动和 http/2 设计。

1、内容交换格式采用ProtoBuf(Google Protocol Buffers),开源已久,提供了一种灵活、高效、自动序列化结构数据的机制,作用与XML,Json类似,但使用二进制,(反)序列化速度快,压缩效率高。

2、传输协议 采用http2,性能比http1.1好

3、和很多RPC系统一样,服务端负责实现定义好的接口并处理客户端的请求,客户端根据接口描述直接调用需要的服务。客户端和服务端可以分别使用gPRC支持的不同语言实现。

附:ProtoBuf 具有强大的IDL(interface description language,接口描述语言)和相关工具集(主要是protoc)。用户写好.proto描述文件后,protoc可以将其编译成众多语言的接口代码。

grpc的优势:

1、grpc是一个现代的开源高性能rpc框架,可以在任何环境下运行。

2、它可以高效地连接数据中心内和数据中心之间的服务,并支持负载平衡、跟踪、运行状况检查和身份验证。

3、它也适用于分布式计算的最后一英里,将设备、移动应用程序和浏览器连接到后端服务。

4、在微服务风格的架构中高效连接多语言服务,可以将移动设备、浏览器客户端连接到后端服务,支持10多种语言的客户端,高效简单的服务定义框架,基于http/2传输双向流,可插拔认证、跟踪、负载平衡和健康检查。
————————————————

五层架构
本质上五层架构并没有比上述架构有太大差别,只是进一步细化了。

用户界面层:即网页,用户能实实在在看得到的,能进行操作的界面;
控制层:控制用户界面层和业务逻辑层进行数据交互,
业务逻辑层:针对具体问题的操作,对业务逻辑的处理;
数据持久层:控制事务,直接操作数据库,对数据进行CRUD操作(即数据的增、删、改、查),即Hibernate或MyBatis负责与数据库的通信;
系统服务层:即提供公共的服务性功能,供各个操作层使用。

 


————————————————

三层架构
简介
三层架构是从整个业务应用角度对程序的划分,其分层逻辑来源于“高内聚低耦合”的思想。三层分别为:表现层,业务逻辑层,数据访问层(持久化层)。

内聚性:又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。
耦合性:也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。
各层解析
表现层:用户看到的界面,作用就是接收用户提交的请求数据,反馈程序的响应数据给用户。目的提供可交互的操作界面。
业务逻辑层:“具体问题,具体分析”。不同请求做出不同响应。对数据层的一中整合方式。
数据访问层:提供对数据库操作的多种途径。
三层特点
优点:
解耦。上层只依赖下一层,便于发现和修改BUG。
简化复杂问题:各层分工明确,将复杂问题简化了。
逻辑复用:业务接口没变,业务层和数据层能直接用。
便于开发:各层接口在开发前规定好,可以独立开发。
方便部署:将各层开发成组件,则可以独立部署。
缺点
降低系统性能。不采用分层结构,可以直接造访数据库,获取数据。现在必须通过中间层来完成。
导致级联的修改。在表现层增加一个功能,需要在业务和数据层都增加相应的代码。

————————————————

四层架构
四层架构有两种方式。

第一种形式: 

该架构比三层多了一个系统服务层:提供公共的服务性代码,供各个操作层使用。

 

第二种方式:

 


————————————————

标签:调用,http,grpc,RPC,接口,rpc,tcp
From: https://www.cnblogs.com/Leo_wl/p/18095101

相关文章

  • 在本地环境配置 https 证书(mac)
    在本地环境配置https证书在使用HTML5的API时,很多API只能在https保证安全的情况下才能开启。这就要求我们在本地开发环境也能够配置https,否则你需要每次部署到配有https的测试环境中才能看到预览效果,这对开发的敏捷度造成了极大的干扰。本文和WebApp的内容没有太......
  • SSL(安全套接层)和HTTPS、应用层协议S-HTTP、PGP
    SSL(安全套接层)和HTTPS安全套接层(SecureSocketLayer,SSL)SecureSocketLayer,SSL是Netscape于1994年开发的传输层协议,面向用于实现Web安全通信1999年,IETF基于SSL3.0版本,制定了传输层安全标准TLS(TransportLayerSecurity)SSL/TLS在Web安全通信中被称为HTTPS......
  • springBoot项目部署整合阿里云https证书报错
    springBoot项目部署整合阿里云https证书一直报错Keystore wastamperedwithor keystorepasswordwasincorrect  在百度没有找到原因,后来在B站上看到大佬说是这个原因,试了一下果然成功了,记录一下。原因是:阿里云的ssl配置yml的密码要用这个格式:key-store-password我配......
  • HTTP 响应状态码
    常见状态码100:部分请求已经被服务器接收,且仍未被拒绝,客户端应当继续发送请求的剩余部分,post请求时会发2次请求,第一次只把头部发送给服务端确认,服务器返回100时才继续把内容发送给服务端,这样做的目的时万一因为某些原因服务器需要拒绝请求(如没权限),白白发送那么多数据。101:切换......
  • Nginx 实战:Nginx HTTPS 实践
    在实践中配置Nginx以支持HTTPS,涉及以下几个关键步骤:步骤1:安装并启用SSL模块确保Nginx已安装,并且包含HTTPSSL模块(也称为ngx_http_ssl_module)。通常在编译安装Nginx时,可以通过添加--with-http_ssl_module选项来启用它。如果你使用的是预编译包,SSL模块可能已经被默认包含。......
  • HTTP请求报文
    看到请求报文时问自己什么请求方法GET访问了哪个页面/cms/show.php传递了哪些参数?id=33请求报文POST/cms/admin/login.action.phpHTTP/1.1Host:10.9.23.4#目标主机ipContent-Length:51#正文长度Cache-Control:max-age=0......
  • 基于 HttpRunner + Django + Vue + Element UI 的接口自动化测试平台,生产可用
    LunarLink平台简介基于HttpRunner+Django+Vue+ElementUI的接口自动化测试平台,生产可用。此外,非常感谢花菜。没有AnotherFasterRunner就不会有LunarLink......
  • Python编程异步爬虫——aiohttp的使用
    异步爬虫—aiohttp的使用基本介绍asyncio模块其内部实现了对TCP、UDP、SSL协议的异步操作,但是对于HTTP请求来说,就需要用aiohttp实现了。aiohttp是一个基于asyncio的异步HTTP网络模块,它既提供了服务端,又提供了客户端。requests发起的是同步网络请求,aiohttp则是异步。ai......
  • 解决主流办法没能HttpMediaTypeNotAcceptableException: No acceptable representatio
    问题描述:        写web项目时遇到一些小问题,前端请求后端死活报406错误问题,一些网络上主流的方法试过之后仍然无法解决问题。问题分析:        @RestController会在返回结果时直接返回对象,再由Spring将对象转为json,如果结果对象没有get方法,就会报以上错误......
  • 接口自动化项目落地之HTTPBin网站
    接口自动化项目落地之HTTPBin网站接口自动化项目落地系列找个开源网站或开源项目,用tep实现整套pytest接口自动化项目落地,归档到电子书,作为tep完整教程的项目篇一部分。自从tep完整教程发布以后,tep被越来越多小伙伴了解。教程只是纯理论,是骡子是马,拉出来遛遛才知道。做接口自动化......