Java分布式开发中的RPC

来源:互联网 发布:深圳市飞扬空间网络 编辑:程序博客网 时间:2024/05/17 03:47

最近在努力学关于Java分布式开发的内容,推荐大家一本书,陈康贤的《大型分布式网站架构设计与实践》,文后有资源链接。

RPC,远程过程调用,是实现分布式计算的基础。

它有两种实现方式:

1.基于TCP协议的RPC;

2.基于HTTP协议的RPC;

其中涉及到的关键技术是对象的序列化和反序列化,一个简单的RPC过程包括一个服务消费者和服务提供者,服务消费者需要使用服务提供者的提供的服务,就需要传给服务提供方相关的信息,这些信息包括服务名称(实际上是一个接口),方法名称,方法的参数类型,参数个数等参数列表信息以及对应的参数,服务提供者根据这些信息返回处理结果给服务消费者,一次RPC完成。

两种实现方式的对比:

1.基于TCP协议实现的RPC,由于处于协议栈的下层,能够更灵活地对协议字段进行定制,减少网络传输字节数,降低网络开销,提高性能,实现更大吞吐量和并发数。但是需要更多地关注底层复杂的细节,实现的代价更高,且由于所定义协议自身的局限性,难以得到平台厂商和开源社区的支持,较难实现跨平台调用。


2.而基于HTTP协议的RPC实现来说,很多成熟开源Web容器已经帮我们处理好了这些事情,如Tomcat、Jboss、Apache等,开发人员可以将更多的精力集中在业务的实现上,而非处理底层细节,当然,基于HTTP协议的实现也有其劣势的一面。由于是上层协议,发送包含同等内容的信息,使用HTTP协议传输所占用的字节数肯定要比使用TCP协议所占用的字节数更多。因此,同等网络环境下,通过HTTP协议传输相同的内容,效率会比基于TCP协议的数据传输要低,信息传输的时间也较长。


当然,通过优化代码和使用gzip数据压缩,能够缩小这一差距。


权衡利弊,结合实际环境中其性能对于用户体验的影响来看,基于HTTP协议的RPC还是有很大优势的。

百度网盘:http://pan.baidu.com/s/1slRlgL3

1 0