云環(huán)境下的軟件開發(fā)需進行重新思考
編者注:此文是 Eucalyptus Systems CEO Marten Mickos 的文章。
軟件自出現(xiàn)以來模式就未曾改變:運行應用,然后應用則是在平臺上面跑的。但是由于基礎設施的飛躍發(fā)展,應用設計和部署的基礎原則的確會不時改變—有時候這種變化還很激烈。
比方說,1980 年代出現(xiàn) PC、x86 架構的出現(xiàn)以及客戶機 / 服務器模式的誕生令應用應用設計原則發(fā)生了巨大的改變。然后,隨著 web 和開源技術在 1990 年代中期的出現(xiàn)又再次劇變。每每發(fā)生這種巨變,開發(fā)者都被迫要對軟件的開發(fā)和部署方式進行反思。
現(xiàn)在的基礎設施能力又有了新的飛躍,其主導是 Amazon Web Services(尤其在網(wǎng)絡速度有了飛躍提升的前提下)。顯然,為了能夠充分利用新的云設施,那些在 AWS 上取得成功的應用必須與運行在企業(yè)服務器上的應用有著本質的不同—哪怕是與運行在虛擬服務器上的應用也不一樣。除此以外,還有其他一些因素決定了云應用在設計上必須與過去有所不同。以下列舉的就是其中一些關鍵因素,這些因素也決定了新舊世界演變的方式:
伸縮性
舊世界的伸縮是通過擴容實現(xiàn)的—要想容納更多的用戶或數(shù)據(jù),只需購買更大對的服務器。
而在新世界里,伸縮性通常是通過橫向擴展實現(xiàn)的。要增加的不是更大的機器,而是同類的多臺機器。在云世界中,那些機器是虛擬機。
彈性
以前,軟件是不可靠的,彈性是在硬件層實現(xiàn)的。
今天,底層的基礎設施硬件被視為是薄弱環(huán)節(jié),所以應用必須自我調整來適應。應用并不會保證每一個虛擬機實例都工作正常。單臺虛擬機一段時間失效也沒關系,應用必須對此做好準備。
就拿 Netflix 來說吧,這可以說是***進的云用戶了,它在云應用的道路上邁出的步伐是最遠的。他們有一個過程叫做 ChaosMonkey,會隨機地殺死應用負載下的虛擬機實例。這么做的目的是什么呢?就是為了確保應用的正常運轉和彈性:通過讓應用面對隨機的實例損失來迫使應用開發(fā)者開發(fā)出更加彈性的應用。
爆發(fā)性
在舊世界里,像財務和工資單這樣的應用其負載一般都是很穩(wěn)定和可預測的。特定時刻的系統(tǒng)用戶數(shù)、待處理記錄數(shù)基本上都是已知的。
在新世界里,工作負載是多變的、不可預知的。今天的軟件系統(tǒng)的觸角必須伸得更遠,要到達有服務需求的消費者和設備那里,時間不可預測,負載無法衡量(想想看那個成為眾矢之的的 12306 網(wǎng)站吧)。要想適應獨立應用負載這些不可預見的波動需要新的架構。雖然我們現(xiàn)在已經(jīng)在云上面了,但是顯然還處在初級階段。
軟件多樣性
在過去,軟件并沒有太多的多樣性。每一款應用都是用一種語言編寫的,使用的是一種數(shù)據(jù)庫。公司一般都是依托與一個或少數(shù)幾個操作系統(tǒng)。軟件棧簡單到令人乏味的地步(至少從現(xiàn)在看是這樣的)。
而在云的新世界里,情況截然不同。一個應用里面可能就會用到許多不同的語言,不同的庫,不同的工具包以及不同的數(shù)據(jù)庫產(chǎn)品。同時由于在云端時你能夠創(chuàng)建和啟動自己的鏡像,根據(jù)特定需求進行定制,一家公司的應用必須能夠運行在各種不同的配置上。
從虛機到云
哪怕是相對較新的 hypervisor 和現(xiàn)代的云思維方式之間也是有區(qū)別的。虛擬化的的先鋒和*** VMware 所開發(fā)的 hypervisor 表現(xiàn)基本上與物理機器并無二致。
而在云端,虛擬的并不是物理服務器的代表,而是計算單元的代表。
用戶的耐性
在舊世界,用戶受到的教育是要有耐心。因為系統(tǒng)的響應可能需要很長一段時間才能完成一些簡單的提取或更新請求,新功能的添加也很緩慢。
在新世界里,用戶是沒有耐心的。他們幾乎無法容忍時延,不愿意等待。他們希望軟件經(jīng)常更新,如果說不是每天的話,起碼也是每周。你可以在自服務 IT 找到相關證據(jù)。在那里,你不是遞張條子給 IT 部門然后等待幾天后回應了事,用戶所需的資源可以實現(xiàn)自提供。