由浙江大學、Google、RedHat、華為等企業于2015年共同參與成立的雲原生基金會(Cloud Native Computing Foundation,CNCF)秉承着協助、使能、鼓勵(help, enable, encourage)的宗旨,海納百川,是目前在容器、微服務、雲原生領域最活躍的社群之一。CNCF通過建構并推廣一系列的開源技術和标準,為在雲原生時代建構動态(dynamic)、分布式(distributed)環境下的可伸縮(scalable)、可運維(operable)、可觀測(observable)的靈活應用與服務提供先進可靠的技術路線。
圖 1 CNCF組織建構的雲原生生态圖譜
以CNCF社群第一個宣布畢業的開源容器編排項目Kubernetes的代碼貢獻量統計為例,我們可以觀察到企業、高校和個人的緊密協作和貢獻是CNCF社群得以蓬勃發展的基石,自社群創立以來浙大一直積極持續的在社群進行投入,貢獻度始終排名全球第一梯隊,與華為一起領跑國内Kubernetes社群生态。
技術标準化是開源社群健康發展的保障
如同生物多樣性對生物界進化的作用一般,技術多樣性同樣是技術得以不斷演化與進步的保證。目前CNCF社群已經包含了20多個開源項目,而由CNCF繪制的雲原生生态圖譜則包含了超過500種開源技術(圖 1)。在這樣充滿技術多樣性的生态系統中,技術标準保障了不同類型的技術無縫對接,防止出現同類技術惡意競争的情況,是生态系統健康發展的重要保障。
2015年,CNCF成立之初,社群創始成員們就對技術标準化做出了富有建設性的設想,并做了CNCF社群未來工作範圍的總體架構設計(見圖2),其中包括了資源排程、分布式系統服務、應用定義與編排等技術元件與一系列技術間的對接标準。衆多的尚處于設想中的技術标準,其中相當一部分,在2018年的今天都已經成為了現實,包括容器運作時接口标準(Container Runtime Interface)、容器存儲接口标準(Container Storage Interface)和容器網絡接口标準(Container Network Interface)。當然在當今豐富的生态系統中也包含了CNCF成立之初沒有考慮到的技術标準,包括開放服務代理标準(Open Service Broker API)、雲事件标準(Cloud Event)等等。
雲原生開源技術圈流行一句話:“infrastructure should be boring“,即IT基礎設施相關技術逐漸趨于穩定。Open Container Initialitive(簡稱OCI)組織的出現,以及以containerd/runc為代表的基礎容器運作時參考實作的廣泛采用,标志着雲原生時代的第一層基礎設施的穩定化。而Kubernetes在容器編排領域的勝出,則代表了雲原生時代的第二層技術設施的穩定化。
這些底層技術的穩定使得生态系統内的其他廠商有信心在相關技術上繼續投入,同樣也使得終端使用者有信心嘗試和采用雲原生、微服務技術。更為重要的是為雲原生生态内的上層技術的繁榮帶來的強大的助推作用。
以Kubernetes API為基礎,在CNCF社群中出現了大量Kubernetes-Native的上層技術,包括Service Mesh類的Istio、Linkerd等,雲原生存儲類的Rook項目,服務無計算/函數計算類的fission項目,快速部署管理深度學習架構的kubeflow項目,大資料類架構管理的Spark on Kubernetes,複雜應用定義與管理類的ksonnet、Helm項目等。這些上層技術的出現使得雲原生可以被應用到更為廣泛的場景中,除了常見的無狀态/有狀态應用之外,也包括serverless、AI、大資料等多種場景,并反過來推進了Kubernetes等雲原生技術的進一步推廣。
需要指出的是,在基礎設施穩定化的大趨勢下,也存在一些底層的新興力量,比如近期Google釋出的gVisor運作時技術,在遵循OCI運作時标準的同時,為容器運作時的實作帶來了全新的思路。
無服務的興起和雲計算抽象層次的提升
無服務計算(serverless)是新近加入到雲原生生态圖譜中的一大類新興技術。我們不應把無服務計算等價為某項具體的技術(比如亞馬遜的Lambda),也不應該将它等價為某類具體的技術(比如函數計算)。無服務技術代表了雲計算服務抽象層次的提升。作為終端使用者,不再需要關于底層技術設施(如虛拟機叢集的規格定義和管理),而将注意力集中到更高抽象層次的應用開發上去。
CNCF社群中的服務無生态圖譜
從這個角度了解無服務計算,我們可以認為無服務計算是新的也是舊的。說它是舊的,因為它包括IT領域之前早就出現過的Mobile-Backend-as-a-Service(MBaaS),也包括2011年開源的經典PaaS技術Cloud Foundry+BOSH+IaaS(雖然當時并未從serverless角度考慮,但通過BOSH自動調用IaaS層接口,我們可以實作基礎設施的透明化管理,即實作根據工作負載動态調整Cloud Foundry所使用的IaaS虛拟機叢集的規模,是以雖然PaaS和FaaS等serverless技術有所差別,我們将Cloud Foundry+BOSH+IaaS技術也歸類到無服務計算中)。說它是新的,因為以AWS Lambda為代表的函數計算,以及更為近期的AWS Fargate和Azure ACI(Azure Container Instances)以及華為雲CCI(Cloud Container Instance)服務正在不斷擴充無服務計算的内涵。浙江大學一直緻力于新型雲計算技術的研發,早在2011年就開始參與Cloud Foundry開源項目,而在近期又參與到fission等開源FaaS項目中。
無服務計算符合雲計算一直以來細化分工、提升生産力的總體思想,我們可以預測,無服務計算将不僅限于函數計算,而将在未來演化出多種形式的計算模式,而面向無服務計算的安全、監控等多方面相關技術生态将進一步繁榮(目前CNCF的無服務生态圖譜中僅僅包含工具、架構等少數類别,如圖 4所示)。由于涉及到應用架構的演進,無服務計算的落地不會發生在一夜之間,而将結合微服務技術,在未來的幾年裡緩慢推進。而在此過程中類似CNCF社群中的virtual kubelet技術将作為新舊架構應用開發運維模式的銜接與橋梁。
雲-邊-端一體化的計算新格局
IDC此前的資料顯示,随着5G的到來和IoT的發展,到2020年,将有超過500億的終端裝置聯網。而考慮到帶寬的消耗、網絡的延遲、以及資料隐私性保護等挑戰,在智慧城市、智慧醫療、智能制造、智能家居等資料量龐大、對處理延遲敏感、對資料隐私敏感的場景下,終端裝置産生的資料中有超過半數需要在終端裝置或網絡邊緣側就近分析處理,而中心化的雲端隻處理計算資源需求大、實時性要求不高的計算任務,如AI模型訓練。未來的計算不僅僅局限在大型資料中心,而将分布在由雲-邊-端構成的一體化連續頻譜上。
從計算平台的角度看,雲-邊-端一體化的計算新格局至少提出了以下兩大挑戰:邊緣作業系統和端雲一體化管理平台。
當我們把終端裝置和接入網關等構成的叢集當做一個個的小型資料中心,每個邊緣節點不再運作單一的任務,而是變成一個可以動态執行被排程該節點的多類型任務的通用計算節點。是以邊緣作業系統不僅僅需要負責邊緣裝置上的任務排程、存儲網絡管理等傳統作業系統職責,也需要提供一套完整的安全隔離機制,以防止動态排程到同一邊緣裝置上任務之間的互相影響。
而容器作為一類輕量級的作業系統隔離技術就可以在這裡發揮作用。根據不同場景下資源的豐富程度和功能需求,在具體做法上我們可以看到部署完整的Docker方案的實踐,也可以看到更加輕量化的以containerd/runc為基礎建構的開源IoT平台eliot,或者類似百度IoT Intelligent Edge平台那樣基于Linux核心的namespace,cgroup技術直接建構定制化容器隔離的技術方案。浙江大學在這方面的研究主要圍繞着unikernel技術,相比常見的containerd/runc容器技術,通過rumpkernel,OSv等unikernel技術可以進一步減少攻擊面,減少資源占用和加快響應速度,實作邊緣裝置上安全計算環境。
端雲一體化管理平台負責管理邊緣裝置構成的大量小型資料中心。開源社群已經有關于如何将Kubernetes等優秀的容器編排引擎應用到大量小型資料中心的管理上。2018年5月在丹麥哥本哈根舉行的KubeCon+CloudNativeCon大會上開辟了專門的session讨論Kubernetes與邊緣計算話題。跟CNCF同在Linux基金會下的EdgeX Foundry社群也發起了EdgeX Foundry on Kubernetes,即将該社群的邊緣計算平台EdgeX運作在Kubernetes之上,利用Kubernetes完成資源排程管理的技術讨論。微軟的IoT Edge Virtual Kubelet開源項目旨在讨論如何使用Kubernetes建構包含傳統資料中心和邊緣計算的混合端雲一體化管理平台。
微軟的IoT Edge Virtual Kubelet開源項目架構,使用Kubernetes建構包含傳統資料中心和邊緣計算的混合端雲一體化管理平台。圖檔來源:github.com/azure/iot-edge-virtual-kubelet-provider