您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    如何设计一个 RPC 系统(3)
    时间:2018-09-18 12:11 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    在互联网时代,顺序需求经过互联网来相互调用。而互联网上最盛行的协议是HTTP协议和WWW效劳,因此运用HTTP协议的Web Service就顺理成章的成为跨系统调用的最盛行方案。由于可以运用大少数互联网的基础设备,所以Web Service的开发和完成简直是毫无难度的。普通来说,它都会运用URL来定位远程对象,而参数则经过一系列预定义的类型(主要是C言语基础类型),以及对象序列化方式来传递。接口生成方面,你可以本人直接对HTTP做解析,也可以运用诸如WSDL或许SOAP这样的标准。在REST的方案中,则限定了只要PUT/GET/DELETE/POST四种操作函数,其他都是参数。

    如何设计一个 RPC 系统

    总结一下下面的这些RPC方案,我们发现,针对远程调用的三个中心成绩,普通业界有以下几个选择:

    远程对象定位:运用URL;或许运用名字效劳来查找

    远程调用参数传递:运用C的基本类型定义;或许运用某种预订的序列化(反序列化)方案

    接口定义:运用某种特定格式的技术,直接按预先商定一种接口定义文件;或许运用某种描画协议IDL来生成这些接口文件

    通讯承载:有运用特定TCP/UDP之类的效劳器,也有可以让用户本人开发定制的通讯模型;还有运用HTTP或许音讯队列这一类愈加初级的传输协议

    方案选型

    在我们确定了远程调用系统方案几个可行选择后,自然就要明白一下各个方案的优缺陷,这样才能选择真正适宜需求的设计:

    关于远程对象的描画:运用URL是互联网通行的标准,比较方便用户了解,也容易添加日后需求扩展到内容,由于URL本身是一个由多个部分组合的字符串;而名字效劳则老式一些,但是依然有他的益处,就是名字效劳可以附带负载平衡、容灾扩容、自定义路由等一系列特性,关于需求复杂的定位比较容易完成。

    远程调用的接口描画:假设只限制于某个言语、操作系统、平台上,直接应用“隐喻”方式的接口描画,或许以“注解”类型注释手腕来标注源代码,完成远程调用接口的定义,是最方便不过的。但是,假设需求兼容编译型言语,如C/C++,就一定要用某种IDL来生成这些编译言语的源代码了。

    通讯承载:给用户本人定制通讯模块,能提供最好的适用性,但是也让用户添加了运用的复杂水平。而HTTP/音讯队列这种承载方式,在系统的部署、运维、编程上都会比较复杂,缺陷就是关于功用、传输特性的定制空间就比较小。

    剖析完中心成绩,我们还需求思索一些适用性场景:

    面向对象还是面向进程:假设我们只是思索做面向进程的远程调用,只需求定位到“函数”即可。而假设是面向对象的,则需求定位到“对象”。由于函数是有形状的,所以其定位进程可以复杂到一个名字即可,而对象则需求静态的查找到其ID或句柄。

    跨言语还是单一言语:单一言语的方案中,头文件或接口定义完全用一种言语处置即可,假设是跨言语的,就少不免要IDL

    混合式通讯承载还是运用HTTP效劳器承载:混合式承载能够可以用到TCP/UDP/共享内存等底层技术,可以提供最优的功用,但是运用起来必然十分费事。运用HTTP效劳器的话,则十分复杂,由于WWW效劳的开源软件、库众多,而且客户端运用阅读器或许一些JS页面即可调试,缺陷是其功用较低。

    假定我们如今要为某种业务逻辑十分多变的范围,如企业业务运用范围,或游戏效劳器端范围,去设计一个远程调用系统,我们能够应该如下选择:

    运用名字效劳定位远程对象:由于企业效劳是需求高可用性的,运用名字效劳能在查询名字时辨认和选择可用性效劳对象。J2EE方案中的EJB(企业JavaBean)就是用名字效劳的。

    运用IDL来生成接口定义:由于企业效劳或游戏效劳,其开发言语能够不是一致的,又或许需求高功用的编程言语如C/C++,所以只能运用IDL。

    运用混合式通讯承载:虽然企业效劳看起来无需在很复杂的网络下运转,但是不同的企业的网络环境又能够是千差万别的,所以要做一个通用的系统,最好还是不怕费事提供混合式的通讯承载,这样可以在TCP/UDP等各种协议中选择。

    【编辑引荐】

    并行的RPC框架

    XML-RPC 的 Apache 完成

    聊聊Python用rpc完成散布式系统调用的那些事

    经过Redis完成RPC远程办法调用

    腾讯开源微效劳架构Tars,高功用RPC开发框架

    (责任编辑:admin)