Java开拓2.0 – 您也可以租用EC2
副标题#e#
您大概传闻过 Standish Chaos Report,这份每年一次的陈诉研究乐成和失 败的 IT 项目。这份陈诉经常包括大量坏动静。(假如都是好动静,它就不该该 称为 Chaos Report 了,对吗?)2009 年的陈诉指出,百分之 44 的 IT 项目 由于各类原因出了问题。原因之一是项目超出预算。很容易想到导致项目超出预 算的几个原因。譬喻,措施员的薪酬并不低。基本设施也是影响本钱的因素之一 。
正如本系列第一篇文章(“利用 Google App Engine”) 中指出的,Java™ 开拓 2.0 的要害方面之一是,软件出产者此刻可以不 必维护高本钱的内部基本设施,而是回收另一种替代要领。几年前,几家明智的 公司开始操作硬件(及相关软件)的 “商品化”,它们构建了由大 量便宜呆板构成的系统,在这样的系统中纵然某些呆板呈现妨碍,整个基本设施 仍然可以继承运转。这些公司(好比 Google 和 Amazon 等)拥有复杂的基本设 施,可以借给你我这样的人(同时保持其焦点业务运行顺畅)。因此,云计较的 观念此刻酿成了现实。假如您正在为 IT 项目制订预算,那么为了本身(和公司 的好处)着想,应该研究一下从 Google 或 Amazon 租借基本设施是否比本身购 买硬件自制。
关于本系列
自 Java 技能呈现伊始,Java 开拓规模产生了庞大的变 化。得益于成熟的开放源码框架和靠得住的可租借陈设基本设施,此刻我们可以或许以 很低的本钱快速组装、测试、运行和维护 Java 应用措施。在这个文章系列中, Andrew Glover 探讨使这种新的 Java 开拓范型成为大概的技能和东西。
EC2 的差异之处
Google 和 Amazon 的租借基本设施很纷歧样。正如在 前一篇文章 中看到的 ,Google App Engine 更像是用于开拓 Java Web 应用措施的平台。无法利用 Java 规模中可用的任意东西和框架,好比 Hibernate。譬喻,只能利用 Google 的 Big Table。但长处是可以把驻留的办理方案扩展到您需要的任何局限。(请 记着,当您的 Google App Engine 网站到达带宽或空间上限之后,Google 就会 向您收费)。
Amazon EC2 提供的不像是开拓平台,更像是通用的基本设 施处事,它提供虚拟呆板(可以是基于 Linux®、OpenSolaris 或 Windows® 的),可以在这些虚拟呆板上运行任何措施。EC2 不是免费的, 可是它比 Google App Engine 机动得多。只要可以建设或租借虚拟呆板,就可 以运行任何 Java 应用措施(包罗利用 Hibernate 的 Java 应用措施)。 (Amazon 和它的社区提供完整的预设置虚拟呆板目次,这种虚拟呆板称为映像 )。与 Google App Engine 一样,可以很是高效地把应用措施扩展到面向全球 用户,可是陈设应用措施的位置和扩展方法主要由 Amazon 节制。(Amazon 也 答允选择几个地理区域来陈设应用措施)。
Amazon 提供了相关的 Eclipse 插件,辅佐建设可以利用这个平台的应用程 序。与利用 Google App Engine 插件时的环境相反,EC2 的机动性很容易导致 环境巨大化。譬喻,通过利用 Amazon 的 EC2 Eclipse 插件,很容易把 Apache Tomcat Web 应用措施(不包罗数据库)陈设到利用 EC2 的可设置集群上。可是 ,假如要实现这种根基用例之外的其他办理方案,好比利用 EC2 上已经陈设的 MySQL 实例或利用 Amazon 的 SimpleDB,就需要多费些精神了。
在本文中,我将讲授如何快速轻便地建设一个简朴的应用措施,它通过 Eclipse 在 Amazon 基本设施上利用 Groovlet。除了开拓用的呆板之外,您不 需要任何硬件,也不需要为将利用的任何软件付出许可证用度。(必需为在 Amazon 的基本设施上驻留代码付出很少一部门用度)。
EC2 入门
EC2 是便宜的
利用 “小实例” — 用于运行简朴应用措施的映像,它们并不利用大量空间 或内存 — 每小时收费 10 美分。带宽用度为收发的每 1GB 数据约莫 30 美分 。还可以 “租借” IP 地点,每小时收费 1 美分(可是会保存它约莫两天)。 陈设和测试本文的应用措施约莫花了我 60 美分。应该说这很自制,我本日喝咖 啡就花了 3.50 美元。
要想利用 EC2,必需建设一个 Amazon Web Services (AWS) 账户。假如您还 不是注册的 Amazon 客户,就需要提供信用卡号码 — EC2 不是免费的(但注册 是免费的)。注册之后,您会收到一个 Access Key ID 和 Secret Access Key ,这是安详地利用 EC2 所必须的。
对付利用 AWS for Eclipse 插件,Amazon 发起利用 Eclipse 3.5;不然, 需要先安装一些组件,这些组件在这个最新 Eclipse 版本中是默认的。因为您 要建设和陈设 Web 应用措施,我发起利用 Eclipse IDE for Java EE Developers,它包括一个大度的 Java EE 透视图,支持构建 Web 应用措施。
安装 AWS 插件套件
#p#分页标题#e#
与安装其他 Eclipse 插件一样,要想安装 Amazon 的 AWS 插件,必需在 Eclipse 中通过 Help > Install New Software 找到插件的最新版本。 Install 对话框打开之后,在 Work with 文本框中输入 http://aws.amazon.com/eclipse。文本框下面会呈现可用插件列表,见图 1。 选择整个 AWS Toolkit for Eclipse 选项,然后单击 OK。接管许可协议之后, Eclipse 安装这个插件。很大概需要从头启动 Eclipse。
图 1. 下载 AWS 插件
这个 Eclipse 插件答允指定 Web 应用措施的方针运行时情况。对付本文, 将利用 Tomcat 6,所以需要先 下载 并安装 Tomcat 6。尽量将把 Web 应用程 序陈设到 EC2 上,而 EC2 运行一个 Tomcat 处事器集群,可是仍然但愿在当地 测试和运行应用措施,因为这是免费的。
#p#副标题#e#
建设 Groovy Web 应用措施
在开始演示如何设置 EC2 之前,先用我最喜欢的快速开拓语言 Groovy 建设 一个简朴的 Web 应用措施。正如我在 “利用 Google App Engine” 中提到的 ,Groovy 本质上是 Java 语言,可是语法没那么巨大。譬喻,典范的 Hello World servlet 约莫有 6 到 10 行 Java 代码(取决于是否计较导入语句等) 。无论如何计较代码行数,我可以担保用 Groovy 编写的 Hello World servlet (Groovlet)更短;实际上,可以用 Groovy 编写的最简朴的 servlet 只有一 行代码。
在 Eclipse Java EE 透视图中,在 project explorer 中右键单击并选择 New > Dynamic Web Project。假如您以前没有建设过项目,也不必担忧 — Eclipse 可以区分静态的 Web 项目(利用 HTML 页面)和动态项目(有 servlet 等处事器端资源)。
选择 Dynamic Web Project 选项之后,呈现一个对话框,可以在个中设置项 目标各个方面,好例如针运行时情况和 Servlet 版本。必然要选择 Tomcat 6。 (大概还需要汇报 Eclipse 安装 Tomcat 6 的位置)。设置选项保持默认配置 。
可以选择生存源代码文件的位置。我凡是保持其为 src 目次稳定。最后,必 须汇报 Eclipse 上下文根 — 也就是将在 Web 应用措施的 URI 中利用的名称 。必然要选择一个简朴的名称。还需要为 Web 内容文件夹选择名称,这里生存 静态文件和 Groovlet。
单击 Finish,插件的安装就完成了。
配置 Groovy 依赖项
要想利用 Groovy,必需做两个修改。首先,在项目标类路径中添加 groovy -all JAR(到编写本文时版本是 1.6.4)。还需要更新 WEB-INF 目次中的 web.xml 文件。这个文件把 Web 请求映射到 Groovlet — 假如您按 Java 开拓 2.0:利用 Google App Engine 实践过,应该执行过这个步调。web.xml 文件应 该像清单 1 这样:
清单 1. 支持 Groovlet 的 web.xml 文件
<servlet>
<servlet-name>GroovyServlet</servlet-name>
<servlet-class>groovy.servlet.GroovyServlet</servlet- class>
</servlet>
<servlet-mapping>
<servlet-name>GroovyServlet</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>
此刻,可以用 Groovy 编写一些对象了。
编写 Groovlet
最简朴的 Groovlet 只有一行,它利用 println 输出 “Hello World”。我 们将用一些 HTML 代码增加一些情趣。Groovy 支持 Builder 的观念,Builder 是用于界说条理化数据布局的逻辑机制。可以利用 Groovy 的 Builder 轻便地 仿照 XML 和 HTML 等标志语言,甚至是仿照 Swing 等框架的 GUI。可以快速地 建设 HTML 标志,而不需要处理惩罚 HTML(不需要尖括号!)。最简朴的利用 HTML 的 Groovlet 利用 Groovy 的 MarkupBuilder,在这种环境下 Groovlet 以 html 变量的形式存在。譬喻,清单 2 给出一个利用 HTML 的简朴的 Hello World Groovlet:
清单 2. 很是简捷的 Groovlet
html.html {
head {
title("Hello from EC2")
}
body {
p("Hello from EC2!")
}
}
代码就这么多。仅仅几行代码就会生成名目精采的 HTML,个中有一个 <head> 元素,后头是 <title>,然后是 <body> 元素和一 个段落,太简朴了。建设文件 EC2Groovlet.groovy,在个中输入清单 2 中的代 码。把这个文件也生存到 Web 内容目次中。
但愿建设 XML?很容易。不想让视图与节制器混在一起?没问题,利用 GroovyServer Page (GSP) 或 JavaServer Page (JSP) 就可以。无论您喜欢哪 种方法,用 Groovy 编写 servlet 都很是容易。此刻看看在 EC2 上利用 servlet 是何等容易。
#p#分页标题#e#
作为最后一步,在项目标上下文根中建设一个简朴的 index.html 文件。这 个文件会赐与后提供利便,因为在 Eclipse 中会见 EC2 时,Eclipse 会见的 URL 是上下文根;假如没有找到 index.html 文件,就会收到来自 Tomcat 的错 误页面。在 index.html 中建设 Groovlet 的相对链接。
譬喻,我的 index.html 像清单 3 这样:
清单 3. 指向 Groovlet 的简朴 index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF -8">
<title>Insert any old title here!</title>
</head>
<body>
<p><a href="EC2Groovlet.groovy">Groovy is slick! </a></p>
</body>
</html>
容易的事情完成了。此刻看看 EC2。
设置 EC2
很容易通过 Eclipse 插件设置 EC2。首先,打开 Amazon EC2 透视图,输入 您的凭证。接下来,打开 Window > View > Servers。需要界说至少一个 处事器,可是我们将界说两个处事器:一个在当地用于免费测试,另一个在 Amazon 的基本设施上。右键单击并选择 New > Server。
在 Select the server type 文本框中输入 local。会看到几个选择(见图 2)。选择 Tomcat v6.0 Server 选项(假设您已经凭据 EC2 入门 中的说明下 载了 Tomcat 并在 Eclipse 中正确地设置了运行时情况)。单击 Next,会看到 在这个实例中添加可用资源(即项目)的选项。选择您的项目并单击 Add 按钮 。单击 Finish 就完成了。此刻可以自动地把 Web 项目宣布到 Tomcat 的当地 实例。
图 2. 界说当地处事器
在 Servers 节制台上,选择当地 Tomcat 实例,右键单击并选择 Start。 Tomcat 启动之后,Eclipse 会陈设您的代码(即您的 Groovlet)。启动 Web 欣赏器,会见 localhost:8080/your context name/EC2Groovlet.groovy,应该 会看到 Groovy Builder 生成的 HTML 页面。假如一切正常,就该在 Amazon 的 基本设施上试试它了。
用 AWS 举办陈设和测试
此刻,您大概对在 EC2 上陈设这个应用措施有些害怕。其实这差不多与当地 陈设一样容易。首先,回到 Servers 节制台,右键单击并选择 New。然后,输 入 ec2,会看到图 3 所示的 Amazon EC2 Tomcat v6.0 Cluster 选项。选择它 并单击 Next。
图 3. 界说 EC2 处事器
在下一个对话框中(见图 4),可以选择但愿集群利用的实例数量。今朝, 保持 1 即可 — 今后随时可以扩展。可以选择一个定制的 Amazon Machine Image (AMI) 或接管默认映像。今朝利用默认映像;选择另一个 AMI 可以增加 其他软件包,好比数据库。对付实例范例,选择 Small — 假如愿意,可以选择 更大的实例(可是要记着,您必需付费)。
图 4. EC2 首选项
Amazon 已经表白它很重视安详性,下两个选项(也见图 4)与 Tomcat 集群 的安详性相关。今朝,只需在 Key Pair 区域中右键单击并选择 New Key Pair ,建设默认的安详配置。必需界说一个名称并选择在注册 EC2 时已经安装的密 钥对。
接下来,可以在 Security Group 框中建设组。(这里仅仅是建设组;在另 一个视图中,可以实际利用它们)。右键单击并添加一个新的组,指定它的名称 。默认配置答允所有人会见端口 8080,今朝可以回收默认配置。
最后,可以设置 IP 地点。假如您最终抉择恒久利用 EC2,这会很利便,因 为 Web 应用措施的默认 URI 相当长,很难记着。今朝接管 EC2 提供的地点即 可。可是,不必担忧 — 随时可以把本身的域名映射到 Amazon 提供的 IP 地点 。
单击 Next 按钮,把您的项目(和 Groovlet)与 EC2 处事器接洽起来。现 在可以陈设了!
与前面一样,右键单击适才界说的 Amazon EC2 处事器并启动它,见图 5:
图 5. 启动和遏制处事器
这一次,启动大概会多花些时间,因为启动在长途执行。处事器运行起来之 后,选择您的 Web 项目并选择 Run as > Run on Server 选项。接下来,选 择已经启动的 Amazon Tomcat 集群并单击 Finish。这么做会在 Eclipse 中打 开嵌入的欣赏器,它在默认环境下会见您的上下文根 — 这里有 index.html 文 件,文件包括 Groovlet 的链接。
#p#分页标题#e#
留意欣赏器位置窗口中的 URL。可以在图 6 中看到我的 URL。随时可以把 URL 映射到更切合逻辑的地点。单击 Groovlet 的链接,Groovy 措施会再次显 示 — 这一次,措施是在您完全不知道的某个处所的处事器上运行的!
图 6. EC2 是 Groovy!
单击链接屡次,您会体会到在 Amazon 的基本设施上运行措施与在本身的本 地呆板上运行一样容易。然后,必然要遏制处事器 — 假如不这么做,您就要一 直付费。遏制处事器与启动一样。在 Servers 节制台中右键单击您的实例并选 择 Stop。
EC2 是 Java 开拓 2.0
Java 开拓 2.0 主要受到两个因素的影响:
充实操作开放源码东西和框架构建整个应用措施
租借(或借用)打点软件生命周期的各个阶段(包罗运行应用措施自己)所 需的应用措施基本设施
正如在本文中看到的,通过利用 EC2 可以实现 Java 开拓 2.0 的这两个方 面。可以在借来的基本设施上充实操作您喜欢的任何软件(请记着,Amazon 的 虚拟呆板可以运行任何对象),而其耗费远远少于本身购置硬件资源。不只如此 ,可以很是高效地配置 EC2,扩展到很是大的局限,远远高出您本身以同样的成 本可以或许到达的局限。
下一期 Java 开拓 2.0 将深入接头 EC2,先容一种支持运行 Tomcat 和 MySQL 的虚拟呆板(或 AMI)。您将进修如何陈设一个支持 Spring 和 Hibernate(今朝最风行的两个 Java 开放源码框架)的 Java Web 应用措施, 还会再次看到 Java 开拓 2.0 根基道理的应用。