为本书作序之时,我正在欧洲畅游,这多亏了欧洲完善的公共交通设施。作为一个美国人,我不禁被这里的基础设施所倾倒。无论在什么地方,只要我一下飞机,就可以方便地找到火车或巴士,享受快速、整洁、安全、准时的服务——或许,更重要的是:将我直接送到目的地。此外,离站和到站的通告用多种语言表示,各种标志和指示也易于理解,即使是我这样一个不懂当地语言的人,也没有感到丝毫的不便。
我生活、工作在Boston,和大多数美国人一样,我几乎完全靠自己的汽车辗转于各个场所。除了偶尔光顾一下Boston的地铁系统之外,我总是自己开车外出。因为公共交通设施有太多的限制,它很难将我送到目的地。数百万Boston居民以及其他地方的人们也都处于同样的困境,可见,我们的公路系统已经过时,远不能承受今天的交通量。我知道,如果仔细算一算自己一生中因为塞车而浪费的时间,一定会吓一跳。
有趣的是,网络计算系统(networked computing system)和交通系统之间有某些相似之处,其中最显著的一点是:二者的成功都离不开“可伸缩(scalable)”的基础设施。所谓可伸缩的交通系统,不只包括那些显而易见的设施,如火车和铁轨、飞机和机场,还需要有调度、路线选择、维修、检票、监控,而这一切还要能够随着物理上的交通系统的变化而伸缩、变化。类似地,网络计算不仅需要主机和网络——物理上的计算和通信基础设施——还需要软件上的调度、路由选择、分发、配置、转译、验证、授权和监控——只有这样,网络系统才能根据需要调节、变化。
说到基础设施,有这样一个具有讽刺意味的事实:建设好基础设施,这本身已经非常之难;但更难的是,只有让用户越感觉不到它的存在,人们才会认为它越成功。举个例子:瑞士境内的阿尔卑斯山脉地势崎岖,但是,为数不多的设计师、工程人员和建筑工人却凭借他们的技能,为无数的瑞士居民提供了有效的交通系统,从而给他们的日常生活带来了便利。事实上,这套系统如此可靠易用,以至于你很快将它的存在当成是理所当然之事,它因此变得对你透明了。譬如,当你踏上瑞士的铁路之旅时,你的心思只会放在该从哪一个地方到达另一个地方上,而不会关心是什么样的交通工具将你载到那儿。除非你是个游客,否则,你大概不会注意到你正在穿越一个历经数年设计、修建的隧道,也不会注意到火车正攀行在如此陡峭的斜坡上,更不会注意到铁路上还安装了齿轨,以帮助列车爬行。铁轨设施完美地承担了它的职能,所以,你甚至没有注意到它的存在。
本书针对网络计算系统,探讨了一种基础设施软件(infrastructure software),通常称为中间件(middleware)。之所以称为“中间件”,是因为它就像“沙漏的腰(waist in the hourglass)”,位于操作系统和网络之上、应用程序之下。中间件具有多种形态(shapes)、规模(sizes)和能力(capabilities):从J2EE应用服务器、异步消息处理系统、CORBA ORB,到小型嵌入式系统中的Socket监控软件。中间件必须支持日益繁多的应用程序、操作系统、网络协议、编程语言和数据格式。如果没有中间件,要想应对网络计算系统中日益增长的多样性(diversity)和异种性(heterogeneity),将十分麻烦,而且容易出错且代价昂贵。
中间件种类繁多,要解决的问题也各式各样,但在解决各种复杂难题时,不同类型的中间件往往采用相同的模式(patterns)和共同的抽象(abstractions)。例如,如果去窥探一个具有可伸缩性和灵活性的应用程序服务器、消息系统或CORBA ORB的内部,就会发现,它们采用了类似的技术来完成诸如连接管理、并发、同步、事件多路分离、事件处理程序分发、错误记录、监控等任务。如同瑞士铁路系统的用户数量远远大于设计和建造铁路的工程人员的数量那样,一套成功的中间件的用户数量也远远大于设计和构造中间件的开发人员的数量。如果要设计、构造或使用中间件,那么,只有熟悉、理解和运用这些常见模式和抽象,才会获得成功。
虽然很多人都知道,中间件必须具有可伸缩性和灵活性,但很少有人能够高效地提供这种中间件。然而,Doug Schmidt和Steve Huston在本书介绍的ADAPTIVE通信环境(ACE)中却做到了这一点。ACE是一套应用广泛的C++工具包,它汇集了很多常用的模式和抽象,这些模式和抽象在各种极为成功的中间件和网络程序中都有广泛的应用。ACE已经成为许多网络计算系统的基础:从实时的航空电子应用到CORBA ORB,以及对主机“端对端(peer-to-peer)”通信的支持。
和其他所有优秀的中间件一样,ACE也将异种环境下各式各样的复杂性隐藏在底层;和其他众多基础设施中间件不同的是:ACE能够在程序需要的任何地方提供最大的灵活性,但不会损及系统的性能或可伸缩性。作为一名长期从事中间件开发工作的设计师,我清楚地知道,要想在同一个软件包中兼顾性能和灵活性,难度该有多大!
但从某种意义上说,ACE在灵活性和性能上的优越表现没有出乎我的意料。和Doug的长期合作让我清楚地知道,他无愧于这个领域的先锋。当今各种具有可伸缩性、高性能和灵活性的中间件,都明显地留下了他的痕迹,并深受他的影响。Steve是一位天才的C++开发者和作家,他的工作使ACE多年来取得了长足进步。Doug和Steve联手,为所有设计、构造,甚至使用中间件的人奉献了一部“必读”之作。万维网(World Wide Web)和互联嵌入式系统(interconnected embedded systems)的日益普及,意味着网络计算系统的数量、规模和重要性将持续增长。只要理解了Doug和Steve在书中讲述的重要模式、技术、class(类)和经验教训,我们就有希望创建出完全透明、高效、可靠的中间件基础设施。
Steve Vinoski
总设计师兼副总裁,Platform Technologies
IONA Technologies
2001年9月






