从对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还有不少需要改进和提升的地方。
分布式应用较之集中式应用在对象的接口的设计和使用上也有了更高的要求,例如不要出现依靠参数引用传递来隐性的填充一些值、远程对象应是线程安全的、尽量不要出现频繁调用远程对象的现象、尽量减少往返传输大对象的现象等等细节。
分布式应用对比集中式应用而言,无论是开发还是支撑框架上都复杂了很多,因此尽管分布式应用相对集中式应用而言,能够带来机器配置要求降低、系统结构更加清晰和松耦合、降低维护的复杂度等等优点,但还是应该做到能不分布式就尽量不要分布式。本文首发于:http://www.blogjava.net/BlueDavy/archive/2008/05/04/198271.html