我从各种渠道获悉Java EE具有高度可扩展性,但对我来说,似乎永远无法将Java EE应用程序扩展到谷歌搜索引擎或任何其他大型网站的水平。
我想听听它为什么如此可扩展的技术原因。
答案 0 :(得分:24)
Java EE被认为是可扩展的,因为如果您考虑EJB体系结构并在适当的应用程序服务器上运行,它将包括透明地集群并允许使用EJB的多个实例来提供请求的工具。
如果您在普通的java中手动管理事物,则必须自己弄清楚所有这些,例如打开端口,同步状态等。
我不确定您是否可以将Google定义为“大型网站”。这就像将互联网比作办公室局域网一样。 Java EE并不意味着扩展到全球级别,这就是亚马逊和谷歌等网站使用自己的技术(例如,使用MapReduce)的原因。
有很多论文讨论了Java EE可扩展性的效率。 例如this
答案 1 :(得分:6)
使Java EE可扩展的原因是什么使任何可扩展:关注点的分离。随着您的处理或IO需求的增加,您可以添加新硬件并半透明地重新分配负载(对应用程序来说大部分都是透明的,对于配置猴子来说显然更少)因为分离的,孤立的问题不知道或不关心它们是否'重新使用相同的物理硬件或群集中的不同处理器。
您可以在任何语言或执行平台上制作可扩展的应用程序。 (是的,甚至是古老的System 370大型机上的COBOL。)像Java EE这样的应用程序框架(以及其他类似的Java EE在这方面并不是独一无二的!)让你能够轻松(相对来说)通过为你做很多繁重的工作来做到这一点。
当我的Web应用程序使用EJB来执行某些业务逻辑时,EJB可能位于同一CPU核心上,位于同一CPU中的不同核心上,完全位于不同的CPU上,或者在极端情况下,或许甚至遍布全球。我不知道,并且,在大多数情况下,提供的性能是存在的,我不在乎。类似地,当我在消息总线上发送消息以进行处理时,我不知道也不关心消息的去向,哪个组件进行处理以及处理发生的位置,只要性能属于我的范围内需要。这就是配置猴子能够解决的问题。该技术允许使用这些工具,并且随着系统规模的扩大,工具已经到位,以评估哪些部件必须去哪里以获得可接受的性能。
现在,当我尝试手动滚动所有这些时,我立即开始解决问题。如果我没有提前考虑所有的代理和调度和分发,当我的应用程序扩展超出单个机器的处理范围时,我现在有重大的重写,因为我将一些应用程序转移到另一个框。然后每当我的能力增长时,我必须一次又一次地这样做。
如果我事先考虑所有这些,我会为每个应用程序编写大量的样板代码,这些代码会对所有相同的事情进行微小的变化。我可以以可扩展的方式对事物进行编码,但我是否希望每次都这样做。该死的。时间。我写了一个应用程序?
因此,Java EE(和其他框架)带来的是预先编写的样板,以满足制作可伸缩应用程序的常见要求。当然,编写我的应用程序并不能保证它们具有可扩展性,但框架使得编写可扩展应用程序变得更加容易。
答案 2 :(得分:4)
从基础框架(如Java EE)提供的角度来看,可以看一个可扩展的架构。但那只是一个开始。
设计可扩展的基础架构是一种建筑艺术。这就像投影的艺术......当它被炸成真正大的时候它会如何表现。基本问题是:
... 这种事情超出了框架可以包装的范围。换句话说,该框架可以扩展,但产品连线太紧,无法扩展。
Java EE作为一个框架具有很强的可扩展性,就像大多数现代微处理器目标企业框架一样。但是我已经看到了令人惊讶的(不是很好的方式)甚至是最好的东西。
如需大量参考资料,请在Google上搜索“设计可扩展性”
答案 3 :(得分:1)
“可伸缩性”的事情谈到“当你的应用程序不再适合单个计算机时你会做什么?”。
可扩展的应用程序可以在更多计算机上增长。
请注意,大型服务器可能拥有大量内存和大量cpu的大型应用程序 - 请参阅http://www.sun.com/servers/highend/m9000/或http://www-03.ibm.com/systems/i/hardware/595/index.html - 但它通常比拥有大量小型服务器的应用程序传播更昂贵在他们身上。