最后更新:2021-12-09 17:37:12 手机定位技术交流文章
抱歉, wiidianyodu。 发件人: 微读 (ww.blog.com/) Panorama - 免费学习网站(com) 微读
一、RPC
1. RPC是什么
RPC(远程程序呼叫协议) -- -- 远程程序呼叫协议,即通过网络请求远程计算机程序提供服务的协议,而无需了解底层网络技术。 RPC协议意味着存在具体的传输协议,如TCP或UDP,以便在通信程序之间传递信息数据。 RPC横跨OSI网络通信模式的传输和应用层。
RPC 以客户端/服务器模式运作。 请求程序是一个客户端, 服务提供程序是一个服务器。 首先, 客户呼叫程序向服务流程发送呼叫信息, 包括进程参数, 然后等待响应 。 在服务器端, 程序会一直沉睡到呼叫到达 。 当信息呼叫到达时, 服务器会接收进程参数, 计算结果, 传输响应信息, 等待下一次呼叫 。 最后, 客户会引用此程序获取响应信息, 检索进程结果, 并引用执行程序 。
二,为什么是RPC?
事实上,这是对某一发展阶段的强有力的需求驱动应用。
第一,如果我们用简单的逻辑、很少的用户和极小的流量来构建一个小型的、单一的应用,我们不需要它。
二. 当我们的系统更容易进入并投入使用时,我们发现一个计算机再也不能操作这个系统了。 在这一点上,我们可以将操作分成许多不同的应用程序,并将它们放在各自的机器上,以界定逻辑和尽量减少压力。
三. 随着我们的业务日益投入运行,我们不可避免地会发现,有些职能再也不能轻易地分开或分开。 在这一点上,公共业务逻辑可能会被撤回并转换成独立的服务服务服务应用程序。 最初的应用程序和新的应用程序可以与这些独立的服务应用程序互动,以履行整个业务职能。
3人所描述的场景也是服务、微观服务和分布式系统结构的基本场景,RPC框架是实施这些结构的有力工具。
二. RPC背后的逻辑和基础
根据Nelson的研究,实现RPC的技术分为五个部分:
1. User
2. User-stub
3. RPCRuntime
4. Server-stub
5. Server
下图说明五个组成部分之间的联系。
当用户想要启动远程呼叫时, 它实际上会通过本地连接到用户按钮。 用户按钮负责编码通过商定的协议规格所使用的界面、 方法和参数, 并在本地 RPCRuntime 实例中提供远程示例。 远程 RPCRuntime 实例将传送到服务器按钮, 以便解码, 并进行本地呼叫, 并将呼叫结果提供给用户 。
如下图所示,粗略条状RPC完成了概念框架,我们在此进一步澄清它应当包括哪些组成部分。
RPC 服务提供方通过 RpcServer 暴露远程界面方法,而客户则通过 RpcCliet 引入远程界面方法。 客户将远程界面方法如本地方法称为远程界面方法, RPC 框架提供界面代理实现, 实际通话将委托代理 RpcProxy 。 Cannot 初始化 Evolution 的邮件组件 。
RPC 服务器 RpcAceptitor 接受客户电话, 并使用 Rpc 协议进行协议解码( 解码) 。 解码给 Rpc 程序处理器的呼叫信息, 以便管理呼叫程序, 然后委托 RpcInvolker 来实际执行并返回呼叫结果 。
1. RpcServer
负责出口(出口)远程接口
2. RpcClient
进口(进口)远程接口代理实施
3. RpcProxy
远程接口的代理实现
4. RpcInvoker
客户已实现:负责编码和向该处提交呼叫请求,并等待呼叫回复。
已达到的服务提供商:负责与服务终端接口联系,并返回呼叫结果
5. RpcProtocol
负责协议编/解码
6. RpcConnector
维持客户和服务连接,并将数据传送给服务提供者,是你们的责任。
7. RpcAcceptor
负责接受客户请求并提供此类请求的结果。
8. RpcProcessor
负责对呼叫程序进行服务一级的控制,包括接听集合管理、加班等。
9. RpcChannel
数据传输通道
三、在爪哇广泛使用的区域方案框架。
现已广泛使用下列区域方案框架:
一. Trift是一个用于构建可扩展的跨语言服务的软件框架,它将复杂的软件堆和代码生成器结合起来,在C++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Coco、JavaScript、Node.js、Smalltalk和OOCaml等地建立顺利一体化和高效的服务。
二. Dubbo是一个分布式服务框架和SOA治理应用程序,其能力包括高性能的NIO通信和多协议整合、动态位置和搜索服务路线、软负载平衡和容忍误差、依赖分析和降级,自2011年开始以来,AlibabaSOA服务生成治理举措的主要架构Dubbo被许多非Ariline公司所利用。
三. 春云:春云由多个次级项目组成,如 " 春云配置 " 、 " 春云网 " 、 " 春云领事 " 等,为配置分布式系统和微观服务提供通用工具,如配置管理、服务发现、断路器、智能路由器、微试剂、控制总线、一次性标志、全球锁、主选、分布式会话和集群状态,以及建设微型服务所需的所有解决方案。
四. RPC与信息队列之间的差异
1. 功能差异
RPC 和 Message 之间在结构上的区别在于 Message 有一个中间节点, 即信息队列, 它可以存储信件 。
消息的特点
一. 信息队列储存请求的压力并逐步释放,使处理器能够按自己的速度工作。
二. 消息队列添加了新的节点,而消息队列节点将对系统的可靠性产生影响。
三. 信件队列是一个单向信件。信件发送计划要完成,而不等待信件处理。
由于必须同步回报,使用信息队列已成为一项挑战。
RPC的特点
对于预期返回/治疗结果的情况,同步电话和RPC可用于极自然直觉(RPC也可以是麻醉)。
消费者( 客户) 在等待结果时会消耗线条 。 如果消费者( 客户) 线条消费在逐步 RPC 风格中被使用, 则消费线条消费可以最小化 。 但是, 保存像新闻这样的信息/ 要求是不可行的, 压力会直接交给服务提供人 。
2. 适用场合差异
一. 当预期结果会同步时,RPC是有用的。
第二,如果你想保持简单,RPC基于界面、使用基本方法和模拟当地电话功能而运作。逐步技术更难编程。
三. 当发件人(RPC 消费者、发件人)限于处理端的速度(RPC 处理器、信件接收器)时,不使用信件队列。
随着业务的扩大,一些端到端处理量成为瓶颈,并做了一些修改,以同步发送非同步信息。这样的改变将改变操作的使用方式。例如,在提交上一个操作页时,下一页将显示过程的结果;在收到更改的同步信息后,下一页将成为“已经提交并将于完成后通知操作”。
三. 排除定义
一. RPC 同步调用,使调用信息通过信息队列传送。如前一分析所示,发件人在占用中间点资源时等待发件人结束。这很困难,但没有互惠优势。
第二,这是可能的,因为空虚称为返回值,而在现实中,只要能保证处理结果得到处理,这一呼叫操作通常就不需要同步处理结果。 (RPC的技术保证返回的呼声完成,在使用电文时不能确保返回。 )我不知道我的意思。
三. 返回值是从使用信息模拟服务呼叫的空隙中打出的电话(服务呼叫直截了当,基于业务接口)。
五. RPC框架的主要技术特点
区域方案框架实现了几个关键技术目标:
(1)服务暴露:
远程提供方必须提供某种获取重要信息的服务,如服务界面描述、数据结构或中立服务定义文件,如Facebook的Trift IDL文件或Web Services的WSDL文件;服务打电话者必须通过远程服务获取相关信息。
大多数跨语言平台RPC框架现在都使用代码生成器来根据IDL定义建立根代码,而这一技术下的真正进口过程是在编译阶段通过代码生成器完成的。 Code生成是跨语言平台RPC框架的强制性选择,而同一语言平台的RPC则可以使用共同的界面定义进行。
最不寻常的 Java 呼叫之一是多州, 这意味着一个界面可以有许多州, 因此, 哪个远程呼叫会被调用? 此本地调用使用 jvm 的参考多州暗含值来进行 。 因此, 跨进程调用对 RPC 并不隐含。 如果前面的 DemoService 接口有两个认识, 则该接口必须导出带有具体标记的界面, 标明各种实现需求, 远程调用器也必须给相关的实现等级打上标记, 后者解决多州调制的语义问题 。
(2) 使用远程代理 :
呼叫者利用真正是本地远程服务代理的服务。 这是使用动态代理实现的。
在爪哇,至少有两种技术可用于动态代码生成,一种用于jdk动态剂,另一种用于字节代码生成。 动态剂比字节代码生成更容易使用,但动态剂的性能不如直接的字节代码生成,而直接的字节代码生成对代码可读性来说则要差得多。 总的来说,个人感到更有必要牺牲某些性能来获得代码可读性和维护。
(3)通信:
区域平台框架与具体协议无关,区域平台框架可以基于HTTP或TCP协议,网络服务是基于HTTP的RPC,跨平台,但表现不如基于TCP的RPC。
一. TCP/HTTP:众所周知,TCP是传输层协议,HTTP是应用层协议。由于传输层低于应用层,在数据传输方面速度更快,TCP必须比一般的HTTP更快。
二. 信息代号:虽然RPC应用程序基本上是一个可靠的答案流,类似于 HTTP,但与 HTTP 不同的是,TCP 协议会比HTTP 效率更高,因为我们在协议一级为每项信息定义了唯一的代号,使再利用连接更加简单。
3 IO模式:虽然典型的IO区块显然不足以实现高度的共同发展,但我们需要一个逐步的国际O,即NIO.Java为NIO提供解决办法,Java 7提供更好的NIO.2支助。
四. 多连接:当需要较长的连接时,首先考虑的是客户与服务器之间需要多少连接。实际上,单连接和多连接的使用没有差别,单连接几乎足以满足对较少数据传输的应用程序的需要。 单连接和多连接之间的最显著区别是,每个连接都有自己的私人拥有的发送和接收缓冲区,因此可以将大量数据分布在几个缓冲区,以提高吸收效率。
心跳 5: 连接由客户端创建并维护 。 如果阴蒂和服务器有直接联系, 通常不会中断连接( 当然, 物理连接失败除外 ) 。 如果阴蒂和服务器连接通过某些负载中转设备, 如果中间连接在一段时间内处于不活动状态, 则可能中断 。 要保持连接, 需要定期发送每个连接的心跳数据, 以便保持连接的不间断 。 心跳中的信息是 RPC 框架库中使用的内部信息, 在预排列头结构中有一个专用的心跳, 用于标记心跳信息, 并透明地用于操作 。
(4)序列化:
两者在传输和先后顺序方面都直接影响到卢旺达爱国者委员会的业绩。
归根结底,远程通信需要将对象转换成传输的二元流。 各种 RPC 框架应用有不同的情况,并使用不同的技术进行排序。 在排序方面, Java 提供了默认序列,但当它巨大时,它造成各种性能瓶颈,导致市场上大量巨大的排序框架,如Protobuf、Kryo、Hessian、Jackson等,可能取代Java的默认序列,从而导致更高效的性能。
二. 编码内容:就效率考虑而言,要编码的信息越少,越好(数据越少),要编码的规则越简单,(执行效率)就越好。
- 电话号码 - 1. 界面方法由界面名称和方法名称组成。 方法参数由参数类型和参数值组成。 3. 调用属性提供有关调用属性的信息,如附件秘密参数、调用时间等。 - 生成编码 - 1. 界面方法的返回值2被返回。 返回代码特殊返回代码3 除了这些强制调用外,我们可能需要某些元信息来简化程序解码和将来可能的扩展。 因此,我们的代码信息被分为两个部分, 一个元信息和其他需要调用的必要信息。 如果您创建 RPC 协议信息, 我们将其输入协议信息, 并在协议信息主体中输入必要的信息 。
- 信息信头 -- -- 魔法:协议魔法:为解码设计信息大小:协议头长:设计信息:扩展设计协议版本St:信息序列类型 hb:心跳信息标记,长连线传输层设计:单一信息标记,rp:回复信息标记,默认请求状态代码:保留回复信息状态代码:保留信息 id:信息
本文由 在线网速测试 整理编辑,转载请注明出处。