dubbo核心技术原理:RPC调用协议
来源:互联网 发布:python 向量化编程 编辑:程序博客网 时间:2024/06/08 00:06
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。
下面我们罗列一下RPC解决方案,当然还有其他的实现方式。
Java原生的 RMI。
Hessian
WebServices
Restful
HTTP Request
RTMP/AMF
淘宝的 HSF、Dubbo
RMI,这个 Java 原生的东东似乎从一开始就没有被人们所看好,究其原因是速度太慢。但是它的好处是Java原生,使用 RMI 不需要引入其它任何第三方软件包,不过挑剔的同学们似乎不太看好这个优点。百度百科 RMI(Remote Method Invocation,远程方法调用)是用Java在JDK1.2中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
WebService,一个老牌技术解决方案。在我印象中 WebServices 是跟随着 SOA 这个东西一起出名的,他有一个最大的好处是防火墙穿透。毕竟人家是靠 80 端口吃饭的,牛叉的很。
不过话说回来WebServices的最大要害就是,Xml传输格式。把一个对象序列化成为一个Xml数据是一件很容易的事,但是反序列化成本似乎是很高。再加上 SOAP 协议本身是建立在 XML 形式上,这就使得 Web Service 奇慢无比了。当然因素还有很多我就不多说了。
Restful,其实 restful 我更觉得它是一种 API 表述规范。但在社区论坛中讨论看来,restful 的应用似乎也延伸到远程服务的领域。所以有必要说明一下。restful 最初是出现在 web 上,究其本质是还是 HTTP。例如对于:“http://xxxxx/xxxx”这个资源的访问可以利用 HTTP 的“GET、PUT、DELETE”等方法对资源操作加以描述说明。我个人觉得这东西用在 RPC 上并不合适。
RTMP/AMF,这个组合的确是一套很完善的远程调用解决方案。RTMP协议中专门为 Invoke 开辟了一条通道,在配合 AMF 格式极大的方便了 Flash 下远程服务访问。不过这些都是 Flash下的东西,即使是拥有 Red5 这样的神器让我们在 java 下可以使用 rtmp 但是究其目的还是为了和 flash 通信。一般 flash 调用业务系统的方式还都停留在 http 请求或者通过 red5 服务器代为转发。
HSF,这个东西是淘宝内部用的很广泛的远程服务框架。它是使用NIO、Mina 并且工作在长连接模式下。话说这个东西的确是个好东西,淘宝也将其开源了!只可惜,开源了 hsf 但是相关配套依赖没有开源。
在加上 hsf 依赖繁杂。这个东西也就只能让局外人膜拜一下,在淘系之外的同学们是无福享受了。
Dubbo 也是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度来看,Dubbo采用的是一种非常简单的模型,要么是提供方提供服务,要么是消费方消费服务,所以基于这一点可以抽象出服务提供方(Provider)和服务消费方(Consumer)两个角色。关于注册中心、协议支持、服务监控等内容。它比较 HSF 来说要轻巧很多,依赖会少一些。
最后说明一下,真正实现分布式服务调用的也就只有“HSF、Dubbo”,貌似当当就是使用的Dubbo 然后自己修改了一下变成了DubboX,其他互联网公司,比如百度 腾讯 京东 就不是很清楚了。还有一点就是如果你想脱离 Spring 的话 HSF、Dubbo 会让你失望的,因为基本上所有的配置都是基于Spring。
上面提到了很多可用的技术方案,想必最后符合要求也就只有其中 HSF 和 Dubbo 了。为什么其它的方案都不入选呢?原因就是它们虽然可以完成 RPC 但是并不支持分布式。当然您可以通过架设集群来提高它们的可靠性,这些都是您需要额外付出的。
更加具体的呢
会在今晚8:30
腾讯课堂
动脑学院的
Java高级免费试听中
由我们的Tony老师来给大家
详细的进行解说
《dubbo核心技术原理:RPC调用协议》
不容错过的精彩内容
而你只需在今晚8:30
点击最下方
阅读原文
即可观看
推荐阅读
▼
高并发与分布式系统的基石--数据库读写分离实战
这就是学编程的下场...
论程序员与产品经理是怎么互掐起来的
如何假装成为一名好的程序员
来自部落的邀请
Java框架 Spring 核心机制
至程序员的情书
Java高级部落送你ofo小黄车60天免费骑行,还不来?
Facebook研发的Cassandra你用过吗?
给 Java开发者的10个大数据工具和框架
推荐程序员必备微信号
▼
- dubbo核心技术原理:RPC调用协议
- dubbo核心技术原理:RPC调用协议
- Dubbo RPC原理解读
- 基于RPC原理的dubbo
- dubbo rpc 调用过程解析
- Dubbo的RPC调用过程
- Dubbo 简单RPC调用示例
- RPC远程调用原理
- RPC 远程调用 原理
- RPC 远程调用原理
- dubbo调用 RPC异常 IllegalStateException异常 解决方案
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- Dubbo实现RPC调用使用入门
- RPC:远程过程调用协议
- RPC:远程过程调用协议
- 第七周 项目3
- Android模拟器Genymotion安装使用教程详解
- iOS开发之Debug之"Missing Marketing Icon"
- 随机数相关
- CNN-通俗理解卷积神经网络
- dubbo核心技术原理:RPC调用协议
- Jmeter测试http实践讲解
- Android 基础技能必备梳理
- 【工程化知识点】浅谈持续集成与灰度发布
- 第五周项目一
- OpenVPN初始安装在D盘,卸载重装后装在C盘,安装完成后运行的时候却提示启动 OpenVPN GUI 时失败,提示“CreateProcess Failed, exe
- 数组去重的几种方法,从数组中选择出互不重复的5个数
- 第5周项目 项目1
- 用Python学《微积分B》(微分方程)