歷史進入2019年,放眼望去,今天的整個技術大環境和生態都發生了很大的變化。在己亥豬年春節剛剛過去的早春時節,咱們來梳理和展望一下整個雲原生技術趨勢的發展,是一件頗有意義的事情,這其中有些變化在不可避免地影響着咱們身處其中的每一家企業。
若是說雲原生在2017年還僅僅是冒出了一些苗頭,那麼2018能夠說是普及之年,雲原生變成了一個成熟的、被廣泛接受的理念。靈雀雲做爲雲原生理念的擁躉,也不斷順應這種趨勢,聚焦雲原生的核心場景,圍繞容器平臺、
DevOps和微服務黃金三角進行產品的研發和業務場景的落地。
早在1991年Jeffery Moore針對高科技行業和高科技企業生命週期的特色,提出了著名的「鴻溝理論」。這個理論基於「創新傳播學」,將創新性技術和產品的生命週期分爲五個階段:創新者(Innovator)、早期使用者(Early adopters)、早期大衆(Early majority)、晚期大衆(Late majority)、落後者(Laggard)。
在Early adopters和Early majority之間有個巨大的鴻溝(Chasm),每一個新技術都會經歷鴻溝,大多數失敗的產品也都是在鴻溝裏結束了其整個生命週期,可否順利跨越「鴻溝」,決定了創新性技術的成敗。今天咱們嘗試以鴻溝理論爲基礎來分析雲原生領域顛覆性的創新技術。
「Kubernetes is Boring」,邊緣創新有亮點
Kubernetes在2017年末成爲容器編排事實標準,以後以其爲核心的生態持續爆發,在傳播週期上能夠說已經跨過鴻溝了,進入Early majority早期大衆階段,開始佔領潛力巨大的主流市場。
根據CNCF在2018年8月進行的第六次測量容器管理市場的溫度,83%的受訪者更喜歡Kubernetes的容器管理工具,58%的受訪者在生產中使用Kubernetes,42%的受訪者正在進行評估以備未來使用,40%的企業(員工規模在5000 )正在使用Kubernetes。Kubernetes在開發人員中已經變得很是流行。
回過頭來看,靈雀雲從早期全力投入
Kubernetes技術棧,是最先進行Kubernetes產品化的廠商。咱們並未知足於把Kubernetes看成一個容器編排工具來使用,而是將它定位成構建上層平臺的核心框架,經過合理運用Kubernetes自己的擴展機制、架構模式與API規範,構建出一系列「Kubernetes原生」的產品體系。這樣作不只真正發揮出Kubernetes做爲雲計算核心框架的最大優點,也能夠與以Kubernetes爲核心的雲原生生態無縫集成。
進入主流市場的Kubernetes開始變得「Boring」,這很正常,甚至是一個好的現象。核心項目的創新速度會減慢,最新的版本中主要關注點聚焦在穩定性、可擴展性這些方面,儘量把代碼從主庫往外推,讓它的主庫變得乾淨,其餘功能經過一些擴展機制來作,同時開始關注安全性。
Kubernetes項目自己已通過了現象級創新爆發的階段,但由
Kubernetes獨特的架構屬性催生出的周邊生態的二次創新仍然在高速發展,例如諸多與Kubernetes集成或者基於Kubernetes框架開發的上層服務與平臺。這個話題咱們下次討論,今天仍是主要關注與Kubernetes項目關聯最緊密的創新亮點:
早期容器化workload大多聚焦在無狀態服務,跑的最多的是Nginx,而對有狀態應用避諱不談。如今Kubernetes進入主流市場,顯然須要對「現實中的應用」,包括有狀態服務提供良好的支持。2019年,對於複雜應用的管理以及Kubernetes自己的自動化運維將會更多的表現爲Operator。
Operator是基於Kubernetes擴展機制,將運維知識編寫成「面向應用的Kubernetes原生控制器「,從而將一個應用的總體狀態做爲API對象經過
Kubernetes進行自動化管理。這個應用一般來講是比較複雜的有狀態應用,如MySQL數據庫、Redis集羣、Prometheus等等。如今基本上常見的有狀態應用都有本身相對應的Operator,這是一種更爲有效的管理分佈式應用的方式。
其次是應用跨集羣部署與管理。早期社區裏有Federation聯邦集羣的方案。咱們很多大金融客戶都有跨集羣部署、管理業務的需求。當時深刻研究Federation v1以後,以爲這個方案複雜度高,觀點性強,對於咱們實際的需求靈活度不足而又不夠成熟。因此咱們最終選擇自研跨集羣部署。後來出現的Federation v2在設計方向上有不小改觀,是咱們持續關注的項目。
早期採用容器技術的用戶都會盡量兼容企業原有的IT基礎設施,好比底層物理機,保留物理機之上的虛擬層,虛擬機之上再跑容器。固然,面向資源管理的硬件虛擬化和麪嚮應用的容器化本質上沒有衝突。隨着Kubernetes的普及而且在應用上超越了容器編排的範疇,後Kubernetes時代如何搭建管理基礎設施是值得思考的。咱們也觀察到一些有意思的趨勢,好比在Kubernetes上同時管理容器和虛擬機(所謂的「容器原生虛擬化」),或是使用Kubernetes來管理OpenStack。
總之,Kubernetes在雲計算領域成爲既定標準,會愈來愈多的往下管理全部種類的基礎設施,往上管理全部種類的應用。這類標準的造成對於技術社區有很大的益處,會大大下降圍繞Kubernetes技術投入的風險。所以,咱們會看到愈來愈多的周邊技術向它靠攏,在Kubernetes之上催化出一個龐大的雲原生技術生態。
DevOps獨闢蹊徑:
開放式DevOps工具鏈集成與編排
DevOps理念、方法論和實踐已經走到了Early Majority早期大衆階段,是已被實踐證明的高效開發運維方法。作容器的廠商都經歷過用容器搞CI/CD,靈雀雲也不例外,CI/CD是容易發揮容器優點的顯而易見的使用場景。在去年,咱們作了重大的產品升級,將原來的CI/CD功能模塊擴展爲完整的DevOps產品—Alauda DevOps平臺,覆蓋應用全生命週期。
DevOps包含好幾層概念,首先是組織文化的轉變,而後涉及到一系列最佳實踐,最終這些最佳實踐須要用工具去落地。咱們在幫助不少大型企業客戶落地DevOps的過程當中發現:
- 在DevOps的整個流程裏涉及到不少類別的工具,每個類別都會有大量的選擇;2. 每一個客戶的工具選型多少會有些不一樣,並不存在一個固定的、徹底標準的工具組合;3. 隨着時間的推移工具選擇會發生變化,多數客戶意識到目前使用中的工具在將來極可能會被替代。
基於這些觀察,Alauda DevOps的定位並非要提供一個新的DevOps產品,去取代客戶已有的工具選型。相反,咱們致力於打造一個開放式的DevOps工具鏈集成與編排平臺。
這個平臺能夠靈活的兼容客戶的工具選型,經過集成將各種工具串聯起來,造成一套工具鏈,經過編排讓DevOps工具鏈與容器平臺聯動,造成一個完整系統。同時,不斷結合自身的經驗,提煉DevOps落地的最佳實踐,平臺將這些最佳實踐自動化,做爲服務進行輸出。這個思路在和客戶的交流以及實際落地過程當中不斷得到承認。
值得一提的是,咱們對於DevOps工具鏈的編排也是基於Kubernetes來實現的。Kubernetes不只是出色的容器編排工具,擴展以後也很適合編排DevOps工具。換句話說,咱們開發了一套「Kubernetes原生的DevOps平臺」。
微服務:落地須要一套完整的基礎設施
提起微服務治理,不少人會條件反射般的聯想到某些特定的技術,例如Spring Cloud,或者Service Mesh。咱們不妨先退後一步,系統考慮下企業微服務架構改造和落地所須要的完整的基礎設施。
首先,在微服務應用的底層須要一個應用管理平臺,這在今天毋庸置疑是一個基於Kubernetes的容器平臺。
微服務本質上是分佈式應用,在咱們獲取敏捷性的同時不可避免的增長了運維和管理的難度。微服務對自動化運維,尤爲是可觀測性的要求很高。支持微服務架構的基礎設施必須具有完善的監控、告警、日誌、分佈式追蹤等能力。
在微服務應用的前方,一般須要一個API網關,來管理對外暴露的API。API治理策略,包括安全、路由、流控、遙測、集成等對於任何應用平臺都重要,但在微服務架構下尤其關鍵。咱們須要經過定義、封裝對外API來屏蔽應用內微服務組件結構細節,將客戶端與微服務解耦,甚至爲不一樣客戶端提供個性化的API。
雲原生應用的一大準則是應用與狀態分離。在微服務架構下,每一個微服務組件更是應該徹底掌控本身的數據。因此,雲原生應用一般依賴外部數據服務(Backing Services),而在微服務架構下,多元化持久性(Polyglot Persistence)是常態,也就是說一個微服務架構的應用會依賴很是多種類的 Backing Services。面向微服務架構的基礎設施須要將這些外部服務暴露給微服務應用消費,甚至直接支撐各種Backing Services 的部署和管理。
一個團隊之因此採用微服務架構,必定有敏捷性的訴求。因此一般微服務團隊也會擁抱DevOps理念。一個完善的面向微服務架構的基礎設施須要考慮 DevOps 流程以及工具鏈的自動化。
最後,咱們回到狹義的微服務治理,這裏關注的是微服務組件之間的鏈接與通信,例如服務註冊發現、東西向路由流控、負載均衡、熔斷降級、遙測追蹤等。如今有個時髦的術語來描述這類功能,就是你們熟悉的Service Mesh。其實早期 Sping Cloud 之類的框架解決的是相似的問題,但在實現的方式上,尤爲是mesh 和業務代碼的耦合度上,有本質的區別。
當咱們考慮一個平臺如何支撐微服務架構的時候,須要涵蓋上述說起的方方面面,從產品的角度咱們會保持一個開放的態度。這其中一部分須要咱們本身去作,其餘一些能夠藉助生態合做夥伴的能力去補全完善。
此外,微服務架構也進入到了後Kubernetes時代,早期基本上是微服務做爲用例推進容器技術的發展。今天已經反過來了,成爲標準的
Kubernetes其實在驅動和從新定義微服務的最佳實踐。容器和Kubernetes爲微服務架構的落地提供了絕佳的客觀條件。
Service Mesh: 下一個亟待爆發的現象級技術創新
業界對於Service Mesh的佈道已經持續了一段時間,咱們今天再也不重複基本的概念。當咱們把Service Mesh和上一代以Spring Cloud爲表明的微服務治理框架以及更早的Service Oriented Architecture (SOA) 做比較的時候,會看到一個有意思的演化。
咱們知道,SOA有企業服務總線(ESB)的概念,ESB重且複雜,其實會混雜不少業務邏輯。SOA架構下,ESB最終容易變成架構以及敏捷性的瓶頸。早期推廣微服務架構的時候,一個重要的概念就是「Smart Endpoints and Dumb Pipes」,針對的就是SOA下ESB的痛點,從而每一個微服務可以獨立、自治、鬆耦合。
可是仔細去想的話,就會發現它其實走到了另外一個極端:它把一些基礎設施提供的能力放到微服務的業務組件裏面了,一般每一個組件須要加載一些治理框架提供的庫,或是調用特定的API,其實就是在業務組件裏內置了基礎設施的功能。到了Service Mesh其實又把它們分開了,從架構角度這樣也比較合理,應用是純業務的東西,裏面沒有任何基礎設施,而提供微服務治理的基礎設施,要麼在Mesh裏面,要麼由底層的Kubernetes平臺來提供,對應用是透明的。
Istio的出現促使業界對於Service Mesh的架構有了新的共識:控制平面(Control Plane)與數據平面(Data Plane)解耦。經過獨立的控制平面能夠對Mesh得到全局性的可觀測性(Observability)和可控制性(Controllability),讓Service Mesh有機會上升到平臺的高度。相對於須要在業務代碼層面使用的上一代微服務治理框架,這點對於但願提供面向微服務架構基礎設施的廠商,或是企業內部須要賦能業務團隊的平臺部門都具備至關大的吸引力。
在Data Plane,Envoy的領導者地位毫無爭議。Envoy使用C 開發,在資源使用效率和性能上(尤爲是長尾性能差別)相較早期主要競爭對手Linkerd有明顯優點。Envoy提供基於filter chain的擴展機制,從Kubernetes的成功當中咱們已經學習到,可擴展性對於大規模採用十分關鍵。
Envoy定義了一套「通用數據平面API」(Universal Data Plane API),也就是它的xDS協議。不只確保了Envoy自己的動態可配置性,更重要的是爲Service Mesh中Control Plane和Data Plane解耦提供了一個標準的接口。因爲主流Control Plane(例如Istio)對Envoy以及xDS的採納,xDS成爲Service Mesh Data Plane API的事實標準,Envoy也成爲無可爭議的Data Plane領導者。
在Control Plane,Istio是最具光環的明星級項目。它正在引領Service Mesh創造出一個全新的市場,不過從傳播週期看如今尚未跨過技術鴻溝,處於Early adopters階段。
過去一年中,Istio項目在技術上的表現並不徹底使人滿意,主要體如今對其複雜度的詬病,以及穩定性和性能的質疑。1.0版本的推出並無徹底使人信服。不過,這些彷佛並不影響Istio在社區得到的巨大成功。在開源領域,並不存在對Istio有實質性威脅的競品。可能在經歷了Kubernetes以後,以及Istio早期迅猛的發展和在社區中巨大的影響力之下,不多有開源項目願意在Control Plane和Istio正面交鋒。
長遠來說,Data Plane會慢慢變成commodity,尤爲在有了Universal Data Plane API以後。咱們有理由相信成熟穩健的Envoy會保持領先,但最終多數用戶會愈來愈少去關心具體的Data Plane技術。這個情境似曾相識,和當初Docker與Kubernetes的關係有點相似。
下個階段Service Mesh的賦能和創新會更多聚焦在Control Plane。AWS在Data Plane選擇成熟的Envoy,而本身開發App Mesh的Control Plane,就很容易理解。靈雀雲已經在ACE/ACP兩條產品線中集成了Istio,提供企業就緒的Service Mesh。
雲原生爲機器學習輸出工程化最佳實踐
雲原生的理念與相關技術對於應用開發與交付的巨大價值已經被廣泛接受。但云原生不只僅能夠做用在普通的應用開發上。站在容器平臺的角度看,機器學習毫無疑問是一類極爲重要新興工做負載。在將來,可能全部的公司都會是AI公司,全部的應用都會是智能應用,使用算法、模型就像今天應用會依賴數據庫同樣廣泛。
若是咱們分析數據科學家的工做流,會發現和傳統應用開發有不少類似的挑戰。如何方便的獲取實驗環境;如何讓實驗可重複;如何將數據處理、特徵提取、模型訓練、模型驗證、模型發佈這些步驟自動化,而且可重複;如何讓研究和生產環境保持一致;如何在生產環境作模型變動、AB測試、灰度發佈;如何在生產環境運維模型服務;如何將模型服務化,等等。
在軟件工程領域,雲原生的理念、方法論和最佳實踐已經爲相似問題找到了良好的解決方案。這些方案其實很是適合應用在機器學習場景。換句話說,咱們須要「雲原生機器學習」。這仍然是一個相對早期的概念,從鴻溝理論的週期來看,雲原生機器學習大體還處在Innovators創新者嚐鮮的階段。咱們去年發佈的Alauda Machine Learning (AML) 就是一個「雲原生機器學習平臺」,目標是從雲平臺的角度,用雲原生的思路去落地機器學習工程化的最佳實踐。