技术开发 频道

构建可扩展的Java EE应用

【IT168  技术文档】对于一个具备使用价值的应用而言,其使用者有可能会在一段时间内疯狂的增长。随着越来越多的关键性质的应用在Java EE上运行,很多的Java开发者也开始关注可扩展性的问题了。但目前来说,大部分的web 2.0站点是基于script语言编写的,对于Java应用可扩展能力,很多人都抱着质疑的态度。在这篇文章中,Wang Yu基于他本身在实验室项目的经验来展示如何构建可扩展的java应用,同时,基于一些在可扩展性上做的比较失败的项目给读者带来构建可扩展java应用的实践、理论、算法、框架和经验。


我一直为一家互联网性质的实验室工作,这个实验室采用我们公司最新的大型服务器环境为合作伙伴的产品和解决方案免费做性能测试,我工作的部分就是帮助他们在强大的CMT和SMP服务器上进行性能调优。


这些年来,我已经为不同的解决方案测试了数十种java应用。许多的产品都是为了解决同样的领域问题,因此这些产品的功能基本都是类似的,但在可扩展性上表现的却非常不同,其中有些不能扩展到64 CPU的服务器上运行,但可以扩展到20台服务器做集群运行,有些则只能运行在不超过2 CPU的机器上。


造成这些差别的原因在于设计产品时的架构愿景,所有的具备良好扩展性的java应用从需求需求阶段、系统设计阶段以及实现阶段都为可扩展性做了考虑,所以,你所编写的java应用的可扩展能力完全取决于你的愿景。


可扩展性作为系统的属性之一,是个很难定义的名词,经常会与性能混淆。当然,可扩展性和性能是有关系的,它的目的是为了达到高性能。但是衡量可扩展性和性能的方法是不一样的,在这篇文章中,我们采用wikipedia中的定义:


可扩展性是系统、网络或进程的可选属性之一,它表达的含义是可以以一种优雅的方式来处理不断增长的工作,或者以一种很明白的方式进行扩充。例如:它可以用来表示系统具备随着资源(典型的有硬件)的增加提升吞吐量的能力。


垂直扩展的意思是给系统中的单节点增加资源,典型的是给机器增加CPU或内存,垂直扩展为操作系统和应用模块提供了更多可共用的资源,因此它使得虚拟化的技术(应该是指在一台机器上运行多个虚拟机)能够运行的更加有效。


水平扩展的意思是指给系统增加更多的节点,例如为一个分布式的软件系统增加新的机器,一个更清晰的例子是将一台web服务器增加为三台。随着计算机价格的不断降低以及性能的不断提升,以往需要依靠超级计算机来进行的高性能计算的应用(例如:地震分析、生物计算等)现在可以采用这种多个低成本的应用来完成。由上百台普通机器构成的集群可以达到传统的基于RISC处理器的科学计算机所具备的计算能力。

 

0
相关文章