標籤:
自互連網出現以來[1],雲端運算的概念已經提出了有50年。1957年,John McCarthy將電腦中的分時共用概念設計成了一種工具。從此以後,這個概念的名字經曆過數次變化:從“服務中心(service bureau)”到應用服務提供者,到互連網即服務,到雲端運算,再到軟體定義程式的資料中心,每個名字都有細微的差別。但是,核心概念沒變:提供基於互連網(雲)的IT服務。
美國國家標準與技術研究所(NIST)的雲端運算定義用的最多:雲端運算是一種模型,使使用者可以隨時隨地、便捷地、隨需應變地通過網路訪問可配置的計算資源(例如,網路、伺服器、儲存、應用、及服務)共用池,池中資源可以快速分配及釋放,並且只需要很少的管理工作量以及與服務提供者的互動[2]。
供應商使用三種眾所周期的模型(見圖1):IaaS(基礎設施即服務)、PaaS(平台即服務)和SaaS(軟體即服務)。這裡,我們重點討論IaaS。下一步是選定一種模型部署雲端服務。在公用雲端中,供應商向任意客戶提供基礎設施。私人雲端只提供給一個組織。在混合雲中,公司組合使用公用雲端和私人雲端。
為了選出最適合組織的雲端運算模型,必須分析組織的IT基礎設施、用途和需求。為了協助完成這項工作,我們將在這裡描繪一幅雲端運算的現狀圖。
雲端運算最佳實務
和每一種新的架構模式一樣,重要的是在設計系統時考慮新技術的特性。 為了選出一個雲供應商或技術,你應該瞭解自己的需求,以便列出需要的特性。下面是一些雲遷移的最佳實務[3]。
彈性架構
IaaS提供了明確的可擴充性。雲比傳統物理硬體的縮放策略做得要好。為了從這種潛力中獲得儘可能強的可擴充性,在設計系統和應用程式架構的時候應該儘可能的解耦,使用一種面向服務的架構,並在服務之間使用隊列。
設計時為故障做好準備
高可擴充性有其局限性。IaaS技術和架構會導致系統不夠健壯,因為用多個軟體層替換硬體明顯增加了複雜度和故障點。冗餘和容錯是主要的設計目標。
為了保證商務持續性,除了要建立備份策略外,還要確保系統做好了重啟準備。藉助伺服器配置和部署步驟,部署實踐自動化是必須的。自動化需要新的開發實踐(開發和營運管理、持續整合、測試驅動開發等等)和新的工具,比如Chef、Puppet或Ansible。
高可用性
對任何企業而言,IT資源破壞都會產生巨大的負面影響。在遷移到雲上後,會失去對底層基礎設施的控制,而且服務水平協議(SLA)並不能涵蓋所產生的所有費用,所以,在設計時要考慮到停機和高可用性。由於建立虛擬執行個體非常簡單,所以部署伺服器或服務叢集成為一種受歡迎的方式。在這種情境下,負載平衡是一種被廣泛認可的叢集操作技術;在選擇雲供應商時,這是一個需要考慮的重要特性。
另外,還有一點也很重要,就是使用多個可用性區域域或者至少是不同的資料中心,從而確保系統儘可能地健壯。在2011年4月,Amazon Web Services(AWS)就經曆過,其系統停止運行或者時斷時續地運行了4天。將叢集劃分到不同的地區和資料中心可以提高資源彈性。
效能
需要考慮與技術有關的技術局限性——主要是缺少隔離性,沒有健壯性。在任何多租戶環境中,一個執行個體的效能可以影響相鄰的執行個體。相鄰執行個體使用率驟升會影響可用資源,特別是計算單元和磁碟的IOPS(每秒I/O操作次數)。架構應該處理這種變化。
另外,由於延遲問題,可能會出現瓶頸,即使是在同一個資料中心的執行個體中。雲供應商提供了一些特性用於處理這種情況(比如,AWS placement groups)。不過,如果你的架構有伺服器在不同地區的資料中心裡,那麼你應該考慮使用其它技術(比如,緩衝)。
安全
由於公用雲端的開放性,設計和維持一個安全的基礎設施在任何雲部署中都應該是一種重要的目標。務必採用被廣泛認可的安全實踐:防火牆、最小化伺服器服務以便減少攻擊媒介、保持作業系統版本最新、基於密鑰的身分識別驗證等。但是,挑戰可能來自於需要維護的伺服器數量增加以及在不同的開發環境中使用云:開發環境、預備環境和生產環境。在這種情境下,隔離以及保證每個環境的安全非常重要,因為原型伺服器中的一個漏洞可以提供通過密鑰訪問整個基礎設施的可能。
監控
新資源易於部署使得伺服器數量呈指數增長。這提出了新的問題,監控工具對系統管理而言至關重要。首先,它們在周期性擴充和基於事件的自動擴充中發揮基礎性作用。其次,它們是確保架構健壯性所需工具的一部分,就像Netflix Chaos Monkey那樣。最後,它們對安全性漏洞檢測和事故調查非常重要,正如某些安全性漏洞所表現的那樣。
基礎設施即服務與雲技術