雲計算將會如何改變程式設計模式?雲程式設計?

程式設計本身是否也能上雲?在雲上程式設計會跟本地開發有什麼不同?

如何編寫雲應用,來充分發揮雲平臺的能力?分為哪些不同的模式?

為什麼編寫雲應用那麼複雜?如何降低這些複雜度?雲原生應用的開發平臺,能否解決

這些問題?

雲計算將會如何改變程式設計模式?雲程式設計?

首先,來看看如何實現雲上程式設計。

實現雲上程式設計

喜歡程式設計的人,為了獲得流暢的效能,電腦配置總是很高,雖然這足以滿足 C/C++ 時代的

程式設計需要,但進入 Java 時代後,因為應用結構越來越複雜,工程師們有時需要在筆記本或

桌面電腦上,安裝各種複雜的中介軟體,甚至還要安裝資料庫軟體,這時,電腦的配置即便再

高,也很難安裝和配置好這麼複雜的環境。那麼到了雲計算時代,挑戰就更大了,比如,你

能想象在電腦上安裝 Hadoop 等軟體,來做大資料功能的開發嗎?

其實,編寫一個小的應用還好,但現在的應用越來越複雜,所需的服務端資源越來越多。

因為程式設計跟雲的關係越發緊密,有些開發工具已經跟雲平臺有了一定的整合,方便開發者按

需獲取雲端資源。比如,微軟的 Visual Studio 支援直接使用 Azure 雲上的資源。

再進一步,IDE 本身也可以雲化,我們可以把它叫做“雲 IDE”。你的電腦只負責程式碼編輯

的工作,程式碼本身放在雲上,編譯過程以及所需的類庫也放在雲上。Visual Studio Code

就具備 UI 和服務端分離的能力。還有一些服務商提供基於瀏覽器的 IDE,也是實現了前後

端的分離。

1。 易於管理的程式設計環境

雲計算將會如何改變程式設計模式?雲程式設計?

程式設計環境完全配置在雲上,不用在本地配置各種依賴項。

這一點,會給程式設計教育這個領域,提供很大的幫助。因為,學習程式設計的人能夠根據需要,打

開不同的程式設計環境,立即投入學習。反之,如果要先做很多複雜的配置才能開始學習,學習

熱情就會減退,一些人也就因此止步了。

其實,在軟體開發團隊中,你經常會看到這樣一個現象:新加入專案組的成員,要花很長的

時間,才能把開發環境搭建起來。因為他們需要安裝各種軟體,開通各種賬號等等。那麼,

如果是基於雲 IDE 開發的,這些麻煩都可以省掉。

2。 支援跨平臺程式設計

雲計算將會如何改變程式設計模式?雲程式設計?

有些程式設計所需要的環境,在本地很難配置,在雲中開發就很簡單。比如,可以用 Windows

電腦為 Linux 平臺開發程式,甚至你可以在雲上,為你的無人機開發程式,並下載到無人

機上。

在為手機程式設計時,比較複雜的一項工作是,適配各種不同型號的手機。這時,你只需要透過

雲 IDE,整合同樣基於雲的移動應用測試環境,就可以在成百上千種型號的手機上測試你的

應用了。

3。 更強的計算能力

雲計算將會如何改變程式設計模式?雲程式設計?

有些軟體的編譯非常消耗 CPU,比如,完整編譯 LLVM 可能需要一兩個小時,而充分利用

伺服器的資源可以讓編譯速度更快。如果你從事 AI 方面的開發,體會會更深,AI 需要大量

的算力,並且 GPU 和 TPU 都很昂貴,我們很難自己去搭建這樣的開發環境。而基於雲開

發,你可以按需使用雲上的 GPU、TPU 和 CPU 的計算能力。

4。 有利於開發過程的管理開發活動集中到雲上以後,會有利於各種管理工作。比如,很多軟體專案是外包開發的,那

麼你可以想象,基於雲程式設計的平臺,甲乙雙方的專案管理者,都可以獲得更多關於開發過程

的大資料,也更容易做好原始碼的保護。

5。 更好的團隊協作

越來越多的人已經習慣在網上編寫文件,平心而論,線上文件工具並沒有本地的 Office 軟

件功能強大,是什麼因素讓我們更加偏愛線上文件工具呢?就是它的協作功能。團隊中的成

員可以同時編輯一個文件,還可以方便地將這個文件在團隊中分享。

而我比較希望見到這樣的場景,那就是,程式設計師們可以基於同一個程式碼檔案,進行點評和交

互式的修改,這相當於基於雲的結對程式設計,對於加強團隊的知識分享、提升軟體質量都會有

好處。

如何編寫雲應用?

雲計算將會如何改變程式設計模式?雲程式設計?

學習編譯原理,你可能會有一個感受,那就是程式設計可以在不同的抽象層次上進行。也就是

說,你可以透過抽象,把底層複雜的技術細節轉換成上層簡單的語義。

程式設計師最早是直接編寫機器碼,指令和暫存器都要直接用 0101 來表示。後來,馮·諾依曼

的一個學生,發明了用助記符的方法(也就是組合語言)簡化機器碼的編寫。用匯編語言編

程的時候,你仍然要使用指令和暫存器,但可以透過名稱來引用,比如 34 講中,用

pushq %rbp 這樣的彙編指令來表示機器碼 0x55。這就增加了一個抽象層次,用名稱代替

了指令和暫存器的編碼。

而高階語言出現後,我們不再直接訪問暫存器,而是使用變數、過程和作用域,抽象程度進

一步增加。總結起來,就是我們使用的語言抽象程度越來越高,每一次抽象對下一層的複雜性做了屏

蔽,因此使用起來越來越友好。而編譯技術,則幫你一層層地還原這個抽象過程,重新轉換

成複雜的底層實現。

雲計算的發展過程跟編譯技術也很類似。雲計算服務商們希望透過層層的抽象,來遮蔽底層

的複雜性,讓雲計算變得更易用。

而且,通常來說,在較低的抽象層次上,你可以有更大的掌控力,而在更高的抽象層次上,

則會獲得更好的方便性。虛擬機器是人們最早使用雲資源的方式,一臺物理伺服器可以分割成多個虛擬機器。在需要的時

候,可以建立同一個虛擬機器映象的多個例項,形成叢集。因為虛擬機器包含了一套完整的操作

系統,所以佔據空間比較大,啟動一個例項的速度比較慢。

我們一般是透過編寫指令碼來管理軟體的部署,每種軟體的安裝部署方式都不相同,系統管理

的負擔比較重。

最近幾年,容器技術變得流行起來。

雲計算將會如何改變程式設計模式?雲程式設計?

容器技術可以用更輕量級的方式,分配和管理計算資

源。一臺物理伺服器可以執行幾十、上百個容器,啟動新容器的速度也比虛擬機器快了很多。

跟虛擬機器模式相比,容器部署和管理軟體模組的方式標準化了,我們透過 Kubernetes 這

樣的軟體,編寫配置檔案來管理容器。從編譯原理的角度出發,這些配置檔案就是容器管理

的 DSL,它用標準化的方式,取代了原來對軟體配置進行管理的各種指令碼。

無伺服器(Serverless)架構,或者叫做 FaaS(Function as a Service),做了進一步

的抽象。你只要把一個個功能寫成函式,就能被平臺呼叫,來完成 Web 服務、訊息佇列處

理等工作。這些函式可能是執行在容器中的,透過 Kubernetes 管理的,並且按照一定的

架構來協調各種服務功能。

但這些技術細節都不需要你關心,你會因此喪失一些掌控力,比如,你不能自己去生成很多

個執行緒做平行計算。不過,也因為需要你關心的技術細節變少了,程式設計效率會提高很多。

上面三個層次,每一級都比上一級的抽象層次更高。就像編譯技術中,高階語言比組合語言

簡單一樣,使用無服務架構要比直接使用虛擬機器和容器更簡單、更方便。

但即使到了 FaaS 這個層次,編寫一個雲應用仍然不是一件簡單的事情,你還是要面臨很多

複雜性,比如,處理應用程式與大容量資料庫的關係,實現跨公有云和私有云的應用等等。

那麼能否再進一步抽象並簡化雲應用的開發?是否能透過針對雲原生應用的程式設計平臺,來實

現這個目標呢?

這期就分享到這,希望多關注、收藏、轉發、點贊、評論!期待下次再見!