用 Amazon Web Services 部屬雲端服務

Amazon Web Services (AWS) 是一種雲端的服務。Amazon 多年來一直在構建和調整這個健壯的雲端計算平台,現在任何能夠訪問 Internet 的人都可以使用它。Amazon 提供幾個 Web 服務,但是 AWS 最廣為被開發者使用的核心服務在於大多數系統的核心需求的基本服務:存儲、計算、消息傳遞和資料庫。

學習基本的 Amazon SimpleDB (SDB) 概念,研究 boto(一個用於與 SDB 交互的開放源碼 Python 庫)提供的一些功能。在這個 “用 Amazon Web Services 進行雲端計算” 系列中,學習如何使用 Amazon Web Services 進行雲端計算。了解這些服務如何為設計和構建可伸縮、可靠的應用程序提供一種可選方案。第一篇文章解釋虛擬基礎設施的構建塊的特性。學習如何使用 Amazon Web Services 構建 Web 範圍的系統。

什麼是雲端計算?

雲端計算(Cloud computing)可以粗略地定義為根據需要使用在用戶環境之外以服務形式提供的可伸縮計算資源。用戶只使用需要的資源,只為使用的資源付費。在任何時候,在網際網路 上的任何地方,都可以訪問 “雲” 中的任何資源。不需要關心雲中的資源在幕後是如何維護的。

雲端計算源於 Internet 或 IP 可用性的技術體系結構圖中常常把結構描述為雲。雲端計算在 2007 年受到關注,成為解決水平可擴展性問題的流行解決方案。

雲負責提供高可用性並響應您的應用程序的需要。雲端計算也稱為效用計算(utility computing)或網格計算(grid computing)。

雲端計算影響了我們設計和交付可伸縮應用程序的方式。在過去,公司要花費寶貴的時間和資源構建基礎設施,從而提供競爭優勢。常常是 “構建它,它們就來了”。在大多數情況下,這種方式有以下缺點:

  • 有相當一部分計算能力未被使用,它們會占用數據中心中的空間。
  • 需要有人照顧伺服器。
  • 有相關聯的能源成本。

未使用的計算能力被浪費了,其他公司或用戶可能願意付費購買多余的計算周期,但是無法實現。

有了雲端計算,就能夠把多余的計算能力銷售給客戶。這就把計算和 IT 基礎設施轉換為一種實用工具,就像球場一樣,可供所有人使用。這使競爭取決於創新思想而不是計算資源。

應用程序和 IT 系統需要的資源(為了滿足日益增長的存儲、計算、消息傳遞和數據庫需求)本質上是 “日用品”。可以從價格最優惠、服務最好的賣家那裡租用這種基礎設施。很簡單,不是嗎?這是一個簡單但革命性的思想,盡管它並不是完全的新概念。它現在之所以成為技術潮流,是因為 Amazon 引入了大範圍的雲端計算環境。

Amazon Web Services – 亞馬遜雲端服務

Amazon Web Services 是一組服務,它們允許通過程序訪問 Amazon 的計算基礎設施。Amazon 多年來一直在構建和調整這個健壯的計算平台,現在任何能夠訪問 Internet 的人都可以使用它。Amazon 提供幾個 Web 服務,但是本系列只關注滿足大多數系統的核心需求的基本服務:存儲、計算、消息傳遞和資料庫。

通過在 Amazon 提供的可靠且經濟有效的服務上構建功能,可以實現復雜的企業應用程序。這些 Web 服務本身駐留在您的環境之外的雲中,具備極高的可用性。只需根據使用的資源付費,不需要提前付費。因為硬件由 Amazon 維護和服務,所以您也不需要承擔維護費用。

Amazon Web Services 成功案例

SmugMug 是一個在線照片存儲應用程序,它把超過 0.5 PB 的數據存儲在 S3 上,由此節約的服務和存儲成本接近 100 萬美元。它是 Elastic Compute Cloud (EC2) 計算資源的 重要用戶,它使用 EC2 應對需求的變化。

37Signals 是流行的在線項目管理軟件 Basecamp 的開發商,它使用 S3 滿足存儲需求。

紐約時報展現了 EC2 的強大能力,它在 36 小時內使用數百個 EC2 實例處理了數 TB 的存檔數據。

Animoto 是一個在線視頻生成程序,需要用非常大的計算能力處理視頻。最近出現了一次會壓垮大多數公司的系統的 Web 通信高峰,Animoto 使用 EC2 快速地擴展了處理能力,從而 成功地度過了這次高峰。當時,它曾經使用 3,500 個同時運行的虛擬實例。

這個虛擬的基礎設施大大降低了當今 Web 環境中的 “貧富差異”。您可以在幾分鐘內快速地獲得一個基礎設施,而這在真實的 IT 工作室中可能會花費幾周時間。要點在於這個基礎設施是彈性的,可以根據需求擴展和收縮。世界各地的公司都可以使用這個彈性的計算基礎設施(見邊欄)。

公司不再需要承擔高額的基礎設施投資和維護成本,這為創新提供了更大的機會。現在,您可以把注意力集中在業務思想上,而不需要為伺服器操心,不需要擔心磁盤空間不足等問題。根據 Amazon 的估計,企業把大約 70% 的時間花在構建和維護基礎設施上,在推動企業發展的思想上實際上只花費 30% 的時間。Amazon 會處理與硬件和基礎設施相關的繁瑣工作,並確保其高可用性,您只需關注如何把您的思想變成現實。

下面是這個全 Web 範圍的基礎設施的主要元素,它們提供幾乎所有應用程序最常用的構建塊:

存儲
所有應用程序都需要存儲文件、文檔、用戶下載或備份。可以把應用程序需要的任何東西存儲在 Amazon Simple Storage Service (S3) 中,從而實現可伸縮、可靠、高可用、低成本的存儲。
計算
Amazon Elastic Compute Cloud (EC2) 能夠根據需要擴展或收縮計算資源,非常方便地提供新的伺服器實例。
消息傳遞
Amazon Simple Queue Service (SQS) 提供不受限制的可靠的消息傳遞,可以使用它消除應用程序組件之間的耦合。
資料庫
Amazon SimpleDB (SDB) 提供可伸縮、包含索引且無需維護的資料庫存儲,以及處理和查詢功能。

可以根據需要結合使用這些服務;它們能夠很好地相互協作。因為這些服務在 Amazon 環境中運行,它們之間的所有通信通常非常快。

企業家可以利用這個虛擬基礎設施構建可伸縮且可靠的應用程序,與傳統的應用程序主機托管平台相比可以大大降低成本,因為為了應對服務量的波動和高峰,主機托管平台需要大量伺服器。它還提供很高的冗余水平。

Amazon Web Services 的用戶可以使用兩個支持級別:

  • 基於免費論壇的支持,由監視 Amazon 論壇的 Amazon 人員提供這種支持。
  • 付費的支持包,提供一對一和電話支持,這是更慎重的求助方法。

Amazon 在一個所有人都可訪問的 指示板 上公布所有 Web 服務的健康狀態;當服務出現任何問題時,都會更新這個指示板。在任何服務停止運行期間,Amazon Web Services 團隊會每隔 15-30 分鐘發布更新信息,直到問題被解決。

Amazon 為與每個服務進行交互提供了基於標准的 SOAP 和 REST 接口。Amazon 和第三方提供多種語言的開發人員庫,包括 Ruby、Python、Java™、Erlang 和 PHP,可以使用這些庫與服務通信。還可以使用命令行工具管理 EC2 上的計算資源。REST 接口很容易使用;可以用任何編程語言編寫客戶機,通過 HTTP 向 Web 服務發出請求。

用 S3 進行存儲

Amazon Simple Storage Service (S3) 提供一個用於數據存儲和獲取的 Web 服務接口。數據可以是任何類型的,可以從 Internet 上的任何地方存儲和訪問數據。可以在 S3 中存儲任意數量的對像;存儲的每個對像的大小可以從 1 字節到 5 GB。存儲本身位於美國或歐盟。在創建 bucket (與操作系統中的文件夾概念相似)時,可以選擇對像的存儲位置。使用與 Amazon 電子商務網站的全球網絡相同的數據存儲基礎設施存儲數據,確保安全性。

對於存儲在 S3 中的每個對像,可以指定訪問限制,可以用簡單的 HTTP 請求訪問對像。甚至可以讓對像可通過 BitTorrent 協議下載。

S3 讓用戶完全不必為存儲空間、數據訪問或數據安全性操心。甚至不必承擔維護存儲伺服器的成本。

Amazon 確保您的文件的高可用性,在任何時候都可以使用它們。Amazon 為 S3 提供的服務水平協議承諾 99.9% 的正常運行時間,每月收費一次。

用 EC2 實現彈性計算

Amazon EC2 是一個 Web 服務,它讓用戶可以在幾分鐘內獲得虛擬機器,根據需要輕松地擴展或收縮計算能力。您只需為實際使用的計算時間付費。如果需要增加計算能力,可以快速地啟動虛擬實例;當需求下降時,可以馬上終止它們。

這些實例基於 Linux®,可以運行您需要的任何應用程序或軟件。您可以控制每個實例。EC2 環境本身基於在劍橋大學開發的開放源碼的 Xen 系統管理程序。Amazon 允許創建 Amazon 機器映像 (AMI) 作為實例的模板。可以通過指定權限控制對實例的訪問。可以用這些實例做任何事;惟一的限制是,它們必須是基於 Linux 的映像。最近,Amazon 宣布與 Sun Microsystems 合作提供 Open Solaris 支持,但是 EC2 可用的大多數免費和商業預構建映像是基於 Linux 的。

Amazon EC2 提供真正全 Web 範圍的計算,很容易擴展和收縮計算資源。您可以完全控制在 Amazon 數據中心中運行的這個計算環境。Amazon 提供五種伺服器類型;可以選擇適合自己應用程序需要的伺服器類型。伺服器的範圍從普通的單核 x86 伺服器直到八核 x86_64 伺服器。可以把實例放在不同的地理位置或可用性區中,從而確保對抗故障的能力。Amazon 最近還引入了彈性 IP 地址的概念,彈性 IP 地址可以動態地分配給實例。

用 Amazon Simple Queue Service 實現可靠的消息傳遞

Amazon Simple Queue Service (SQS) 允許訪問 Amazon 提供的可靠的消息傳遞基礎設施。可以使用簡單的基於 REST 的 HTTP 請求在任何地方發送和接收消息。不需要安裝和配置任何東西。可以創建任意數量的隊列,發送任意數量的消息。Amazon 把消息存儲在多個伺服器和數據中心中,從而提供消息傳遞系統所需的冗余和可靠性。每個消息最多可以包含 8KB 的文本數據。可以在消息中使用的 Unicode 字符只包括

每個隊列可以有一個可配置的可見性超時周期,用來控制多個讀者對隊列的訪問。一個應用程序從隊列中讀取一個消息之後,其他讀者就看不到這個消息,直到超時周期期滿為止。在超時周期期滿之後,消息重新出現在隊列中,另一個讀者進程就可以處理它。

SQS 與其他 Amazon Web Services 很好地集成。可以使用 SQS 構建松散耦合的系統;在這種系統中,EC2 實例可以通過向 SQS 發送消息相互通信並整合工作流。還可以使用隊列為應用程序構建一個自愈合、自動擴展的基於 EC2 的基礎設施。可以使用 SQS 提供的身份驗證機制保護隊列中的消息,防止未授權的訪問。

用 Amazon SimpleDB 進行資料庫處理

Amazon SimpleDB (SDB) 是一個用於存儲、處理和查詢結構化資料庫的 Web 服務。它並不是傳統意義上的關系數據庫,而是一個高可用的模式,是雲中的非結構化數據存儲,可以使用它存儲和獲取包含鍵的值。每組包含鍵的值需要一個惟一的條目名;條目本身劃分為域。每個條目可以包含最多 256 個鍵-值對。可以在每個域中對自己的資料庫執行查詢。SDB 當前還不支持垮域查詢。

SDB 便於使用,提供關系數據庫的大多數功能。SDB 的維護比典型的數據庫簡單得多,因為不需要設置或配置任何東西。Amazon 負責所有管理任務。Amazon 自動地為數據編制索引,可以在任何時候任何地方訪問索引。不受模式限制的關鍵優點是,能夠動態地插入數據和添加新的列或鍵。

SDB 是 Amazon 基礎設施的組成部分,會在幕後自動地擴展。您可以把注意力放在更重要的方面。同樣,只需為實際使用的資料庫資源付費。


可伸縮的體系結構

Amazon Web Services 通過提供以下特性幫助實現可伸縮的系統:

可靠性
服務在經過充分測試的高可用的 Amazon 數據中心中運行,這些數據中心也運行 Amazon 自己的業務。
安全性
提供開箱即用的基本安全性和身份驗證機制,可以根據需要在服務之上實現應用程序特有的安全措施,從而增強安全性。
節約成本
沒有固定的成本或維護成本。只需為使用的服務付費,可以根據需要擴展資源和預算。
容易部署
可以通過簡單的 API 使用這個虛擬基礎設施和庫的所有功能,可以在使用最廣泛的編程語言中使用這些 API。
彈性
可以根據需要擴展或收縮計算資源。可以快速地從一個伺服器擴展到任意數量的伺服器,從而滿足應用程序的需要。
內聚性
四個核心服務- 存儲(S3)、雲計算(EC2),消息傳遞(SNS)和資料庫(RDS)能夠非常好地協作,為各種應用程序提供一個完整的解決方案。
社群
Amazon Web Services 於網路上的社群討論非常活躍,這也促進更多世界各地的開發者採用 AWS的 服務,有助於在這個基礎設施上創建獨特的應用程序。

使用 Amazon AWS 需要做的準備

為了透過這個 “用 Amazon Web Services 進行雲端計算” 系列中的其他文章詳細了解這些服務,需要注冊一個 Amazon Web Services 賬戶(見 參考資料)。它會提供公共和私有安全訪問密鑰以及 x.509 安全認證

用於與這些 Web 服務進行交互的工具和庫有用多種語言編寫的不同版本。本系列中的文章力求與語言無關,提供多種語言的範例,但是熟悉 Java、Ruby 或 Python 會有幫助。


結語

在本文中,介紹了 Amazon 的雲端計算環境,概述了這個基礎設施的四個主要部分。本系列的後續文章詳細討論每個 Amazon Web Service,以及用於利用這個虛擬基礎設施構建應用程序的各種庫和工具。

Click here