2018年,微服務方興未艾,Service Mesh(服務網格)又快速崛起。有觀點認爲,2018年可被稱之爲「Service Mesh元年」,在將來兩年中,Service Mesh將迎來爆發式增加,成爲下一代的微服務架構。web
那麼,Service Mesh究竟是什麼?自2016年被提出,爲什麼不到兩年就得到了如此高的人氣?Service Mesh又能爲企業解決哪些問題?在近日召開的GIAC全球互聯網架構大會上,螞蟻金服高級技術專家黃挺以螞蟻金服的自身實踐爲例,深刻解讀了Service Mesh。後端
螞蟻金服高級技術專家黃挺安全
解決螞蟻金服三大難題網絡
「Service Mesh」最先由開發Linkerd的Buoyant公司提出,2016年9月第一次公開使用該名詞。對於什麼是Service Mesh,Linkerd首席執行官William Morgan曾經給出這樣的解釋:架構
「服務網格是一個基礎設施層,用於處理服務間通訊。雲原生應用有着複雜的服務拓撲,服務網格負責在這些拓撲中實現請求的可靠傳輸。在實踐中,服務網格一般實現爲一組輕量級網絡代理,它們與應用程序部署在一塊兒,而對應用程序透明。」框架
這聽起來仍是有些抽象,黃挺用螞蟻金服自身的例子,解讀了Service Mesh的三個主要應用場景:分佈式
其一,解決多語言通訊的問題,用同一套基礎設施解決不一樣的語言的通訊問題。ide
衆所周知,SOFA 中間件(Scalable Open Financial Architecture)是螞蟻金服自主研發的金融級分佈式中間件,被螞蟻金服普遍應用於支付、借貸、信用、基金、保險等全金融場景,支撐螞蟻金服平穩度過歷次「雙11」、「雙12」、「新春紅包」等苛刻考驗。微服務
現在SOFA包含豐富的組件,如SOFA Boot、微服務、數據訪問代理、分佈式事物、消息隊列、分佈式鏈路跟蹤等,基本上包含了分佈式架構所需的各類中間件。性能
「然而有一個問題是,這些中間件都是用Java寫的」,黃挺指出,當前螞蟻金服技術棧大部分基於Java語言,包含2000+應用和20000+服務;但還有一部分應用是基於NodeJS、C++、Golang和Python語言,要把這些應用融入到SOFA體系,按照傳統的方式,各類語言的客戶端都須要再實現一遍,帶來巨大的工做量,同時要承擔大量風險。
而經過Service Mesh中的Sidecar,服務註冊中心、限流熔斷、動態配置、故障注入等客戶端能夠和NodeJS、C++、Golang、Python等具體語言解綁,讓基礎中間件和具體的應用脫離關聯,即「一次實現,搞定全部語言的客戶端」,用一套基礎設施解決不一樣語言的通訊問題,大大節省了工做量。
其二,解決遺留系統融入問題,讓一些遺留系統更好的融入到雲原生體系。
不少傳統企業,包括金融機構每每有着大量的遺留系統,隨着傳統企業雲化的深刻,這些遺留系統也須要轉變爲雲原生應用。「一種方式是直接把系統代碼從新作一遍,直接用雲原生的方式再寫一遍」,黃挺認爲,這種方式雖然比較直接,可是也比較粗暴,有可能在遷移過程中出現很是多的Bug。
而有了Service Mesh以後,經過Sidecar,遺留系統不經改造,或是隻須要不多的改造,能夠很是方便的和雲原生體系融合到一塊兒。
其三,解耦基礎設施團隊和應用研發團隊,加強基礎設施團隊的交付能力和交付速度。
近些年,螞蟻金服的技術架構逐漸從單體應用向服務化架構演進。據黃挺介紹,在單體應用中,一般須要多個團隊去改同一套代碼,一塊兒部署、一塊兒發佈,以及發現問題一塊兒回滾,這個過程很是痛苦。
「應用研發有時候沒法很好的理解基礎設施的東西,升級容易出現問題。基礎設施團隊有時候也沒法很好地去了解應用研發。應用研發和基礎設施團隊耦合在一塊兒發佈、變動、升級,很是容易出現問題」,黃挺說。
Service Mesh讓螞蟻金服找到了解決問題的方法,經過Service Mesh,應用研發和基礎設施團隊可以最大程度地解耦,作厚技術中臺,讓中間件能夠更快的交付業務須要的能力。
黃挺舉例說,之前SOFARPC中新的能力須要半年甚至一年的時間才能逐步應用於螞蟻金服核心系統,有了SOFA Mesh(螞蟻金服自研的Service Mesh),螞蟻金服能夠在一個月的時間內將新的能力快速地提供給全部的業務系統,而不用一個個的去升級業務系統。
螞蟻金服SOFA Mesh自研路
Service Mesh是一個很新的框架,2016年1月 15日,Linkerd 0.0.7版本發佈,這是可以在Github上看到的第一個Service Mesh。現在,業界流行的Service Mesh框架已經包括Linkerd、Istio和Conduit等。
據黃挺介紹,螞蟻金服在考量業界主流Service Mesh框架的時候,有着兩個明確的需求:其一,可否從螞蟻金服當前的架構下漸進式地演進到Service Mesh架構之下;其二,在性能和穩定性上可否知足螞蟻金服金融級以及高流量的要求。
通過大規模的驗證,當前業界主流的Service Mesh並不能很好地知足螞蟻金服這兩個需求。例如,Istio在性能上存有缺陷,沒法知足螞蟻金服高流量和高性能的需求;Linkerd架構不夠開放,資源佔用率較高;Conduit當前版本還不夠成熟,而且基於很是新的RUST語言,精通的人較少。
現有Service Mesh架構均不能知足需求,而螞蟻金服在傳統服務化架構上已經有十餘年積累,這兩個因素讓螞蟻金服選擇自研Service Mesh——SOFA Mesh。
但「自研」並不表明必定要「從零開始」。「咱們沒有從零開始直接構建一個Service Mesh框架,而是借鑑了一些現有Service Mesh框架的優秀經驗,同時儘可能聽從整個Service Mesh社區的規範」,黃挺表示,例如,在Control Plane的Pilot以及Auth,SOFA Mesh直接選擇了集成Istio的部分,而且進行了適當地加強。
「SOFA Mesh一切的技術選擇都是可以讓螞蟻金服穩定、高效、漸進式地演進到 Serivce Mesh 架構下,所以SOFA Mesh在技術上的選擇更加務實,也但願可以和業界保持技術上的互通」,黃挺強調。
儘管不是從零開始構建,但SOFA Mesh的開發過程也並不簡單。
黃挺回憶說,SOFA Mesh自研過程當中最大的困難是第一次上線時候的進度壓力,由於當時有着切實的業務需求:「當時的一個場景須要用C++去調用後端一個用SOFA寫的Java系統,爲了知足業務上的要求,咱們集結了應用網絡和中間件團隊,組成了技術攻堅團隊,最終花了差很少兩個月的時間從零開始構建了SOFA Mesh Golang版本的Sidecar,而且對接到SOFA服務化體系下,最終保證了業務的正常上線,在性能以及穩定性上都知足了業務的需求。」
通過螞蟻金服業務場景的不斷磨練,SOFA Mesh現在已經在螞蟻金服多個場景中落地。據黃挺介紹,SOFA Mesh在螞蟻金服內部更多的被應用於多語言支持,亦被應用於解決內部服務調用的安全以及在能力發佈上的問題,此外也在規劃解決異構體系的通訊問題,在螞蟻金服業務中發揮着愈來愈關鍵的做用。
Mesh的將來——Xmesh
做爲一個新興的技術框架,Service Mesh從2016年被提出來,去年迎來了蓬勃發展。不只是螞蟻金服,谷歌、IBM、華爲等業界巨頭已經參與到Service Mesh的研發之中,國內多家互聯網和雲計算企業也開始在Service Mesh進行驗證和投入。
黃挺認爲,2018年,隨着雲原生理念的進一步地被傳播,以及 Kubernetes 等容器編排平臺被更多的公司所採納,Service Mesh 也必將在今年有更好蓬勃地發展。
「咱們預計今年會有更多的公司在內部去實踐Service Mesh,也很是期待在業界可以聽到更多公司的Service Mesh的實踐。從形態上,除了Service Mesh,也會逐步出現其餘形式的Mesh,好比Message Mesh或者DB Mesh等等」,對於Service Mesh的將來,黃挺十分樂觀。
而對於螞蟻金服來講,其自研的SOFA Mesh會繼續在內部更多場景下落地,用更多的場景去「磨練」SOFA Mesh。「將來咱們也不排除在服務調用上以外的場景作 Mesh,在數據訪問、消息通訊上也用上Mesh的場景,以達到在基礎設施上更加統一的目的」黃挺說。
據黃挺透露,螞蟻金服目前也正在緊鑼密鼓地準備SOFA Mesh的開源。SOFA Mesh的誕生結合了業界的先進理念和經驗,而螞蟻金服也但願將SOFA Mesh的成果反饋給社區,推進SOFA Mesh生態的良性發展。