在惊悚电影中似乎都有这样一个情节,主人公说“这很容易……简直是太容易了”,然后所有的事情就开始土崩瓦解。当我开始测试市场上的顶级Java云计算时,我发现这一情节正在自己身上重演。
与其他人相比,企业研发人员需要对这些可能性更担忧。当云计算中出现了让生活变得更容易的新方案时,普通的计算机用户会感到兴奋。他们会采用基于云的电子邮件,如果电子邮件丢失,他们只能耸耸肩,因为电子邮件经常丢失,有时就像作祈祷那样频繁。
企业研发人员不能如此乐观。每一个能够让我们进行一键配置的选择都会让我们永远的被禁锢在其中。如果我们采用了一个过于容易的云计算并让它为我们做太多的事,那么我们就不太可能有什么发展。
“被套牢”的危险看起来隐藏在每一个角落里,这未必是最糟糕的部分。如果除去我们需要的特色外,我们对云计算在各方面都很满意,而这个特色又是云计算提供商无法或者是不想提供给我们,那会发生什么情况呢?云计算将成为一个一成不变的世界。
让我们感到安慰的是,云计算研发人员已经对这一情况感到了不安。他们知道,客户希望得到一键式解决方案和高度的自动化,以让生活变得更加容易。但是这意味着发推出一些非标准或是无法让用户自由调整的接口。云计算研发人员必须要搞清楚市场是否需要让云计算做每一件事,以及客户是否想拥有充分的自由以避免 “被套牢”。
对此,我测试了4个主要的Java云——CloudBees、谷歌App Engine、红帽OpenShift和VMware的Cloud Foundry。它们都有许多解决方案。一些云依靠标准工具以获取标准WAR文件和传输信息。另一些也有着自己许多独特的办法。 #p#
云计算实验:Java版本
Java云计算方案变得越来越好、越来越复杂,但是他们远远称不上是一套完成的产品。这里的几套工具就可以完整的展出它们尚未完全成熟的状态。注册表单经常提示我们云计算只是一个测试应用,仅针对研发而非针对生产工作。实际上,这他们更准确的称呼或许应该是云计算postalpha测试版或是prebeta测试版
由于都是在摸着石头过河,因此即使已经创建的云计算也会经常发生变化。由于没有人真正知道负载和成本如何增加,因此价格会进行调整,有时候调整的幅度很大。云计算销售商也不知道如何确定他们的成本,所以在他们报价几百万的处理量价格为多少美元时也只是全凭猜测。
未来,对于买家和卖家来说,定价可能是一件非常困难,并极具挑战性的工作。人们已经对谷歌停止补贴其App Engine的作法感到非常失望。一些用户抱怨每一次点击都使得他们的成本增长两倍,甚至是三倍。但是谁又能够指责谷歌呢?尽管谷歌拥有优秀的金融工程师,但是我不能确定他们是否知道Big Table数据仓库的每次往返的合理价格。它们可能会受到西北部大雨而波动。因为谷歌的一些最新数据中心就建在那里,那里的水利发电是最便宜的能源。
或许是我想多了。但是总会要发生错误,价格将出现波动。云计算具有更高的灵活性和自动化程度,这为我们节省了雇人管理这些机架和确保数据平稳传输的成本。如果Web 3.0应用取得了巨大成功,而云计算却非常昂贵,这仍然可以带来足够的盈利以支付将应用移植到一套内部服务器所进行的全部程序改编。如果这些Web程序的盈利不足以抵消成本,那么体验价格不会下降。云计算最终会发生变化:他们会简化实验并进行调整。
选择云计算涉及到大量实验。最简单的一项是从亚马逊或Rackspace云计算那里发现机器,但是这一操作比服务提供商承诺的要复杂很多。是的,我按下按键,在几秒内就可以启动一台计算机,但是随后我却要花上数个小时进行联机,以安装JVM和剩下的堆栈。
如果你有时间和意愿来创建一个带有你喜爱的软件的机器镜像,那么原始的云计算机器将会满足你对云计算的大多数期望,但同时也将你“套牢”。亚马逊和Rackspace让存储镜像和复制变得很容易。你需要选择软件和确定需要多少台机器。理论上,你随时可以获得更多的机器。我曾经尝试过在日常事务处理中生成新机器,这很棒,每小时只需要花费1.5美分。在工作完成后,它们就会消失。
当然,你必须要对自己有一个全面的认识。你是想要100台虚拟机还是102台呢?这是一个矛盾的问题。你要控制你的成本,但你又没有时间却做出反应,除非你在这方面拥有更高的智能化。#p#
Java云:谷歌App Engine
在使用谷歌App Engine的过程中,我们会感到兴奋和舒服。其作为一款先进的工具正在慢慢成熟,并且更容易被用户所理解和使用,也许是因为用户已经接受了其中的许多理念。
基础的架构主题是相同的。你上传带有业务逻辑的核心代码,App Engine将部署充足的实例以满足你的需求。如果你想在会话间存储或同步你的工作,你必需使用谷歌专用的数据存储和缓存,不过所有的东西感觉都相当优秀。App Engine的第一个版本使用了Python,但是现在你可以增加带有JSP、小服务程序和服务器端逻辑的Java WAR文件。通过独立的Web界面进行管理。命令行问题几乎已经不再出现。
尽管架构和数据存储没有变化,但是工具却更为复杂和丰富,通过许多功能和按键可以调整配额和性能。我使用了整套的Eclipse插件创建了应用,整个环境与NetBeans和IntelliJ很相似。工具还将谷歌Web Toolkit与App Engine整合在了一起,尽可能的在Java中完成你的所有编程。如果你不能忍受JavaScript或想在服务器和客户端上使用相同的代码,那么谷歌的Web Toolkit可以为浏览器翻译你的Java。
我认为对于程序员来说最大的挑战是适应谷歌的非关系型数据库。当谷歌App Engine首次出现,并没有太多的NoSQL项目。存储“名称/值”对的集合这一概念还是件新奇的事物。任何有着一定的NoSQL经验的App Engine用户都不会被这一如此简洁的解决方案所震惊。但是任何考虑连接和规范数据的人需要打破以往的陈规,适应新的方式。
App Engine提供两个级别的数据库,所以架构师必须确定是否为额外的能力付款。基本模式是让一个数据中心成为主数据中心其它的成为附属数据中心。如果数据中心宕机或执行预定的维护任务,那么你的数据将无法存储。你必须要做好面对“预定的只读期”的准备。许多新的Web应用(如脸谱)能够很轻松的克服这类小故障,但许多需要金融级的可获得性和一致性的应用则需要考虑另的办法。
低租金的主-从配置被认为只有高端版本成本的三分之一,且写入成本只为高端同类产品的八分之五。不过,在写入速度上,低租金版本比高端云计算可能要慢两倍,并且可能还存在无法写入的时候。你必须要关注这些数字,因为机制中还包括了大量隐性支出。 #p#
Java云:Cloud Foundry
Spring是Java中最干净的架构。这让人们使用其作为Java云计算基础变得很有意义。SpringSource如今已经成为了VMware的一部分,并且成为了Cloud Foundry的领导者。因此,其被创建在VMware虚拟机顶端并不意外。
使用Cloud Foundry的最早方式是通过SpringSource定制版的Eclipse利用模板创建一个Spring项目。该工具被称为SpringSource工具套件。我尝试在自己的Eclipse版本安装了一些SpringSource工具,但是库的正确收集并不容易发现。SpringSource工具套件则非常简单。
Cloud Foundry并不局限于Spring,其还支持Rails、Sinatra、Scala、Grails和Node.js。即使你不写任何Java,它们也能够在JVM上运行。Cloud Foundry不久刚刚宣布支持PHP和 Python/Django。
目前VMware仍然对其价格保持沉默。产品还处于测试阶段,VMware还无法对其进行充分的定价。Cloud Foundry虚拟机开放程度较高,你可以下载Micro Cloud Foundry——Cloud Foundry环境中的便携虚拟机镜像,然后在自己带有VMware Player的环境中运行。其核心代码在cloudfoundry.org中被开放,并且大部分被Apache许可证所涵养。 #p#
Java云:CloudBees
CloudBees不仅提供了一个部署应用的云计算,而且提供了一个创建它们的工具。你的账户不仅仅是将你的数据服务于大众的一个方式。其还有代码库(Git或Subversion)和监听你输入的每一个代码的Jenkins服务器。
我能够输入代码并等待Jenkins去创建、测试和、汇集文件并将其部署至服务器中。如果我需要更多,这里有大量的其它服务、插件和交换机。
其原理是CloudBees有大量平等工作的高端盒子,以用于创建大量代码。你不再需要等待你的桌面机器页入适当的库,取而代之的是让Jenkins分配你的模块至CloudBees中。
但是我并没有看到什么优势。我的Web应用只是一个JSP。连接Jenkins的Web界面一直出现一个进度条并有一个闪动的蓝色球体,这表明我的本地机器能够比CloudBees数据中心更快的创建这些文件。
CloudBees云的实质是Tomcat和MySQL,不过一些经过紧密整合的第三方数据库也可以使用。比如Cloudant提供了CouchDB服务,MongoHQ提供MongoDB数据库服务。
CloudBees还提供许多免费服务,不过限制也非常严格。只有临时性的研发人员喜欢它们。任何长期从事研发工作的人员都会快速的升级到付费服务。 #p#
Java云:红帽的OpenShift
红帽并不仅仅满足于推出个Linux工具集合。目前他们也开始进军云计算,他们的云计算平台被称为OpenShift,可快速向等待接受Java、Python、PHP或Ruby应用的机器进行部署。红帽云计算提供了一套将应用部署至亚马逊EC2的工具集合。
OpenShift并不是以Java为中心。无论你创建一个Java应用或是其它类型的应用,它都可以帮助解决许多部署问题。标准的Java应用是由Maven创建的JBoss Application Server 7堆栈。这是一个很新的选项,我并没有发现其在最新的HTML文件当中。相反,我是无意中在命令行中敲击-h时发现的。
当然,OpenShift对于那些喜欢使用命令行的人来说是一个好工具。我敲入了一些命令行就可以了,一个JBoss应用就可以被部署、运行并做好了定制的准备,并且升级也非常的简单。
你提供账户信息后,名为Flex的红帽工具会处理部署问题。如果你想对OpenShift进行测试,那么你可以免费试用30天。不过,这些工具还处理测试阶段,只能用于研发工作。