首页 > 基础设施 > 正文

JAVA应用扩展:Scala、Clojure和Groovy

2012-06-29 16:27:19  来源:TechTarget中国

摘要:对Web应用来说,扩展能力很重要,随着用户群和工作量的增加,处理器在增加,它应该能够进行扩展。对于Java应用来说,扩展更复杂,不只是简单的购买和安装20个新的处理器就可以的。
关键词: JAVA

    对Web应用来说,扩展能力很重要,随着用户群和工作量的增加,处理器在增加,它应该能够进行扩展。对于JAVA应用来说,扩展更复杂,不只是简单的购买和安装20个新的处理器就可以的。然而,JAVA平台能够也确实支持应用扩展,通过外围设备语言,例如Scala、Clojure和Groovy.利用JAVA编程语言,开发者很难使JAVA应用进行线性扩展。除去最初的那些处理器外,每当系统中新添加一个处理器后,你会发现它不能接近或等同于总体性能。这个问题在于,JAVA实现并发性的编写使用的是线程和锁,所以随着处理器数量的增多,JAVA程序会花费大量的时间在锁上,即使是没有底层数据争用问题。这是事实,随着使用的处理器的增多,开始扩展程序,就产生了不可避免的瓶颈。


    JAVA扩展悖论


    这是一个悖论。JAVA平台可以无限扩展,或者至少限制了一个现代机器能把多少个处理器塞进服务器里。你知道,扩展是最受JAVA程序语言本身的限制,但从整体来看这不是JAVA平台的局限性。事实上,当编写的程序能很好的利用底层JAVA平台时,线性扩展就不再是问题。我们都知道,现阶段编写的大多数WEB应用都能很好地利用JAVA平台的无限扩展性。你怎样看?嗯,现在的问题是使用除JAVA外的语言。


    外围编程语言来解救


    JAVA的扩展问题已经不再新鲜。事实上,为了处理这个问题已经做了很多工作,其中最成功的项目中有两种编程语言:Scala和Clojure.


    使用像映射和消息传递之类的概念,会让人想起旧的,高效的并行编程语言Erlang和Scala,它们正在寻找方法,以解决JAVA语言的问题线程和锁范式。此外,Scala 和Clojure都使用“不变的”方式管理状态数据。大家知道,使用JAVA应用可以改变对象容器的大量属性。正因为这些属性可以改变,所以访问这些属性就一定要锁定,这样数据才不会陷入矛盾状态。


    有Scala和Clojure在手,数据有了不变的趋势。因为不变,所以不会被更改;因为不会被更改,所以就没有必要永久锁定数据。与其改变或编辑对象属性,如果一定要做更改的话,与其编辑,不如创建一个拥有新属性的全新的,不变的对象,加上一个时间戳,和一个可以表明这个新数据块的实时快照的等价物。[page]
    “不是改变对象的状态,那么不变是什么意思?比如一个银行帐户记录,你是拷贝状态,而不是创建一个新银行帐户记录。如果你有一个collection对象需要修改,通过修正它你得到了一个新的collection对象,而旧的对象仍然在那里。”James Strachan说,他FuseSource资深会员和Groovy编程语言的发明者。


    有了高并发列表,你可以指出数列中的任一个特定阶段,而且你所指向的对象不会改变。它将永远是那个静态对象。但是未来的修改是有可能发生的,因为每当修改了对象,你就会得到一个较新版本的对象,有一个新的时间戳。你可以指向对象的任意版本,而且每一个版本都反映了列表那个时间的状态。Strachan把每一个对象比作是同一时间的一个快照。


    “当你照着这种方式做的话,关于锁的问题就消失了,” Strachan说。“现在不用锁,不用信号,没有行为者,也没有任何奇怪的人员,读的行为都可以永久保存collection对象。我们都应该向不变努力,因为这样就可以不必为读出加锁了,只需要给写入加锁就可以了。”


    通过把数据变成不变的,可能会给内存和数据管理带来压力,但却可以通过简单地给系统增加处理器来获得了巨大的,线性的性能。


    Scala、Clojure和Groovy的互操作性


    关于Scala、Clojure或Groovy的另外一件好事是,它们不仅能运行在JAVA平台下的JAVA虚拟机(JVM)上,也可以和一般的JAVA应用一起运行,甚至是和JAVA应用进行交互,与标准JAVA库链接,或者更甚者是允许程序编写JAVA可以访问的代码和库,这些都是源于Scala和Clojure源代码级别。其实,当前的标准JAVA应用所使用和访问的‘函数语言’都是由外围JVM语言编写的,并允许标准JAVA应用利用Scala和Groovy程序的好处,这时它最有意义。


    事实上,JAVA编程语言本身并没有享受到兆、多核系统的好处,虽然这些变得越来越实惠,但这也并不意味着JAVA平台没有能力提供你所需的程序和扩展性。如果大规模的扩展是你需要的,你可以一直利用像Scala和Clojure这样的外围JVM语言,而且它也不需要你一头扎进去,不管别的。通过编写Groovy或Clojure来使用函数语言或链接现有的库,允许你在这一领域慢慢地进行测试,从而发现从这些语言中获得的哪种性能可以发送到你的程序中。


第三十四届CIO班招生
国际CIO认证培训
首席数据官(CDO)认证培训
责编:zhangyexi

免责声明:本网站(http://www.ciotimes.com/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。
本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等)版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。