2017年6月19-20日,開源技術盛會LinuxCon ContainerCon CloudOpen(LC3)首次在中國舉行。兩天議程滿滿,包括 17 個主旨演講、8 個分會場的 88 場技術報告和微軟等公司的技術展覽和動手實驗。LinuxCon 吸引了衆多國際國內互聯網巨頭、電信巨頭和上千名業界人士參會,包括Linux創始人Linus Torvalds,大咖齊聚共同關注業界動態。web
SDN/NFV:兩大支柱構建將來網絡算法
本次LC3 會議,探討將來網絡的構建,其中出現頻率最高的關鍵詞就是 SDN(軟件定義網絡) 和NFV(網絡功能虛擬化) 。傳統網絡是個「黑盒子」,管理不夠靈活,支持的網絡規模不夠大,網絡狀態的可見性和可調試性不足。隨着雲計算興起的軟件定義網絡(SDN)和網絡功能虛擬化(NFV)就致力於解決「黑盒」的問題。SDN 南向接口統一了紛雜的網絡設備 API,北向接口則能夠提供網絡全局視圖,方便集中運維。NFV 則是用軟件來實現防火牆、負載均衡、虛擬網絡隧道等網絡功能(network function),使得網絡功能更加靈活。數據庫
在會議上,雲計算和5G 巨頭紛紛指出使用 SDN 和 NFV 的新理由:異構網絡需求的集中調度。不論是雲服務,仍是萬物互聯的 5G 電信網絡,客戶和應用的需求都千差萬別,有的須要高帶寬,有的須要低延遲,有的須要高穩定性。這就須要雲計算平臺和 5G 電信網絡的基礎架構可以在一張物理網絡上支持多張虛擬網絡,併爲不一樣的虛擬網絡提供不一樣的服務質量保證(QoS)。只有軟件定義的網絡管理、網絡功能和網絡調度才能靈活應對客戶和應用的異構網絡需求。編程
隨着SDN 和 NFV 在業界的普遍採用,生態和分享變得愈來愈重要,ONAP、ODL、OPNFV等網絡管理、網絡功能的開源項目受到衆多企業關注。緩存
快速增加的網絡速度和Linux 網絡協議棧處理能力之間的差距日漸明顯,Linux 網絡協議棧也存在延遲的不穩定性,多個技術報告提到使用 Intel DPDK、eBPF 等技術提升數據平面的吞吐量和延遲穩定性。Open vSwitch 開發組的報告中,特別提到用 P4 做爲 CPU 和可編程交換機上統一的 SDN 編程語言,減輕用 C 語言開發 OVS 功能的負擔。DPDK 開發組提出了基於 fd.io 的cryptodev 框架,使用 Intel QuickAssist 等硬件加速設備加速數據包加解密,利用異步和向量包處理實現了單機40 Gbps 線速的IPSec 網關。Azure雲使用 SR-IOV 和 FPGA 加速,提供了單虛擬機25 Gbps 的網絡吞吐量、比軟件虛擬交換機低 10 倍的延遲。安全
大規模虛擬網絡的SDN 控制器性能是業界共同關注的話題。例如阿里雲一個數據中心超過 10 萬臺服務器,每秒上報一次 heartbeat;若是數據中心斷電後電力恢復,10 萬臺交換機初始化配置須要多久;虛擬機遷移在不斷髮生,所有由 SDN 控制器處理負載太高。阿里雲的解決方案是作配置緩存,每臺服務器採用相似 ARP 的方式自學習網絡配置,減輕 SDN 控制器的負載;使用 UDP、定製高性能 TCP 協議棧來加速 SDN 控制器。服務器
SDN 控制器傳統上是隻負責config、provisioning,思科提出,還應該加入實時數據分析(例如硬件支持的數據包路徑跟蹤、統計和採樣能力)、端到端的資源管理、基於身份的策略支持,使得開發者沒必要關心虛擬和物理網絡的結構,而是能夠直接指定應用的需求。阿里雲也強調了虛擬網絡的調試和運維能力,依賴 SDN 控制器實現了抓包的軟件化、API 化,即上層輸入用戶和虛擬機信息,下層自動對相關數據包進行染色和鏡像。微信
軟件定義的概念不只在網絡,在存儲領域也獲得了實踐。華爲的 OpenSDS 把傳統管理員視角的命令行配置 API 改進成統1、簡單、表意的 YAML 配置文件,把依賴存儲專業知識的非自動化配置改進成基於策略的自動化業務編排,並容許應用在雲平臺上體現差別化的高級特性。網絡
Microservices:開發和管理的最靈活選擇架構
傳統基於腳本的軟件安裝部署容易致使複雜的依賴問題和不一致的運行環境,現代服務應當拆分爲多個微服務(microservice)的組合。以Docker 爲表明的容器(container)技術是微服務目前應用最普遍的載體。
容器是軟件封裝、部署、分發的一種工具。容器能夠運行在Linux 內核命名空間裏,能夠運行在 CoreOS、Atomic等定製操做系統上,也能夠運行在半虛擬化或全虛擬化的虛擬機裏。Windows 系統也已經支持三種容器部署方式:基於 Linux 子系統的原生 Linux 容器、基於 Hyper-V 虛擬機的 Linux 容器、基於 Hyper-V 虛擬機的 Windows 容器。事實上,因爲 EPT、SR-IOV 等硬件輔助虛擬化技術的成熟,基於虛擬機的容器帶來的虛擬化開銷是能夠接受的,還提供了更好的隔離性。
除了容器,Unikernel也是部署微服務的一種高效方案。既然hypervisor已經提供了資源管理、調度和隔離,虛擬機裏若是隻運行一個任務,爲何還須要虛擬機裏的內核呢?虛擬機裏的應用能夠直接經過一套library 訪問 hypervisor。劍橋大學和Docker 社區聯合開發的 MirageOS 就是用 OCaml編寫的一套library OS,提供了clean-slate design的類型安全 API,支持 Xen、KVM 虛擬機和 x8六、ARM 架構。對於較簡單的微服務,Unikernel 更加高效;對於依賴關係較複雜的微服務,可使用 LinuxKit 精簡現有的容器。
微服務帶來的主要性能挑戰是:微服務的粒度比傳統的虛擬機小不少,容器的數量多、生命週期短。Red Hat 援引New Relic 的統計,46% 的容器只存活不到一個小時,25% 的容器甚至存活不到 5 分鐘。Google 把絕大多數內部服務容器化、使用 Kubernetes 管理,每週須要新建 20 億個容器,這意味着平均每秒新建 3000 多個容器,每一個容器又須要 IP 地址,這對容器編排系統(orchestrator)和虛擬網絡管理系統提出了可擴放性的挑戰。此外,對於一樣數量的物理服務器,容器的數量比虛擬機多一個數量級,給監控和日誌分析帶來了挑戰。
將傳統服務拆分爲微服務、每一個微服務部署爲一臺容器後,每臺物理機上運行的容器數量多、容器間的通訊頻繁,容器的網絡通訊和容器之間的上下文切換都會成爲性能瓶頸。Red Hat 提出了預建立容器的方法,維護一個容器池以分攤容器建立銷燬的開銷;在網絡方面,容器間互聯的overlay network須要用硬件加速MACVLAN、IPVLAN 等隧道協議和 IPSec、MACSec 等加密解密。在虛擬機網絡中,一般使用 SR-IOV 把虛擬機暴露給物理網卡虛擬出的 VF 實現加速,然而容器的數量一般遠遠多於虛擬機,網卡沒法虛擬出足夠的 VF 給容器,而 Docker 默認使用的Linux bridge 吞吐量和延遲穩定性都不能知足要求,業界多使用 DPDK 等高性能數據平面來解決容器間的通訊問題。
容器中的應用程序訪問網絡的接口有DPDK、socket、定製協議棧等;容器間通訊和匯聚的 overlay 層面有OVS、Linux bridge、SR-IOV 直通等;物理網卡的驅動程序又有多種。不一樣的網絡訪問模型在性能、靈活性、兼容性間有不一樣的折中,華爲雲網絡實驗室提出了 iCAN 容器網絡框架,簡化編程多種容器網絡的數據通路、控制策略和服務質量要求,支持 flannel、OpenStack等多種容器網絡編排器(orchestator)。
容器技術致力於微服務的可靠部署,從微服務源碼到二進制的編譯過程也是須要保證可靠性的,這就是可重現構建(reproducible build)。可重建構建採用輸入校驗和、有序編譯過程、編譯環境版本號一致、消除未初始化內存、假裝時間戳、清洗文件屬性等技術保證生成的軟件包是逐字節徹底肯定的。Debian 等發行版已經採用可重現構建技術。
GPU虛擬化:共享、安全、高效
Linux 和Git 的創始人、開源軟件的精神領袖 Linus Torvalds 與VMWare VP Dirk Hohndel 的訪談是 LC3 大會的最大看點。Dirk 的一個問題是,若是你從今天開始,準備作什麼項目。Linus 回答,他創造Linux 的時代,計算機硬件的編程比他童年時代變得容易了不少。Linus 自嘲本身不是一個硬件高手,由於老是把硬件弄壞。在今天,Linus 可能會考慮作 FPGA,若是對芯片設計感興趣的話,由於 FPGA 的開發成本如今低了不少;或者 Raspberry Pi,能夠作一些很酷的小東西。
在雲和機器學習相結合的浪潮中,GPU 虛擬化和 GPU 容器的調度帶來了新的技術挑戰。GPU 能夠經過 PCIepass-through 綁定到虛擬機內,Azure 等雲服務就採用了這樣的技術實現虛擬機的高效GPU 訪問。當多個虛擬機須要共享 GPU 時,vSphere和 Xen 支持把一個物理 GPU 的核分割分配到多個虛擬機裏,可是採用 hypervisor 虛擬設備轉發的方式,性能較低。Intel的 GVT 和 NVIDIA的GPUvm 技術能夠把一個 GPU 虛擬化成多個 vGPU,vGPU 能夠被分配到不一樣的虛擬機裏,以實現物理 GPU 的空間多路複用。爲了實現 GPU 的分時多路複用,Intel 提出了 GPU 命名空間和控制組,容器內核的顯卡驅動把各個容器的計算任務按照優先級和時間片調度到GPU 執行。
GPU 虛擬化是爲了複用 GPU 解決多個小型的計算問題(一虛多),而一些大規模的計算問題須要多個 GPU,這就須要調度互聯的 GPU 虛擬機或容器(多虛一)。GPU 之間能夠經過 NVLink、PCIe或者GPUDirect RDMA 通訊,比經過CPU 的網絡協議棧通訊高效得多。隨之而來的挑戰,在虛擬網絡環境下誰來給 GPUDirect RDMA 的數據包作隧道封裝和訪問控制;如何在虛擬機和容器的調度算法中體現 GPU 通訊的需求。
微軟:與開源共舞
雲計算平臺也正在打破公司的界限,擁抱開源和開放技術。微軟在主旨演講中提到,Azure 公有云平臺中國區超過60% 的虛擬機運行 Linux,全球 30% 的虛擬機運行 Linux,這個比例還在逐年增長。Azure 雲從操做系統、容器編排服務到數據庫、編程語言、運維框架、應用程序都全面支持開源。以前只能運行在 Windows 上的SQL Server、PowerShell 等也支持 Linux 了。與此同時,Windows 對開發者的友好程度也在與日俱增,例如 Linux 子系統使Linux 開發工具能夠原生運行在 Windows 系統上、VisualStudio 與 Git 的集成、Hyper-V 對 Docker 容器的支持。
李博傑 我的介紹
李博傑,本科畢業於中國科學技術大學少年班學院,2014年加入中國科學技術大學與微軟亞洲研究院的聯合培養博士生項目,研究方向是數據中心網絡和可重構硬件(FPGA)上的編程。
感謝你關注「微軟亞洲研究院」,咱們期待你的留言和投稿,共建交流平臺。來稿請寄:msraai@microsoft.com。
微軟小冰進駐微軟研究院微信啦!快去主頁和她聊聊天吧。