BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Google App Engine增加了Java支持:喜忧参半

| 作者 Scott Delap 关注 0 他的粉丝 ,译者 张龙 关注 14 他的粉丝 发布于 2009年4月18日. 估计阅读时间: 5 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

除了Python以外,Google App Engine(GAE)又增加了Java支持,这对Java生态圈相关的工具、框架及语言(像JRuby和Clojure)都产生了很大的影响。然而这么做的结果将对GAE Java应用造成很多限制,使其无法轻松扩展和集成这些应用。Google官方博客对此说到:

...我们想给开发者一些惊喜,但深知必须要将Google App Engine的简单性与Java平台的强大功能及灵活性结合起来,同时我们还想利用App Engine的基础设施,尽量去扩展这些内容,但又要保持与现有的Java标准和工具的兼容性。

我们就是这么做的。现在App Engine对标准(这些标准对Java工具起到了至关重要的作用)提供了支持(我们也从事着工具的开发——Google Plugin for Eclipse),它使用标准(如Java Servlet API、JDO、JPA、javax.cache及javax.mail)对当前的App Engine API进行了包装,同时还提供了足够强大的安全的沙箱,这样你的代码就可以安全地运行在Google Server上而又不会丧失灵活性...

CNet注意到GAE运行的是Java 6。但就像上面提到的,Java要想融入到GAE模型上还不是那么容易的事情,因为限制实在太多。GAE Java基于Java 2.4 Servlet API:

  • 一旦请求发送到客户端就无法进行进一步的处理了,包括数据流。
  • 请求在30秒内没有完成就会被终止,此时会抛出异常。如果没有捕获该异常,那么用户就会看到一个500错误。

再往上就是几个沙箱限制了:

  • 应用无法对文件系统进行写操作,必须要通过App Engine datastore才行。
  • 应用可能不会打开socket。
  • 应用无法创建自己的线程,也无法使用一些辅助工具,如计时器。

java.lang.System有如下限制:

  • exit()、gc()、runFinalization()及runFinalizersOnExit()什么都不做
  • 不允许进行JNI访问。

除此以外,还有其他一些限制,如JRE类加载的白名单等等。从文档来看,GAE通过自定义的类装载器对此作了很好的处理,然而应该让其他应用级的类装载器也可以处理上面这些限制,这是一个不足之处。

接下来的问题是上面这些限制能给GAE应用带来什么好处呢?首先就是可伸缩性。App Engine使用多个Web Server运行应用并能自动调整所使用的服务器数量。它可以将到来的请求路由到任意的服务器上,而该服务器很可能并不是处理该用户前一个请求的那个服务器。以下内容来自于文档:

...一个应用可以同时处理大约30个动态请求,这意味着平均的服务器请求处理时间为75毫秒的应用可以处理(1000 ms/second / 75 ms/request)*30=400 requests/second的请求量而不会出现延时。CPU处理密集的应用可能会在长时间的请求中出现延时,这是为了让其他应用可以共享同一个服务器。对静态文件的请求不会受到该限制的影响...

Google还提供了一个BigTable版的JPO和JPA以及Google Plugin for Eclipse,以此简化GAE的开发。

尽管还处在开发当中,但Google已经让为数不少的开发者试用GAE的Java支持了。Paul Hammant说到

...还要注意来自于同一客户端的多个并发请求也不一定会被同一个Servlet容器处理。即使来自于同一个域名(没有资源转发的情况出现),响应请求的Servlet容器实例也很可能是不同的。对于无状态应用来说这没什么问题,但对于那些利用session存储属性的应用来说就会出现并发问题了:向同一个资源写两次...

...Google已经实现了一个完善的沙箱。毋庸置疑,这会防止恶意代码的侵袭...而XStream是Java社区所推崇的一个工具,其最新版为1.3.1,但它却在GAE初始化时抛出异常。

其他一些工程师正在着手ClojureJRubyGroovy的支持开发工作,而ThoughtWorks的Ola Bini则在其博客上详述了GAE对动态语言的处理。

查看英文原文:Google Brings App Engine's Pros and Cons to Java

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

喜悦远大于忧虑 by Wu Alan

GAE的这些限制对于大多数对性能要求不高的应用来说都不成大问题

只是希望JAVA社区能保持一致,不要因为GOOGLE加入而引起兼容性问题。

Re: 喜悦远大于忧虑 by Heston Lee

自说自话, 如果你要用到这些,你就不会这么说了

翻译的水平真的无语了 by asdytadty asdt

Google已经实现了一个完善的沙箱。毋庸置疑,这会防止恶意代码的侵袭...XStream是Java社区所推崇的一个工具,其最新版为1.3.1,它会在GAE抛异常时进行初始化。
原文的意思是:
xstream运行在GAE上面,初始化时会抛异常。XStream is one that is particularly beloved of a section of the Java community. The latest version is 1.3.1 and on initialization anywhere within the realm of GAE is throws exceptions. These are security exceptions that cause the entire app to not function. Exceptions have a way of curtailing the fun of running code. In the case of XStream it is possible to fix it to be compatible with GAE (and all security constrained environments).

Re: 翻译的水平真的无语了 by 龙 张

你好,此文是我翻译的。对于你所说的原文这块我觉得本身语法就有些问题,拿捏了很久,如果翻译错误的话最主要的原因还在于对XStream不甚了解,不管怎样,谢谢你的指出。如有进一步的信息可以与我联系:zhanglong217@yahoo.com.cn

Re: 翻译的水平真的无语了 by li yazhou

xstream是thoughtworks公司的一个java转XML的一个工具,按照原文的意思应该是stream在GAE初始化的时候会出异常。

Re: 翻译的水平真的无语了 by 龙 张

ok,已经更新了,多谢指正!

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

6 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT