JUN21

云環境下的軟件開發需進行重新思考

2013-06-21信息來源:gigaom.com

編者注:此文是 Eucalyptus Systems CEO Marten
Mickos 的文章。

 

軟件自出現以來模式就未曾改變:運行應用,然后應用則是在平臺上面跑的。但是由于基礎設施的飛躍發展,應用設計和部署的基礎原則的確會不時改變—有時候這種變化還很激烈。

比方說,1980 年代出現 PC、x86 架構的出現以及客戶機 / 服務器模式的誕生令應用應用設計原則發生了巨大的改變。然后,隨著 web 和開源技術在 1990 年代中期的出現又再次劇變。每每發生這種巨變,開發者都被迫要對軟件的開發和部署方式進行反思。

 

 

現在的基礎設施能力又有了新的飛躍,其主導是 Amazon Web Services(尤其在網絡速度有了飛躍提升的前提下)。顯然,為了能夠充分利用新的云設施,那些在 AWS 上取得成功的應用必須與運行在企業服務器上的應用有著本質的不同—哪怕是與運行在虛擬服務器上的應用也不一樣。除此以外,還有其他一些因素決定了云應用在設計上必須與過去有所不同。以下列舉的就是其中一些關鍵因素,這些因素也決定了新舊世界演變的方式:

 

伸縮性

舊世界的伸縮是通過擴容實現的—要想容納更多的用戶或數據,只需購買更大對的服務器。

而在新世界里,伸縮性通常是通過橫向擴展實現的。要增加的不是更大的機器,而是同類的多臺機器。在云世界中,那些機器是虛擬機。

 

彈性

以前,軟件是不可靠的,彈性是在硬件層實現的。

今天,底層的基礎設施硬件被視為是薄弱環節,所以應用必須自我調整來適應。應用并不會保證每一個虛擬機實例都工作正常。單臺虛擬機一段時間失效也沒關系,應用必須對此做好準備。

就拿 Netflix 來說吧,這可以說是最先進的云用戶了,它在云應用的道路上邁出的步伐是最遠的。他們有一個過程叫做 ChaosMonkey,會隨機地殺死應用負載下的虛擬機實例。這么做的目的是什么呢?就是為了確保應用的正常運轉和彈性:通過讓應用面對隨機的實例損失來迫使應用開發者開發出更加彈性的應用。

 

爆發性

在舊世界里,像財務和工資單這樣的應用其負載一般都是很穩定和可預測的。特定時刻的系統用戶數、待處理記錄數基本上都是已知的。

在新世界里,工作負載是多變的、不可預知的。今天的軟件系統的觸角必須伸得更遠,要到達有服務需求的消費者和設備那里,時間不可預測,負載無法衡量(想想看那個成為眾矢之的的 12306 網站吧)。要想適應獨立應用負載這些不可預見的波動需要新的架構。雖然我們現在已經在云上面了,但是顯然還處在初級階段。

 

軟件多樣性

在過去,軟件并沒有太多的多樣性。每一款應用都是用一種語言編寫的,使用的是一種數據庫。公司一般都是依托與一個或少數幾個操作系統。軟件棧簡單到令人乏味的地步(至少從現在看是這樣的)。

而在云的新世界里,情況截然不同。一個應用里面可能就會用到許多不同的語言,不同的庫,不同的工具包以及不同的數據庫產品。同時由于在云端時你能夠創建和啟動自己的鏡像,根據特定需求進行定制,一家公司的應用必須能夠運行在各種不同的配置上。

從虛機到云

哪怕是相對較新的 hypervisor 和現代的云思維方式之間也是有區別的。虛擬化的的先鋒和領袖 VMware 所開發的 hypervisor 表現基本上與物理機器并無二致。

而在云端,虛擬的并不是物理服務器的代表,而是計算單元的代表。

 

用戶的耐性

在舊世界,用戶受到的教育是要有耐心。因為系統的響應可能需要很長一段時間才能完成一些簡單的提取或更新請求,新功能的添加也很緩慢。

在新世界里,用戶是沒有耐心的。他們幾乎無法容忍時延,不愿意等待。他們希望軟件經常更新,如果說不是每天的話,起碼也是每周。你可以在自服務 IT 找到相關證據。在那里,你不是遞張條子給 IT 部門然后等待幾天后回應了事,用戶所需的資源可以實現自提供。

 

 

japanese人妻无码人妻