程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java開發2.0 - 您也可以租用EC2

Java開發2.0 - 您也可以租用EC2

編輯:關於JAVA

您可能聽說過 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 插件套件

與安裝其他 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 服務器集群,但是仍然希望在本地 測試和運行應用程序,因為這是免費的。

創建 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 是多麼容易。

作為最後一步,在項目的上下文根中創建一個簡單的 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 的鏈接。

注意浏覽器位置窗口中的 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 基本原理的應用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved