跨越边界 系列讨论非 Java™ 语言如何解决一些重要问题以及这些解决方案对当今的 Java 开发人员有什么意义。本文讨论延续(continuation),这是 Smalltalk 的 Seaside 这类框架背后的技术。延续服务器(continuation server)提供了一个有状态的编程模型,同时又没有舍弃无状态所固有的可伸缩性,从而使构建 Web 应用程序更加容易。
一般的 Web 开发有时候很有趣,但是通常却是令人烦恼的。Java Web 开发人员要花费很长时间来提供无状态模型,但是产生的性能和部署的简单性使得这种努力是值得的。在本文中,我将讨论一种完全不同的 Web 开发方式,称为延续服务器(continuation server)。延续服务器提供了一个有状态的编程模型,同时又没有舍弃无状态所固有的可伸缩性,从而使 Web 应用程序开发更加容易。 关于本系列
在 跨越边界 系列中,作者 Bruce Tate 提出这样一种观点,即通过学习其他方法和语言,当今的 Java 程序员可以更好地武装自己。由于 Java 技术已经成为所有开发项目最好的选择,所以编程方式已经发生了改变。其他框架影响着 Java 框架的构建方式,您从其他语言学到的概念也可以影响 Java 编程。您编写的 Python(或 Ruby、Smalltalk 等语言)代码可以改变编写 Java 代码的方式。
这个系列介绍与 Java 开发完全不同的编程概念和技术,但是这些概念和技术也可以直接应用于 Java 开发。在某些情况下,需要集成这些技术来利用它们。在其他情况下,可以直接应用概念。单独的工具并不重要,重要的是其他语言和框架可以影响 Java 社区中的开发人员、框架,甚至是基本方式。
Web 的出现
当 20 世纪 90 年代中期整个行业转向 Web 开发时,软件开发人员们欣喜若狂。与 “终端加主机” 模式相比,我们现在构建的客户机-服务器应用程序对用户更友好,但是也有几个问题困扰着我们:
性能往往很差。基于终端的开发中好的方面之一是,通信开销受到编程模型的约束。一旦这些约束消失了,我们就会缺乏构建简单分布式应用程序所需的带宽、工具或技能。
应用程序无法移植。大多数客户机-服务器开发环境要求使用专门的硬件和软件环境。
应用程序难以部署。必须单独地管理数千个客户机。
最大的开销是隐藏的。部署成了最重要的约束,因为进入生产阶段之后的开销大大增加了。
客户机-服务器计算仍然向前发展。公司常常是根据比较低的软件和硬件开销来做出财务决策,但是在进入生产阶段之后管理开销会大大增加。到了 1995 年,客户机-服务器模型需要进行重大的改进,而且这种改进确实出现了。
进入 Web 开发
Web 开发在 20 世纪 90 年代中期迅速发展起来。由于 Java 语言的出现,开发人员可以用新功能来构建分布式 Web 应用程序,同时解决了最严重的客户机-服务器问题。这些新功能包括:
受约束的通信。 请求/响应 Web 模型具有基于终端的开发的所有特征。用户在表单中进行输入、发出请求并获得响应。客户机和服务器之间的频繁通信受到了控制,性能得到了提高。
不共享任何东西的体系结构。 基于 servlet 的编程可以是无状态的。这意味着一个 servlet 可以为任何客户机服务,固定的 servlet 池可以为许多用户服务。不需要为每个用户保留一个 servlet。性能也因此得到了改进。
客户机上的共同标准。 通过在所有客户机上部署一个共同的浏览器,就可以构建一个界面并在所有客户机上产生一致的可视效果。支持多种浏览器客户机虽还有一定问题,但是不像支持本地用户界面库那样困难。许多可移植性问题消失了。
更好的部署模型。 通过将浏览器作为共同的客户机,软件分发大大简化了。公司可以将应用程序部署在少数几个互联网服务器上并在整个企业中共享它们。网络体系结构常常可以在多台服务器之间共享请求,所以要增加处理容量,只需增加服务器。客户端部署也很容易,只需确保客户机上有正确的浏览器。管理因此大大简化了。
性能、可伸缩性、可管理性和可移植性都大大提高了,互联网革命因此进入了快车道。但是,您必须面对一些重要的问题。