2023年7月15日发(作者:)
HTTP,TCP,socket,RPC与gRPC都是啥?TCP/HTTP与socket⾸先回顾下计算机⽹络的五(七)层协议:物理层、数据链路层、⽹络层、传输层、(会话层、表⽰层)和应⽤层。那么从协议上来讲:TCP是传输层协议,主要解决数据如何在⽹络中传输HTTP 是应⽤层协议,主要解决如何包装数据(⽂本信息),是建⽴在tcp协议之上的应⽤。TCP协议是以⼆进制数据流的形式解决传输层的事⼉,但对上层的应⽤开发极不友好,所以⾯向应⽤层的开发⼜产⽣了HTTP协议。⽽socket 是针对TCP或UDP的具体接⼝实现,提供了在传输层进⾏⽹络编程的⽅法。以上内容我们应该都听说的⽐较多了,下⾯主要来谈⼀谈RPC。什么是RPC?RPC(Remote Procedure Call)是远程过程调⽤,⽐如说现在有两台服务器A, B,⼀个在A服务器上的应⽤想要调⽤B服务器上的应⽤提供的某个,由于不在两个⽅法不在⼀个内存空间,不能直接调⽤,需要通过⽹络表达调⽤的语义和传达调⽤的数据。常存在于分布式系统中。为何有http协议之后,还要RPC调⽤?RPC跟HTTP不是对⽴⾯,RPC中可以使⽤HTTP作为通讯协议。RPC是⼀种设计、实现框架,通讯协议只是其中⼀部分。RPC的本质是提供了⼀种轻量⽆感知的跨进程通信的⽅式,在分布式机器上调⽤其他⽅法与本地调⽤⽆异(远程调⽤的过程是透明的,你并不知道这个调⽤的⽅法是部署在哪⾥,通过PRC能够解耦服务)。RPC是根据语⾔的API来定义的,⽽不是基于⽹络的应⽤来定义的,调⽤更⽅便,协议私密更安全、内容更⼩效率更⾼。http接⼝是在接⼝不多、系统与系统交互较少的情况下,解决信息孤岛初期常使⽤的⼀种通信⼿段;优点就是简单、直接、开发⽅便。利⽤现成的http协议 进⾏传输。但是如果是⼀个⼤型的⽹站,内部⼦系统较多、接⼝⾮常多的情况下,RPC框架的好处就显⽰出来了,⾸先(基于TCP协议的情况下)就是长链接,不必每次通信都要像http ⼀样去3次握⼿什么的,减少了⽹络开销;其次就是RPC框架⼀般都有注册中⼼,有丰富的监控管理;发布、下线接⼝、动态扩展等,对调⽤⽅来说是⽆感知、统 ⼀化的操作。第三个来说就是安全性。最后就是最近流⾏的服务化架构、服务化治理,RPC框架是⼀个强⼒的⽀撑。RPC 中要解决的问题:建⽴通信:在客户端与服务端建⽴起数据传输通道,⼤都是TCP连接(gRPC使⽤了HTTP2)。寻址:A服务器上的应⽤需要告诉RPC框架:B服务器地址、端⼝,调⽤函数名称。所以必须实现待调⽤⽅法到call ID的映射。序列化与反序列化:由于⽹络协议都是⼆进制的,所以调⽤⽅法的参数在进⾏传递时⾸先要序列化成⼆进制,B服务器收到请求后要再对参数进⾏反序列化。恢复为内存中的表达⽅式,找到对应的⽅法进⾏本地调⽤,得到返回值。返回值从B到A的传输仍要经过序列化与反序列化的过程。常见名词⼩结名词RPCHTTPTCPUDPsocket远程过程调⽤(分布式、微服务间的⽅法调⽤)特点⽆状态,每次请求都要发送⼀个request,服务器响应之后就断掉(http header中的keep-alive指的是tcp)⾯向连接,三次握⼿保证通信可靠⾮⾯向连接,不可靠,速度快(可以⼿动对数据收发进⾏验证,IM系统多采⽤,QQ)TCP协议的接⼝实现,⾯向传输层进⾏⽹络编程单独来谈⼀谈gRPCgRPC是⾕歌开源的⼀个 RPC 框架,⾯向移动和 HTTP/2 设计。内容交换格式采⽤ProtoBuf(Google Protocol Buffers),开源已久,提供了⼀种灵活、⾼效、⾃动序列化结构数据的机制,作⽤与XML,Json类似,但使⽤⼆进制,(反)序列化速度快,压缩效率⾼。传输协议 采⽤http2,性能⽐http1.1好了很多和很多RPC系统⼀样,服务端负责实现定义好的接⼝并处理客户端的请求,客户端根据接⼝描述直接调⽤需要的服务。客户端和服务端可以分别使⽤gPRC⽀持的不同语⾔实现。ProtoBuf 具有强⼤的IDL(interface description language,接⼝描述语⾔)和相关⼯具集(主要是protoc)。⽤户写好.proto描述⽂件后,protoc可以将其编译成众多语⾔的接⼝代码。补充:HTTP/2介绍新特性:新的⼆进制格式HTTP1.X都是基于⽂本解析,⽽因为⽂本表现形式的多样性,基于⽂本协议的格式解析天然存在健壮性问题。⽽采⽤⼆进制格式后实现⽅便且健壮。多路复⽤多个request共享⼀个连接。header压缩在HTTP1.x中header信息很多,且每次都会重复发送,造成很⼤浪费。HTTP2.0使⽤encoder减少了传输的header⼤⼩,且通信双⽅都缓存⼀份包含了header信息的表,此后的请求可以只发送差异数据,避免信息的重复传输,进⼀步减少需要传输的内容⼤⼩。服务端推送主要的思想是:当⼀个客户端请求资源X,⽽服务器知道它很可能也需要资源Z的情况下,服务器可以在客户端发送请求前,主动将资源Z推送给客户端。这个功能帮助客户端将Z放进缓存以备将来之需。也遵守同源策略,且客户端可以拒绝推送过来的资源。推荐阅读:既然有http 请求,为什么还要⽤rpc调⽤?HTTP,HTTP2.0,SPDY,HTTPS你应该知道的⼀些事HTTP/2协议–特性扫盲篇HTTP/2.0相⽐1.0有哪些重⼤改进
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689407176a243042.html
评论列表(0条)