雲端計算的背後有著和自計算歷史一脈相承的共通觀念,但也因為當今時代的環境,而有了一些新的變化而意義。把程式切分成客戶端和伺服器端,然後透過某種協定相互通訊,是很早期的遠端程序叫用(Remote Procedure Call,RPC)就有的觀念。雲端計算基本上也涵蓋了這種模式,但現今的雲端計算,在這種模式之上,究竟具備了什麼樣在不同規模及使用者數量成長速度下的變化及新意義呢?

滿足網路應用程式的系統需求
現今的雲端計算除了具備了讓你將程式放到網路上,然後透過網路足堪存取程式所提供的服務之外,更重要的是,它將達成這件事需要付出的代價,盡可能地降到最低。

在過去,當你在開發一個系統時,如果希望能夠透過網路對外提供服務,那麼你可能會需要購買相關的硬體,包括主機、儲存設備、備援設備等等;也會需要租用機房空間、網路頻寬,以及購買資料庫伺服器軟體、網路應用程式伺服器。而且,除了購買的成長之外,你會需要專門的人員來管理、維護這些硬體及軟體。

在進行這些採購時,可能估算不出實際上究竟需要多大的規模,你的系統使用者可能成長得很快,也可能成長得很慢。不論是多買或少買,都有困擾。買少了,無法滿足使用者的需求,會引來抱怨;買多了,則是白白付出額外的投資成本,造成了金錢上的浪費。

今日的雲端計算有一個明確的目標,便是著眼在解決上述的問題。

雲端計算希望你不僅將服務擺到網路上,而且將這個服務擺到網路上所需的軟硬體資源,也都由雲端計算的平臺提供:主機、儲存設備、備援設備、機房空間、頻寬等等,都由平臺依你實際的需求來配置,而相關的軟體像是應用程式伺服器、資料存取伺服器,也都由平臺來維護及管理。這自然提供了相當大的便利性以及核心功能,而不必操煩基礎設施的管理與安全性、經濟性,也是目前雲端計算的特點。

開發人員可以更心無旁騖地發展系統
除了上述和投資成本有關的特性之外,雲端計算也對程式設計者提供了相當的便利性。

在伺服器程式的開發上,有幾項事情是具備技術難度的。例如,你所開發的系統十分受到好評,所以使用者日漸增多,服務的規模也隨著變大。但是,並不是每個程式設計者都擅長撰寫能提供大規模服務的程式,這具備較高的技術門檻,同時,即使程式設計者具備此種能力,也必須花費較大的心力,才能開發出能提供大規模服務的系統。此外,伺服器端的系統也必須具備更高的容錯能力,即使硬體、網路或軟體發生了部分的錯誤或故障,也會被期待仍然能夠繼續提供服務。而且,當錯誤及故障被排除時,系統也需要快速回復到原貌。當然,系統還得要具備夠好的安全性。這些環節,每一個面向都是專門的技術,即使技術能力足夠,需要付出的心力也不低。

這正是我所說的,雲端計算把應用程式開發者將應用程式放置到網路上,提供服務需要付出的代價盡可能降到最低。所有的資源由雲端平臺供應者提供及管理、所有需要的相關技術及支援系統,也由雲端平臺供應者提供,應用程式開發者更能將心力專注在自己所開發的系統上,而將系統的其餘環境像是規模擴充性、強固性、容錯性、負載平衡、安全性,都由平臺供應者提供基礎的設施。

不需要太高的初期投資,以及具備高門檻的技術管理能力
這樣當然會對現今的開發模式產生衝擊。在過去,雖然也有所謂的虛擬主機租賃之類的服務,但是,像這樣的服務,還沒有將程式擺放到網路上所需要花費的成長及代價,降到最低,它僅僅只提供硬體及網路資源,應用程式開發者需要自行處理的環節還有很多。有些提供像Java或ASP之類應用程式伺服器的服務,雖然應用程式開發者需要做的工作可能會減少,像是將自己的程式部署至應用程式伺服器上,但是,諸如規模擴充性、強固性、容錯性、負載平衡、安全性等等的機制,也都必須自行設計、建立。應用程式開發者除了開發自己的應用之外,仍然得付出不少的心力在這些機制的設計及開發上。

今天,你或許只是一個有著創新應用想法,但還沒有足夠資金奧援的個人開發者或小型團隊開發者,而你的應用程式的型態正好適合放到網路上提供服務,那麼雲端計算便能為你帶來相當的好處:你可以省去初期的投資,也不需要花費太多努力在實際應用之外的其他機制之上,甚至可以完全不需要具備完成這些機制的技術能力。而這便是雲端計算對程式開發者所產生的一大改變。

為了提供以上種種,雲端計算平臺必須處理掉許多工作,將許多細節隱藏起來,才能提供一個高度抽象化的環境及介面,供應用程式開發者運用。而這些技術與工作,便是雲端計算技術的本質內容。所以我們說的雲端計算技術,指涉的多半便是建構出此一高度抽象化的環境,以及應用程式開發介面的相關技術。

例如,雲端計算平臺會供應相關的硬體及網路,但是,實際上可能沒有辦法以每個應用程式或每個開發者對應一部主機的方式的配置方式。

因為,單一個應用程式或單一個開發者的所有應用程式,其負載可能還無法完全耗盡一部主機的所有計算能力,所以一部主機上可能同時允許多個應用程式開發者使用。

為了保護所有的應用程式之間不會相互干擾或影響,也為了,每個應用程式開發者可以的確得到他們所預期該有的服務品質(例如,付費多者可以得到更多的實質CPU時間),因而衍生和虛擬化(Virtualization)相關的技術。透過虛擬化的技術,每個應用程式都可以擁有像是真實的一套主機、作業系統、儲存空間、網路頻寬等等,而且付的錢愈多,得到的資源也就成正比。

除了虛擬化之外,雲端計算平臺還得幫應用程式開發者,處理掉先前所提到的規模擴充性、強固性、容錯性、負載平衡、安全性等諸般機制。這使得應用程式開發者,不需要考慮自己的應用程式即將被部署到一個分散式計算的環境之上──雖然實際上是,卻仍舊可以享受到分散式計算所帶來的運算優勢,而且其餘的技術配套,也都毋需考量。

有些雲端平臺,甚至提供一些API來和程式設計模型相搭配。例如,著名的、由Google所推出的MapReduce,便是一種適用於大規模資料處理的技術。透過MapReduce的API,部署至雲端平臺的應用程式,便可以更有效處理大規模的資料。

開發者將應用程式放置到網路上提供服務,是目前應用軟體演化的趨勢,愈來愈多的軟體朝這個方向設計。而雲端計算的技術內涵,便是努力降低達成此事的門檻──無論是經濟上、技術上,以及時間上的。讓程式設計者無後顧之憂,才能真正在他們專長的應用領域上好好發揮,這才是構建此種平臺最大的目的。

專欄作者


熱門新聞

Advertisement