Java领域中的分布式框架比较的多,分析一个已有的远程调用框架无论是对于打算采用已有成果还是自己做分布式框架,都是很必要的事情,JBoss Remoting是其中很好很强大的一个框架,在此来对JBoss Remoting进行深入的分析,看看JBoss Remoting是如何基于java.net提供的包去解决这些问题的,本文所分析的JBoss Remoting源码的版本为2.2.2_SP2,本来以为会是篇不怎么长的文档,没想到还没写的详细和深入的时候就已经有三十多页了,也不好在这里直接贴出来,就把文档目录和最后的总结部分贴在这了,感兴趣的同学们可以从这个地址下载PDF版本的文档:
http://www.riawork.org/opendoc/JBoss.Remoting.Opendoc.pdf
目录:
1 分布式应用概述
2 分析JBoss Remoting
2.1 Socket方式远程调用
2.2 多种调用方式的支持
2.3 远程加载class的支持
2.4 高并发下的稳定性
2.5 异常处理
2.6 提高性能
2.7 集群的支持
3 学到了什么
4 总结
总结
从对JBoss Remoting的分析中,分布式应用带来的需要深入学习的知识体系较之集中式的应用多了很多,最基础也最明显的涉及到的知识体系有:网络通讯(涉及到的有协议、网络I/O等)、java网络编程(java.net包、NIO等)、序列化机制、并发编程、池技术等,就这些知识点每个拓展开来讲都可以讲成大篇甚至一本书的范畴,对于大型分布式应用而言,涉及的知识体系就更多了,例如还需要掌握cluster环境下的处理(很多东西到了集群环境下复杂程度绝对是需要以翻倍来计算的,而且很多现在的处理方式都会变得不可用)、load balance策略等,本文也只是对JBoss Remoting的一些基本以及关键的特点进行了分析(最开始的时候打算叫深入分析JBoss Remoting的,不过写到最后发现其实还有很多细节和深入的部分并没有写,因此还是改名叫分析JBoss Remoting了),其中其实还有很多细节是值得研究和学习的,希望有研究的同仁们贡献出其他方面的研究或指出本文错误的地方,非常感谢。
大型的分布式应用中不可能要求每个开发人员都去掌握这些知识体系,因此对于大型分布式应用而言,提供一个分布式的框架是非常有必要的,做到将分布式应用涉及的相关知识点尽量的剥离,就像Erlang,做到将并发的基础知识分离。
JBoss Remoting解决了很多分布式应用所需面对的问题,是目前可选的开源分布式框架中一个很不错的选择,并且其在保证高并发场景下的稳定性和性能提升上也做了很多的工作,但还是有很多可提升的空间,例如统一的远程调用的API上(还可以进一步加强透明化的oneway、异步的调用)、NIO的支持、异步调用的提升(或者可以考虑提供结合MQ实现的异步调用)等等,而如果要成为大型分布式应用的支撑平台,无论是性能上还是功能上,JBoss Remoting还有不少需要改进和提升的地方。
分布式应用较之集中式应用在对象的接口的设计和使用上也有了更高的要求,例如不要出现依靠参数引用传递来隐性的填充一些值、远程对象应是线程安全的、尽量不要出现频繁调用远程对象的现象、尽量减少往返传输大对象的现象等等细节。
分布式应用对比集中式应用而言,无论是开发还是支撑框架上都复杂了很多,因此尽管分布式应用相对集中式应用而言,能够带来机器配置要求降低、系统结构更加清晰和松耦合、降低维护的复杂度等等优点,但还是应该做到能不分布式就尽量不要分布式。