为什么Java应用不能扩展?

日期: 2012-06-06 作者:Cameron McKenzie翻译:蒋红冰 来源:TechTarget中国 英文

你是否正在寻找扩展Java应用的方法?但是我要告诉你一个不幸的消息:你的Java应用很可能不能扩展。Java应用的扩展能力不好。习惯它,是因为它很简单。   现在,我知道你在想什么了。

你认为这个简单的断言是错误的;毕竟,所有那些基于Servlet和JSP的应用,虽然是编写于10年前,但都可以毫无问题地在JAVA虚拟机(JVM)运行,并分散在水平和垂直扩展集群上。确实,这些应用的扩展性好一些。但是,当把较大的JAVA应用扩展到大量的处理器上,就会出现问题了。   Java扩展性问题   你是知道的,Java的扩展性问题不会露出它丑陋的一面,直到把它们移植到大的多处理器系统上。

Java的扩展性在两……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

你是否正在寻找扩展Java应用的方法?但是我要告诉你一个不幸的消息:你的Java应用很可能不能扩展。Java应用的扩展能力不好。习惯它,是因为它很简单。

  现在,我知道你在想什么了。你认为这个简单的断言是错误的;毕竟,所有那些基于Servlet和JSP的应用,虽然是编写于10年前,但都可以毫无问题地在JAVA虚拟机(JVM)运行,并分散在水平和垂直扩展集群上。确实,这些应用的扩展性好一些。但是,当把较大的JAVA应用扩展到大量的处理器上,就会出现问题了。

  Java扩展性问题

  你是知道的,Java的扩展性问题不会露出它丑陋的一面,直到把它们移植到大的多处理器系统上。Java的扩展性在两三个,或者是五六个处理器可以表现的很好,但一旦处理器超过个位数,那么Java的扩展性是不会呈线性增长的,如果扩展性不线性增长,那么它也就没有什么扩展了。

  如果我们有两处理在运行,那我们就希望程序能以像在一个处理器时的两倍速度运行。而8个处理器就应该是4个处理器的2倍,以此类推,呈线性增长。事实上,没有哪一个系统的扩展性能线性增长,但线性扩展一直都是我们的目标。不幸,Java应用并没有接近线性扩展,这就是为什么把其归咎于锁定了。

  对象对Java语言的基本构建块。对象包含数据,有时对象指向包含其它对象的数据。随着Java应用越来越复杂,越来越多的列表、数组支持对象和数据,而随着越来越多的列表、数组支持数据块,并间接地指向其他的数据部分,跟踪是谁,在哪里指向了什么,变得非常的困惑。

  为了维持表面秩序,当程序的一部分(我们称作方法A)需要访问量数据时,并发Java应用就会使用线程来锁定数据块。如果程序的另一部(方法B)也需要访问同一个数据块时,方法B会被拒绝,并等待方法A完成并解锁数据。

  在Java应用中抛出越多的处理器,这种冲撞的机率就越高,最后你就撞到点子上了,整个JVM陷入了管理、操纵解锁过程的泥沼中。最终达到的效果是,增加一个处理器就像在开发团队增加一个神秘人一样富有成效。

  “Java提供了线程和锁作为操作过程最早的并行程序模型。它很简单,很直接,但却是一个昂贵的模型。事实证明,在大的应用中进行实践,除非你到处都添加上锁,不然很难做出正确的编码。这样的结果就是你的程序不能进行扩展,因为所有线程都在竞争锁,尤其是没有一个可用的底层数据急用时,竞争会更激烈。” Cliff Click在早期的这一主题讨论上的如此说。“JVM使其向廉价廉价再廉价锁迈进了一大步,但最终也不会使成本消失的。”

  扩展Java也许并不是大问题

  Java应用扩展不必惊恐到如此程度。不必抛弃所有过去创建的Java应用,而用.NET完全代替。好消息是,很少有应用程序曾经打破进8或16处理器的机器上的成规。

  记住,问题往往发生在大量的处理竞争同一数据块时。当你有大量的小的,独立的,设备其全的,个体的应用要部署的多核,多处理器的服务器上时,你永远也体会不到这个关于扩展性的特殊问题。没有一个个体应用会把重要负载放在支持多于一个,甚至两个处理器的系统上,这也意味着死锁和数据冲突不可能会成为问题。

  对于大多数用户, Java应用程序实现线性扩展这个问题简直是微不足道的——就像是带到宴会上的东西或冷水机旁的东西,并不是需要的整个企业架构重新设计的问题。但是如果Java应用确实达到了线性扩展的底限,怎么做?这有Java扩展悖论的解决方案,在文章的第二部分有讨论。

翻译

蒋红冰
蒋红冰

TechTarget云计算主编,主要负责云计算和虚拟化网站的内容建设。长期专注于IT前沿技术,对云计算、虚拟化、人工智能、区块链等技术都有了解;对行业趋势、市场动态有一定的洞察。

相关推荐