FinOps有望降低企业50%+的云成本! 了解详情
写点什么

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

  • 2009-04-17
  • 本文字数:1502 字

    阅读完需:约 5 分钟

除了 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 初始化时抛出异常。

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

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

2009-04-17 00:024439
用户头像

发布了 88 篇内容, 共 254.2 次阅读, 收获喜欢 6 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试 | Web控件的交互进阶

测吧(北京)科技有限公司

测试

软件测试 | 文件上传与弹窗处理

测吧(北京)科技有限公司

测试

关于我在学习LFU的时候,在开源项目捡了个漏这件事

why技术

Java 面试 算法

React-Hooks源码深度解读

goClient1992

React

喜讯:行云绽放荣获国家高新技术企业证书

行云管家

高新企业 高新技术 高新

ChatGPT类AI软件供应链的安全及合规风险

墨菲安全

代码安全检测 墨菲安全 软件供应链安全 ChatGPT

深度使用国产Bg-Tinkle数据库客户端—太赞了,居然还集成chatGPT AI生成SQL

非喵鱼

Java MySQL 数据库 国产软件 Tinkle

软件测试 | 什么是PageObject设计模式

测吧(北京)科技有限公司

测试

升级到JDK17和Spring Boot 2.7.8

xiaoboey

Spring Cloud Spring Boot

企业级数据平台为什么要“可观测”? | StartDT Hackathon

奇点云

数据平台 可观测 云数据 黑客马拉松 奇点云

AntDB-M设计之内存结构

亚信AntDB数据库

AntDB aisware antdb AntDB数据库 企业号 2 月 PK 榜

ChatGPT 下一步,分配对象脱单有望

融云 RongCloud

软件测试 | 网页frame与多窗口处理

测吧(北京)科技有限公司

测试

React源码分析(一)Fiber

goClient1992

React

手写JavaScript常见5种设计模式

helloworld1024fd

JavaScript

试试 MyBatis 流式查询,很强!!!

Steven

为实现跨境文件高速传输,镭速传输都用了哪些技术

镭速

Redis分布式锁正确打开方式

京东科技开发者

数据库 redis JVM 分布式锁 企业号 2 月 PK 榜

软件测试 | 执行JavaScript脚本

测吧(北京)科技有限公司

测试

融云入围「2022 云办公平台 TOP50」,进入「中国协同办公产业图谱」

融云 RongCloud

中国计算机设计大赛来啦!用飞桨驱动智慧救援机器狗

飞桨PaddlePaddle

深度学习 paddle 大赛

手写现代前端框架diff算法-前端面试进阶

helloworld1024fd

JavaScript

看透react源码之感受react的进化

goClient1992

React

细说react源码中的合成事件

flyzz177

React

深入react源码看setState究竟做了什么?

flyzz177

React

软件测试 | Web控件定位与常见操作

测吧(北京)科技有限公司

测试

软件测试 | Selenium对多浏览器处理

测吧(北京)科技有限公司

测试

【等保要求】等保要求堡垒机审计日志保留多久?

行云管家

等保 堡垒机 等级保护

为什么西门子、美的等企业这样进行架构升级,看看改造效果就知道了

TDengine

数据库 tdengine 开源 时序数据库

百度前端必会手写面试题整理

helloworld1024fd

JavaScript

从源码角度看React-Hydrate原理

flyzz177

React

  • 需要帮助,请添加网站小助手,进入 InfoQ 技术交流群
Google App Engine增加了Java支持:喜忧参半_Java_Scott Delap_InfoQ精选文章