我們的網路應用程序應該去雲還是多個 VPS?
假設我們有一個網路應用程序,並且有一個自動/幕後流程來更新數據庫。此刻,它們都在同一個伺服器上執行。
我們想將批處理與 apache 活動和數據庫分開:
- 伺服器 1:網路伺服器- CPU 負載和 BW 消耗的浮動/激增
- 伺服器 2:dbserver - 來自網路伺服器的浮動 I/O 和來自批處理的穩定/重度 I/O
- 伺服器 3:批處理- 穩定/低 CPU 負載和穩定/重度 BW
一種解決方案是設置 3 個 VPS(例如在 Slicehost/Rackspace)。
還是我們應該去雲?說 Amazon EC2:設置 3 個 EC2 實例真的是大材小用,不是嗎?如果我將所有 3 個“伺服器”移植到 1 個 EC2 實例中,我們會獲得與 3 VPS 解決方案一樣多的可靠性嗎?(考慮 1 EC2 = 1 VPS 1.6GB 1/1.2 GHz Opteron/Xeon)
每種解決方案(1EC2 或 3VPS)的區別/優勢是什麼?
您並沒有真正在您提議的架構中使用“雲”概念(動態可擴展)——您只是在執行多個 VPS。
所以我的回答是;如果您採用這種方式,我認為您使用 Amazon EC2 相對於 VPS/專用伺服器沒有任何優勢。事實上,可能還有更多的缺點(例如更難進行持久儲存,是的,我知道您應該在標準 VPS 中計劃磁碟/伺服器故障)
擴展答案-您可能最終會遇到這 3 台伺服器中的一台執行全速並成為瓶頸,而另一台幾乎沒有做任何事情。
一個更“類似雲”的架構將是
使用Elastic Load Balancing的Web 伺服器實例。
當它變得忙碌時(一些指標,如 CPU 負載/隊列/頁面載入時間等),您有一個監控程序,該程序啟動另一個 Web 伺服器實例並將其添加到伺服器場。根據需要重複。當事情平靜下來時,可以從場中刪除 Web 伺服器實例。
數據庫伺服器
如果您可以使用Amazon 的SimpleDB服務,那麼一切都會為您解決。如果您需要更傳統的數據庫,那麼這可能是系統中最難以易於擴展的方式建構的部分。我將在這裡方便地跳過這個!
“作業處理”實例
假設您的批處理作業儲存在某種隊列中(例如… Simple Queue Service - SQS)。批處理伺服器從該隊列中挑選作業並處理它們。如果隊列增長超過一定大小,您將啟動更多“批處理”實例。
您可以對此非常感興趣,並在負載較輕時在 Web 伺服器實例上執行您的一些作業,而在負載較重時轉移到專用實例 - 或者您可以想像的任何混合。但要真正使用“雲”概念,您應該擁有一個支持動態向池中添加 X 台伺服器的架構。
這種方法的典型代表可能是Animoto,它是一種服務,可以拍攝照片、將其與一些音樂混合併輸出影片。一個 CPU 密集型作業,非常適合 EC2 實例池。查看圖表,在幾天內從 50 台伺服器增加到 3500 台伺服器——這就是“雲”計算的力量。