Welcome 微信登录

首页 / 软件开发 / JAVA / Java应用从集中式步入分布式

Java应用从集中式步入分布式2011-06-10 BlogJava BlueDavy记得Martin大叔在《企业应用架构模式》中特别强调:“能够不分布式的应 用就不要分布式”,这句话没什么问题,尤其对于做过分布式应用的人而言,就 更会有深刻的体会了,但这个世界偏偏就没有那么简单,大多数人都会碰到分布 式应用的场景,尤其是对于大型应用而言,从集中式步入分布式是不可避免的, 只是也许是小型分布式的,也许是大型分布式的;也许是有高性能要求的,也许 是没有的,在这篇blog中我们来看看java应用从集中式步入分布式后到底会带来 些什么挑战。

blog按照应用从集中式演变为大型且高性能的应用的过程来叙述,这也是因 为这几类应用对于设计、开发人员的要求也是从低到高的。

Level 1:小型分布式应用

对于做习惯了集中式应用的同学而言,当碰到小型分布式应用场景时,最明 显的问题就是如何和远程的系统通讯,如何发消息给远程的系统,告诉它做什么 事情,并且得到事情处理的结果,对于java开发人员而言,更习惯的考虑方式也 许是如何去调用远程系统提供的接口,在集中式的应用中可以采用A a=new AImpl();这样的方式调用,但远程就没办法这么调用了。

在小型分布式应用中,最需要解决的就是上面所说的远程系统通讯以及远程 系统调用的问题了,为此就得学习相关的知识体系。

对于远程系统通讯而言,至少应该知道下TCP/IP、UDP/IP是个大概什么样的 概念,BIO/NIO是什么概念,另外就是需要知道下基于java如何去实现 tcp/ip+BIO(NIO)、udp/ip+BIO(NIO)的通讯,相应的会需要了解下Java序列化、 服务器端采用线程池方式处理等知识,在掌握了这些知识后,基本上做一个小型 的java远程通讯的应用不会有什么太大的问题。

对于通过远程系统调用就可实现的小型分布式应用而言,也许更为简单,可 以只掌握怎么用spring-remoting、axis或hessian这类的框架就可以了,直接就 可实现,当然,如果能了解下rmi、webservice是什么机制就更好了,另外,毕 竟远程调用很难做到完全和本地调用一样,尽管所有的远程调用框架都想做到完 全透明,但远程调用时仅仅异常就比本地调用会多出好几种来,例如网络异常、 超时异常等,因此在调用远程系统时,需要明确的了解这些异常的区分,当然, 或者可以认为都是同样的远程业务异常,但在追查错误时,则需要明确区分。

从上面这些知识点可以看出,应用即使是从集中式应用步入小型分布式应用 ,无论是对于开发、部署还是测试而言,都复杂了很多。

Level 2:高性能分布式应用

对于高性能分布式应用而言,要求就高很多了,因为要做到高性能,仅了解 怎么用是不够的,通讯和调用方面的技术都需要了解到底层的具体机制和实现。

对于远程通讯方式的分布式应用而言,需要了解BIO/NIO具体有什么不同,具 体机制是怎么样的,以及使用或参考目前主流的通讯框架,像mina、grizzly等 ,看看它们在做NIO实现时有什么高超的技巧,除了了解这些外,还需要掌握线 程池应如何配置;长连、短连什么概念,如何实现;连接怎么管理;序列化如何 优化等等。

对于远程调用的分布式应用而言,则在上面的基础上,还需要了解rmi、 webservice等的实现机制是怎么样的,另外就是spring-remoting、hessian、 axis的实现机制是怎么样的,有什么可改进的地方,在明确了可改进的地方后需 要自己选择相应的方案去实现。

从上面这些知识点可以看出,要写出高性能的分布式应用真的不是盖的,确 实挺困难的。