我跟OpenStack 1-8年,從ABC到HI、到KO
我跟OpenStack從ABC、HI到KO
2010年底,因電信級支撐平臺和業務對虛擬化的需要,我在ZTE開始了從嵌入式Linux向雲端計算的轉型。
當時的OpenStack版本還處於A、B、C階段,與端莊有型的CloudStack,簡潔明快的OpenNebula,高階大氣的Eucalyptus相比,可以合稱IaaS初生年代的四小龍。其中的Eucalyptus在學術圈被高談闊論,中國移動的大雲用上了OpenNebula,CloudStack被Citrix給收了,OpenStack卻還在蹣跚學步。轉眼八年過去了, 如今的那三位或淡出江湖,或銷聲匿跡,只有OpenStack獨霸高處,至少在開源界是四顧無人敵,所以一時難免心生唏噓。
由於當年這四個開源IaaS專案的前景未明,難分上下,所以我們都嘗試做了編譯部署和原始碼級預研,程式碼看得最多的是OpenNebula,一是因其簡單易懂的輕量級架構,二是因其採用C++實現,對於嵌入式C開發出身的團隊比較容易上手,畢竟那些年Python還沒火起來。最後集眾家之所長,我們從零起步開發了一個電信級的虛擬化管理平臺TECS,底層先是採用了Xen,後來才支援了KVM,釋出之後就用在了ZTE的GoTa系統、核心網等通訊業務場景中。
TECS平臺的通用支撐層中就有基於Qpid的AMQP訊息佇列,利用了OpenNebula的方案,並進一步改造成了支援多執行緒、多程序、多節點、層次更豐富的通訊模式,並利用該機制實現了一個有向無環圖的操作事務系統,支援異常事務的多個並行化步驟的集體操作回滾。當然作為支撐層,除了通訊,還有Shell、定時器、序列化、資料庫、異常處理等通用元件,記得當時光是針對這個支撐層的設計方案文件就寫了100多頁。
到了2013年,OpenStack相繼釋出了Havana、IceHouse版本,彷彿暗示著該從入門ABC到了說Hi的時候了。由於電信運營商重視NFV,需要一個開放的虛擬化平臺提供支撐,演化出一個更廣闊的技術生態鏈。所以當時的團隊只能忍痛放棄了自己打造了三年的虛擬化平臺,轉向了維護OpenStack的I版本。起初總歸是有些心理排斥感,看到OpenStack的什麼功能都是自己曾經玩過的,而且它對細節穩定性的要求跟電信級平臺沒法比。但是隨著業務新功能的二次開發,對OpenStack的統一服務閘道器入口,高度靈活的實現層動態外掛化機制,單執行緒多協程的服務框架,頗具微服務形態的擴充套件思路,以及Python語言的快速實現歎為觀止,感覺它是在用一種高屋建瓴、大開大合的理念,如同玩樂高積木一樣把無數既有的開源專案機動性地拼裝成一個達到商用級要求的龐大平臺,經過兩年的研發與維護投入,從中汲取到了豐富的架構設計經驗。
再後來,和OpenStack的緣分繼續延伸到了如今的雲桌面領域。從初創時的Kilo,到2.0版本的Ocata,OpenStack已經把其它的開源IaaS專案給徹底KO了,自身也到了守江山穩社稷的階段。OpenStack程式碼中最核心的五大件,keystone、nova、glance、cinder、neutron,已經牢固成型,不同版本之間主要是在實現層進行細節微調,可用性早已不是問題了。很多雲平臺的實際使用者也已經很少去關注這些程式碼級變化,更加關注的是自身的應用場景。
相對甘守寂寞的Linux核心圈,作為上層管理平臺級開源專案的OpenStack,操作流程性的程式碼讓新人上手的速度很快,又趕上了如日中天的雲端計算技術高速發展期,很容易讓開發者們浮想聯翩,集體爆發,所以核心元件剛站穩腳跟,從sahara,heat開始的各種大帳篷專案便層出不窮,整體架構上的技術槓桿伸得有點長了。其實這種統一的基礎平臺性的東西,不像微信小程式、手機APP那樣的網際網路應用,它更需要豐富的現實運維經驗加上對底層實現機制的精通,匆忙趕製出來的專案,其穩定性與生產環境的可用性值得商榷。當然,這樣的形勢並不能否認其開源性質的優勢,既然是做一個普適性的大平臺,就意味著要兼收幷蓄,有容乃大。它能讓無數的元件、外掛、技術點來來往往,應時順勢,甚至自生自滅,但是那個核心的框架一直存在,就像帕特農神廟一樣永遠矗立著,本身就是很了不起的事。就像波普爾在《開放社會及其敵人》裡面說的那樣,好的社會是開放的,開放社會就意味著會有形形色色相互矛盾的觀念。正是這種相互矛盾,讓社會具有多種選擇,多種可能,越變越好。相反,封閉的社會,是一元的、單純的,但因為這種社會失去了矛盾的對峙,失去選擇,就會一錯到底,走向倒退。
在桌面上談談OpenStack
再來說說雲桌面和OpenStack的事。OpenStack本身是個管理平臺,給使用者帶來實際價值的是對其場景化的利用,畢竟搭臺的不如唱戲的搶眼,雲桌面就是在雲平臺上唱遍大街小巷的一出好戲。電腦桌面這個整日裡相看兩不厭的應用,無論是廟堂之高,江湖之遠,各行各業都離不開,場景化千差萬別。距離人那麼近的應用,便攜性、易用性,安全性、體驗感都是繞不過去的話題,在IaaS日漸推廣的今天,桌面上雲也成了當仁不讓的選擇。
但是談IaaS的場合卻似乎少提桌面雲,因為桌面虛擬化是先於雲計算出現的,在OpenStack之前,已經有形形色色的桌面虛擬化管理系統了,直到現在也是隻見多不見少,因為自己開發一個幾臺電腦的管理系統並不是什麼複雜的事,所以雲桌面的名字裡面也帶個雲字,但是和IaaS常常是花開兩朵各表一枝。其實自己開發的小型化虛擬機器管理系統在幾根螺絲就能擰死了的小場合,小規模的用一下可以,一旦大規模地鋪開建設,除了桌面體驗,整個管理平臺的高可用性、靈活性,熱遷移、儲存備份、二次開發便捉襟見肘起來,就像自留地種的小菜一樣,雖然口味有機些,但是要常規批量供應大客戶就緊缺了。
雲桌面的管理平臺可以只用到OpenStack中的keystone、nova、glance、cinder、neutron這最成熟的五大件,背靠大樹好乘涼。而且目前的桌面作業系統還沒法跑在容器裡,對K8S之類的容器平臺也不感冒。我們目前對OpenStack這個平臺已經不用投入太多精力去開發,它在桌面虛擬化應用場景的穩定成熟度已經能讓維護人員無需整天提心吊膽了。
更進一步考慮,VDI桌面核心內容是虛擬化,完全可以不依賴於平臺管理層,比如我們目前的雲桌面平臺3.0版已經做到能夠以虛擬機器映象,容器映象的形式安裝到任意一個現成的IaaS平臺、超融合環境中去,成為真正的DaaS,從而讓私有云廠家無須重複開發,私有云使用者無須重複建設。堅持使用OpenStack雲平臺來執行我們的桌面系統,就是看中它有一個開放的標準化的介面體系,能夠為我們的桌面應用提供更多的管理功能入口,從雲平臺這一層來講,我們的雲桌面是把OpenStack這個開源專案做到了最恰如其分的場景化利用。
經過八年的磨礪,OpenStack已經從炙手可熱、從者如雲到了大隱隱於市的階段。基本功能的日益成熟,漸趨穩定,版本差異化變小,必然會讓它淡出視野。凡事成為過往,就會有許多責之深、愛之切的聲音不斷髮出。不如讓它踏踏實實做好自己的平臺角色,在一個個專案、產品領域發揮臺柱的功力,將會是對這麼多年積累下來的開源技術價值最好的印證。
作者介紹:
張文劍,南京機敏科技首席架構師,主攻OpenStack VDI,參與編寫中國開源雲聯盟桌面雲標準,主持機敏雲平臺1.0、2.0版本的研發。