企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
>[info] 分布式通信的基础 分布式通信的基础还是来自于不同地方的服务器,即计算机与计算机之间的网络通信与它们之间的数据 传输。所采取的协议是什么? **通信协议**:TCP、UDP、WebSocket、HTTP ***** 为啥不用UDP和WebSocket? 数据可靠性与普遍性,目前HTTP可通过 Upgrade: websocket 头升级为 WebSocket协议 ***** **协议的支持还需要看下TCP/IP和OSI模型:** ![](https://img.kancloud.cn/02/9a/029aa5ba8469baa3a7f251fcaec4f230_582x365.png) >[info] 通信的方式 方式类型:消息队列、RPC、HTTP、Web Service * RPC RPC全称为remote procedure call,即远程过程调用。 ***** 借助RPC可以做到像本地调用一样调用远程服务,是一种进程间的通信方式 比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B 服务器上的应用提供的方法,由于两个应用不在一个内存空间,不能直接调用,所以需要通过网络来表 达调用的语义和传达调用的数据。 >[] 注:RPC并不是一个具体的技术,而是指整个网络远程调用过程。 **RPC架构组成:** ![](https://img.kancloud.cn/b0/a4/b0a45065cedbfa1383d1282537120415_680x418.png) 一个完整的RPC架构里面包含了四个核心的组件,分别是 `Client,Client Stub,Server以及Server Stub` ,这个Stub可以理解为存根。 * 客户端(Client),服务的调用方。 * 客户端存根(Client Stub),存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。 * 服务端(Server),真正的服务提供者。 * 服务端存根(Server Stub),接收客户端发送过来的消息,将消息解包,并调用本地的方法 **RPC的调用过程:** ![](https://img.kancloud.cn/aa/fc/aafc6c67441152650acdf940594d057b_634x452.png) 1. 客户端(client)以本地调用方式(即以接口的方式)调用服务 2. 客户端存根(client stub)接收到调用后,负责将方法、参数等组装成能够进行网络传输的消息体 (将消息体对象序列化为二进制); 3. 客户端通过sockets将消息发送到服务端; 4. 服务端存根( server stub)收到消息后进行解码(将消息对象反序列化); 5. 服务端存根( server stub)根据解码结果调用本地的服务; 6. 本地服务执行并将结果返回给服务端存根( server stub); 7. 服务端存根( server stub)将返回结果打包成消息(将结果消息对象序列化); 8. 服务端(server)通过sockets将消息发送到客户端; 9. 客户端存根(client stub)接收到结果消息,并进行解码(将结果消息发序列化); 10. 客户端(client)得到最终结果 ***** RPC的 **核心模块就是通讯和序列化**,常见RPC的组件:GRPC、Swoft、TARS-PHP等 ***** **RPC和HTTP的优缺点:** ![](https://img.kancloud.cn/d4/9a/d49ab36294c42e0e3a80c42455696daa_605x532.png) * RPC主要用于公司内部的服务调用,性能消耗低,传输效率高,服务质量方便。 * http主要用于对外的异构环境,浏览器接口调用,app接口调用,第三方接口调用等。