当我们要开发分布式系统的时候,必须要面对非常多,且麻烦的问题。各功能模块之间的沟通问题是首要的让人头痛不已的必须解决的难题。
我们说,功能模块之间的沟通必须依靠计算机网络,那么在模块里是不是就要嵌入解决网络通讯的代码?是的!好,处理网络通讯的代码写好之后,一个更加棘手的问题(事务一致性)让我们无法回避!因为J2EE的EJB规范里有实体bean,该bean是直接跟数据库打交道的,分布于网络上的各模块共享一数据库时,尚失事务一致性会彻底打乱整个系统工作的协调一致。处理事务一致性的代码编写是困难的,但又不得不耗费极大精力去完成。事务一致性是分布式系统正常准确运作的必要条件。
假如我们又在各模块里加入了事务一致功能代码,那分布系统可以工作了吗?还远远不够的。资源节省问题也相当突出。访问分布式系统的客户数量是未知的,可能现在是10个客户,呆会就有100个,提供服务的bean也会相应增多。然而计算机的内存容量是有限的,为了解决这个问题,采用操作系统存储器治理的思想是个好的办法。我们把当前不在服务的bean转移到硬盘上,腾出内存的空间,当客户需要该bean服务的时候再从硬盘回写内存,以次来节省资源。所以,我们又要在bean类里写入完成相应控制代码。
是不是觉得分布式的编程好麻烦,其实,我们还要考虑运行于网络上的系统安全性,保密性等等,还没等我们实现任何实际逻辑代码,整个系统已经充斥着眼花撩乱的代码,而且还可能有很多错误。不得不感叹
开发分布式系统的艰难。
这一切烦恼随着应用服务器(weblogic,websphere,jboss等)的来临而全部消失。应用服务器完全支持EJB规范,并且提供了EJB容器,让bean实列呆在里面。而自己一力与承担了外界(网络上)的所有沟通协调的工作,履行着网络连接,事务一致,访问安全的保证,以及自身系统资源的监视控制。不在需要我们操心,而只需要关注实际逻辑功能的实现,大大加快了开发分布式系统的速度!比如我们写了一个bean类,应用服务器通过读部署文件,自动控制bean的生命周期,以及其他状态属性。无须开发者操心。应用服务器是支撑整个J2EE运作的核心软件。
应用服务器功能如此之强大,以至于它的开发是如此之复杂。对bean实列的调度算法,事务控制,安全和访问权限的监控都需要应用服务器来实现。仔细想想,应用服务器几乎就像一个小型网络操作系统。