天天看點

揭秘雲計算 為應用程式選擇最佳雲計算平台

如果您恰好對雲計算有基本的了解,您的技能完全用得着。但是,說到真正建構一個應用程式,您使用什麼平台?Google 和 Amazon 都名聲在外,是以流行度不是問題。如果您是 Microsoft 擁護者呢?是否有适合您的選擇?本文将帶領您學習如何明智地看待雲,并根據特定的應用程式需求選擇适當的平台。

有關雲計算的困惑

最近,人人都在談論 “雲”。不論是參加某個技術會議,或者與任何程式設計人員聊天,您的耳中很快就會充斥着諸如 “雲計算”、“Google App Engine” 和 “Amazon 托管應用程式” 之類的術語。

假設您已經清楚什麼是雲計算(本文的 參考資料 小節就有很多文章可以幫助您弄清楚什麼是雲計算)。如果雲計算最終隻是一種程式設計語言的話,那麼隻需對它有基本的了解就可以真正編寫代碼。例如,一旦了解了 Java™ 對象的基礎知識,就可以開始編寫代碼,并根據需要學習更多其他的知識。

但是雲計算不是一種語言。實際上,它是一種範例。即使您了解了雲計算是指在 Internet 上的遠端伺服器上運作并由它們托管的所有服務,但是在編寫任何代碼之前,仍然還需要做出很多的決定。首先,為雲計算需求選擇哪種平台?

有 Amazon 的解決方案,有 Google 的解決方案,也有 Microsoft® 的解決方案,還有像 AppNexus 和 GoGrid 這樣的一次性解決方案。而它們并不是完全相同的!換句話說,不能像比較兩個蘋果一樣簡單地比較它們。實際上,試圖按照不同的特性集合對它們進行分類就像在一個非常大、非常混亂的迷宮中行走一樣困難。但是,通過非常細心的考量,還是可以根據您自己 的特定的應用程式需求做出決定。

該領域中的主要參與者有哪些?

在各種不同的架構之間作出選擇之前,至少需要了解可供選擇的對象。本文的介紹比較簡要,但是,您仍然應該使用 參考資料 補充關于這些内容的資訊。

Amazon EC2

Amazon EC2 是 Amazon Elastic Compute Cloud 的簡稱。“Elastic Compute Cloud” 不是一個很直覺的名稱,但 Amazon 的解決方案确實很有用。EC2 實際上是一個 Web 服務,通過它可以請求和使用雲中大量的資源(換句話說,是由 Amazon 托管的資源)。EC2 提供從伺服器到程式設計環境的所有東西。

Amazon 的解決方案的特色在于靈活性和可配置性。您可以請求想要的服務,根據需要配置它們,設定靜态 IP,并顯式地設定自己的安全性和網絡 — 換句話說,您擁有很多的控制權。此外,Amazon 擁有很好的聲望和良好的按使用量收費(pay-only-for-what-you-use)的模型,EC2 是雲計算拼圖中一個重要的、受歡迎的部分。

Google App Engine

從技術上講,Google 的 App Engine 是 Amazon EC2 的一個競争對手,但是它們之間又有很大的不同之處。Amazon 提供靈活性和控制(在本文中您将了解很多這方面的内容),而 Google 則提供易用性和高度自動化的配置。如果使用 App Engine,您隻需編寫代碼,上傳應用程式,剩下的大部分事情可以讓 Google 來完成。

和 Amazon 一樣,Google 有很大的知名度,也有很大的緩存。與 Amazon 不同的是,Google 開始是免費的,隻有當傳輸量較大,并使用較多計算資源時才收費。另一個不同點是,Google 是以 Python 為中心的架構和設計。若要使用 Google App Engine,則需要使用 Python。這個限制可以被視作一個局限性,也可以被視作一個有幫助的、簡化問題的限制。

Windows Azure

Microsoft 則以一種完全不同的方式實作雲計算。就像 “I’m a PC, I’m a Mac” 這句廣告詞一樣,Microsoft 緻力于提供一個非常豐富的、專業的、高端的計算環境。是以,Amazon EC2 和 Google 針對的是那些仍然在 vi 中使用 Python 并喜歡與網絡協定打交道的人,而 Microsoft 的 Azure 産品則直接瞄準 Microsoft 開發人員。Visual Studio、可視化工具和可視化環境使得 Azure 對于每天使用 C# 和 SQL Server 的人來說非常親切和舒服。

就像 Amazon EC2 不同于 Google App Engine 一樣,Windows Azure 與兩者都不相同。最顯而易見的是,Azure 就是 Windows®。它是基于 Windows 的;它針對使用 Windows 的人;它涉及 C# 和 SQL Server、.NET 以及 Visual Studio。Azure 就像是 SharePoint 加上一點 CRM。很快您就會看到,選擇使用 Azure 很少是因為特性,而是因為您習慣使用的平台。

其他解決方案

EC2、App Engine 和 Azure 是目前雲計算領域的 “三巨頭”。但是也許您不知道,并不是隻有 它們三個。還有很多其他的選擇,例如 GoGrid 和 AppNexus。如果您不知道其他這些工具,也無需過分擔心。事實上,如果您是 “典型的” 想使用雲計算的開發人員,您一般會選擇 Google、Amazon 和 Microsoft 提供的這三個解決方案中的其中一個。如果您還知道這三巨頭以外的其他東西,那麼您甚至可能不需要閱讀本文。

其他産品不同于 Google、Amazon 和 Microsoft,同樣它們彼此之間也各不相同。是以,就像本文後面的内容強調的那樣,您對平台的選擇更大程度上取決于您的應用程式 需要什麼,而不是您的平台提供 什麼。

在本文後面的大部分内容中,您将遇到很多關于您的技能、偏好和應用程式需求的基本問題。每個問題讓您進一步傾向于某個特定的雲計算平台解決方案。本文的想法是讓您根據自己的應用程式的功能和您的技能集選擇最佳的平台。

您是否已經投資了一個資料庫(和模式)?

應用程式最終是圍繞着資料的。應用程式顯示資料、搜尋資料、組織資料 — 幾乎所有應用程式最終都會存儲資料。那麼,您已經做出的關于資料庫的決定,對于選擇哪個雲計算平台有很大的影響。

從頭開始?您的選擇範圍會很大

如果您隻是建構應用程式,而沒有已有的資料,那麼您将有很大的自由度。您可以靈活地決定如何存儲資料,甚至可以随意地成批導入已有的資料。是以,這對于您來說不是問題。但是,如果您有很多已有的資料,則另當别論。

您是一個有經驗的資料庫程式員嗎?

如果您喜歡某種特定的資料庫,甚至到了無法自拔的地步,那麼在選擇雲計算平台時便要加以考慮。特别是,Google 的 App Engine 要求使用 Google 的資料庫。Google 的資料庫不好嗎?它會損壞您的資料嗎?它不支援 SQL 嗎?都不是。但是,如果您習慣于對自己的資料庫伺服器進行細粒度的控制,并且也習慣了您喜歡的 MySQL 或 PostgreSQL 版本特有的 SQL,那麼 Google 會讓您失望。

然而,這正是 Amazon EC2 表現突出之處。Amazon 實際上隻是在某處運作的一個盒子,它讓您感覺非常類似于根通路。您可以安裝任何需要的軟體。更妙的是,可以将資料存放在 Amazon 的 Simple Storage Service(S3)中,它在資料方面有一套更完備的特性。但是,由于已經可以通路指令行,您可以做想做的任何事情。這意味着在進行資料庫程式設計時可以最大限度地模仿自己習慣的環境。可以在指令行測試 SQL 指令,獲得類似終端的響應,并進行基本的管理。如果您隻是想讓您的資料可以工作,那麼沒什麼大不了的,但是,如果您需要花大量時間研究您的資料庫以及它的幕後工作原理,那麼任務可能非常艱巨。

是否需要導入大量的資料?

由于 Google 的特點是易于使用,有時候用指令行可以輕易完成的事情對于 App Engine 來說卻很難。将資料導入到 Google 的資料庫比較冒險,也容易出錯,而且您自己不容易修複那些錯誤。另一方面,Amazon 的 EC2 大量使用了指令行通路。先進行批量的導入,然後修複錯誤,這種做法是可行的,甚至是受鼓勵的。

您是不是 Python 的擁護者?

在選擇雲計算平台時,Python 的問題是您将遇到的另一個決定成敗的問題。簡言之,Google 隻支援 Python,它的一切都是圍繞 Python 建構的。而 Amazon 則不是這樣。雖然 Amazon 也允許使用 Python — 或者很多其他語言 — 但實際上 Google App Engine 最能展現 Python 的優勢。是以,如果您想要一個友善的 Python 解決方案,那麼 Google App Engine 是首選。

也就是說,除非……

……您是 UNIX 高手

有句話常被提到,現在也仍然管用:如果您渴望編譯和運作程式之外 的控制、指令行和所有 Python 工具,那麼 Amazon EC2 是王者。Amazon 樂于從指令行運作 Python 代碼,這是 EC2 的優點,也是它的缺點。如果您喜歡在一個檔案中編寫文本,将它交給 Python,并使用系統錯誤和指令行進行調試,那麼您會喜歡 Amazon,而且很可能會讨厭 Google 過于熱心地 “幫助” 您。

……您要使用由 C 語言編寫的擴充

如果您不需要 “由 C 語言編寫的擴充”,或者覺得它是一種昂貴而不實用的奢侈品,那麼可以跳到下一節。但是,如果您習慣于在 Python 中使用 C 擴充,那麼應該清楚,Google 并不支援那些擴充。Google 主要還是限于 Python 标準庫。雖然也有用于 Google 的 datastore、fetch 和 mail 服務的 API,但是除此之外沒有更多其他的東西(一個值得注意的例外是 Django)。同樣,這還是與控制有關。您是一名 Python 老手?Amazon 也許最适合您。開始使用 Web 服務,并且喜歡使用 Python,但是還不是特别精通這種語言?那麼 Google 最好。

您是 Microsoft 的擁護者?那麼選擇 Azure

這裡有一個簡單的問題:您打算在 “起點” 和/或 “終點” 使用 Microsoft 作為主導平台嗎?如果是這樣,那麼 Azure 也許是最好的選擇。我們來看看以 Microsoft 為 “起點” 和 “終點” 的真正含義是什麼。

Microsoft 是您的起點嗎?

您是鐵杆 Microsoft 開發人員嗎?特别是,您是否在 Visual Studio 中使用 Visual Basic、Visual C# 或與 Silverlight 等相關的技術完成超過 2/3 的程式設計。如果是這樣,那麼您幾乎肯定要選擇 Windows Azure。您的整個開發架構都是基于 Microsoft 的,是以您會對 Azure 感到習慣。更重要的是,您不需要像使用 Amazon/Google 那樣學習或重新熟悉很多非 Microsoft 的語言和技術。

Microsoft 是您的終點嗎?

這個問題按理說是多餘的。大多數主要使用 VB、C# 等語言的開發人員都以 Microsoft 平台作為他們的使用者基礎。如果您想瞄準現有的 Microsoft 使用者,并且不太擔心跨平台相容性,那麼完全可以堅持使用 Windows Azure。Azure 有很多連接配接 Microsoft 平台的非常有用的鈎子,是以由 Azure 托管的基于雲的應用程式 可以無縫地與已有的 Microsoft 應用程式內建。對于普通的 Microsoft 使用者,具有和已有的 Word、Internet Explorer 以及其他基于桌面的應用程式一樣的感觀,甚至可以與它們互動的基于雲的應用程式具有很大的價值。

您是否在抵制和曲解 Azure?

在您開始曲解 Azure 之前 — 或者聲稱我曲解了 Azure 之前 — 您應該意識到,無論是起點還是終點平台,Azure 絕對不是僅限于 Windows 平台。您可以從任何平台通路基于 Azure 的應用程式,并且可以使用 C# 以外的其他語言進行開發;例如,Python 和 Perl 就可以。雲的一個美妙之處就在于,語言和伺服器技術都在雲中。也就是說,它們對于大多數使用者而言是透明的。

然而,認為以 Mac OS X 系統為目标平台的 Python 開發人員将使用 Windows Azure,這種想法最多是有一點愚蠢。實際上,隻是沒有那麼聰明而已。如果将 Azure 的優勢與某些不知名的新貴比較,那麼 Azure 的純專業特質也許會讓您傾向于在以 Microsoft 為中心的、基于雲的環境中使用非 Microsoft 技術。但是,不能這麼看。您必須将 Azure 與來自 Google 和 Amazon 的同樣成熟的解決方案相比較。在此情況下,顯然最好使用在很多方面同樣強大,而本質上則更加開放,可用于多種平台和非 Microsoft 技術的平台。

但是我不想使用 Azure!

反過來也是一樣:以 Microsoft 為目标平台的 Microsoft 開發人員并不是必須 使用 Azure。您也可以享受 Amazon EC2 的靈活性和威力,或者 Google App Engine 很 “酷” 的特性。如前所述,Amazon 和 Google 都提供一些引入注目的特性。雖然如此,還是要問一下 “為什麼?”除非您打算學習新的技術 — 當然,這很有趣,通常也很值得 — 否則您很難找到理由建構一個純 Microsoft 的解決方案,然後将它放入到一個非 Microsoft 的雲中……更何況原本有一個很好的 Microsoft 雲是現成的。與其在這方面付出這麼多的努力,不如優化一下您的應用程式,或者重新建構一個應用程式。

您需要多少資源?您有多少資金?

在開始的數個月,Google App Engine 與 Amazon EC2 在兩個關鍵的方面有所差別:

Google App Engine 可以免費作為平台使用;而 Amazon EC2 則不可以。

Google App Engine 有報價限制;而 Amazon EC2 則沒有(至少在實際意義上沒有)。

但是,到了 2 月末,雖然 Google 仍支援一開始的免費使用,但是當使用的資源超出免費範圍時,則需要付費。這是 Google 的一個巨大的勝利,使他們從資源受限步入資源相關(resource-interesting)的階段。

什麼是資源相關?

我使用術語 “資源相關” 表明,像 Google App Engine 這樣的一種模式 — 一定範圍内免費,超出範圍則收費 — 對于幾乎任何其他模型都有巨大的優勢。首先,一開始使用 Google App Engine 是免費的。這意味着您可以試用 App Engine,在上面運作應用程式,甚至公開部署應用程式,所有這些都不用掏錢。是以這種 “一開始免費” 的方法有很大的優勢。

然而,有趣的是,使用這種模式時,實際上可以不斷估計帶寬,逐漸擴充應用程式,直至超出免費範圍。而 Amazon EC2 也允許根據需要擴充資源,是以一旦進入付費模式,Amazon 的解決方案與 Google 的解決方案之間并沒有太大的差别。

如果按用量收費,Google 有什麼優點?

Google 一開始免費的方法對于 Amazon 是一個優勢:您可以先進行調優,并重整資源,延緩進入收費區域的程序。每個認真的程式員都知道,應用程式的第一個版本通常存在兩種問題:

功能 bug。一些功能無法工作,或者無法正常工作,需要修複。

資源 bug。連接配接沒有被關閉,或者池沒有在使用,或者有什麼東西在妨礙應用程式的運作,需要修複。

Google 的方法的好處在于,在為自己的錯誤買單之前,您可以跟蹤這些資源 bug。

就此下結論?Google 隻是稍微占優,但也許根本無法影響您的決定。

Windows Azure 如何收費?

與 App Engine 和 EC2 一樣,Azure 根據用量定價。使用 Azure 服務越多,價格越高。與 App Engine 和 EC2 的另一個類似之處是,Azure 根據計算機時間(CPU 使用)、帶寬(包括進和出)和存儲定價。它還根據事務(例如 GET 和 PUT)收費。

當然,這種定價方法還沒有釋出(截至 2009 年 3 月初),是以每個人還在拭目以待,看到底會怎麼樣。不過,老實說,預計定價會比 Google App Engine 和 Amazon EC2 高一點,但不會差太多。同樣,定價很可能不會成為是否選擇 Windows Azure 的決定因素,就像 Google 或 Amazon 一樣。

結論:簡單化,但不要過于簡單化

這裡很容易一概而論。例如,您也許認為如果您喜歡 Python,并且是新手,就選擇 Google;如果是 Python 高手,就選擇 Amazon EC2;如果是 Microsoft 擁護者,那麼使用 Azure。在很多情況下,這種過分簡單的觀點倒也适用。但是,如果完全以此為依據做出決定,最終可能會失望。Amazon 的确可以提供很強的功能,但是要想快速建立解決方案,還是 Google 更勝一籌。選擇 Google 時所花的時間很短,而且很少出錯。

Amazon 要求您知道自己在做什麼。您可能需要打開幾本書一邊看着,更諷刺的是,您可能會經常使用 Google 弄清楚每件事(是搜尋引擎,而不是 App Engine)。但是,額外的工作可以賦予您更大的能力,以及事實上無限的資源。

簡單來說,Azure 因 Windows 平台而顯得出色。雖然有一些瑕疵,但是它對于 Microsoft 程式員來說比較直覺,而且應用程式使用者從平台的角度來看會覺得它比較舒服。

那麼,您怎麼做?一個好的程式員總是這樣做:多學習一些工具,在合适 的情況下使用它們。這勝過用占蔔的方式來決定。從 Google App Engine 入手,有一定基礎後,用 Amazon EC2 作為平台開發同樣的應用程式。打開 Visual Studio,看看用 C# 可以做些什麼,然後将您的應用程式部署到 Azure。所有這三個主流平台都體驗一下,當您有一個有特定需求的應用程式時,就可以受益匪淺。

轉載自http://www.ibm.com/developerworks/cn/web/wa-cloudflavor/

繼續閱讀