谈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。
简化复杂问题:各层分工明确,将复杂问题简化了。
逻辑复用:业务接口没变,业务层和数据层能直接用。
便于开发:各层接口在开发前规定好,可以独立开发。
方便部署:将各层开发成组件,则可以独立部署。
缺点
降低系统性能。不采用分层结构,可以直接造访数据库,获取数据。现在必须通过中间层来完成。
导致级联的修改。在表现层增加一个功能,需要在业务和数据层都增加相应的代码。
————————————————
四层架构
四层架构有两种方式。
第一种形式:
该架构比三层多了一个系统服务层:提供公共的服务性代码,供各个操作层使用。
第二种方式:
————————————————