1. 程式人生 > >一文了解“Service Mesh(服務網格)”的歷史與現在

一文了解“Service Mesh(服務網格)”的歷史與現在

對於大多數人來說,“Service Mesh(服務網格)”仍然是一個新概念,因此,談論它的“歷史”可能看起來有點滑稽。但事實上,早在2010年初,在一些大網路規模的公司中,服務網格的概念就隱約開始逐步形成了。因此,服務網格確實有一段歷史值得去探索、去理解。

 

在深入歷史脈絡之前,讓我們先聊聊“現在”。什麼是服務網格?為什麼它突然成為了雲原生領域的熱門話題?

 

服務網格是用於控制和監視微服務應用程式中的內部服務到服務流量的軟體基礎結構層。它通常採用與應用程式程式碼一起部署的網路代理的“資料平面”的形式,以及用於與這些代理互動的“控制平面”。在這個模型中,開發人員(“服務所有者”)可以非常幸福地完全意識不到服務網格的存在,而運營商(“平臺工程師”)則被授予一套新的工具來確保可靠性、安全性和可見性。

 

服務網格為什麼會突然流行?簡而言之,是因為對於許多公司來說,像Docker和Kubernetes這樣的工具已經“解決了部署的問題”——至少是差不多解決了。但Docker和Kubernetes沒能解決執行時的問題。而這就是服務網格的用武之地。


 

 “解決部署問題”是什麼意思?使用Docker和Kubernetes之類的技術可以為企業大大減少部署大量應用或服務時的操作負擔。使用Docker和Kubernetes,部署100個應用程式或服務的工作量,不再是部署單個應用程式的100倍。這是歷史性的向前邁出的一大步,對於許多公司來說,它可以極大降低採用微服務的成本。這可能不僅僅是因為Docker和Kubernetes在所有正確的級別提供了強大的抽象,更是因為它們標準化了整個組織的打包和部署模式。

 

但是,一旦應用程式執行之後呢?畢竟,部署不是生產的最後一步; 部署完之後,應用程式還必須執行。如此一來問題就變成了:像使用Docker和Kubernete進行標準化部署時一樣,我們還能以同樣的方式來將應用程式的執行時操作也標準化嗎?

 

為了解決這個問題,服務網格應運而生。從本質上講,服務網路提供統一的全域性方式來控制和測量應用程式或服務之間的所有請求流量(在資料中心的說法中,即“東西向”流量)。對於採用微服務的公司而言,此請求流量在執行時行為中起著至關重要的作用。由於服務通過響應傳入請求和發出傳出請求來工作,因此請求流成為應用程式在執行時的行為方式的關鍵決定因素。因此,將流量管理標準化,則成為將應用程式執行時標準化的工具。

 

通過提供API來分析和操作此流量,服務網路為整個組織的執行時操作提供了標準化機制——包括確保可靠性、安全性和可見性的方法。和任何優秀的基礎設施層一樣,服務網格(在理想情況下)的工作方式與服務的構建方式無關。


服務網格是如何形成的?


那麼服務網格從何而來?做了一些軟體考古之後,我們發現服務網格提供的核心功能——請求級負載均衡、斷路、重試、儀器等——基本上並不是新功能。其實,服務網格最終是功能的重新包裝,真正發生轉變的是“地方”,而不是“什麼”。

 

服務網格的起源始於大約2010年三層應用程式架構模型的興起——這是一種簡單的架構,一度為網路上的絕大多數應用程式提供動力。在這個模型中,請求流量發揮著重要作用(有兩個躍點!)。應用程式流量首先由“Web層”處理,“web層”又與“app層”對話,後者又與“資料庫層”對話。Web層中的Web伺服器旨在處理大量傳入請求,需要非常迅速地將它們小心地交給相對較慢的應用伺服器。(Apache、NGINX和其他流行的Web伺服器都有非常複雜的邏輯來處理這種情況。)同樣,應用層使用資料庫庫與後備儲存進行通訊。這些庫通常負責以針對此用例優化的方式處理快取、負載均衡、路由、流控制。

 

但是,這種三層應用程式架構模型,在過載的情況下會開始崩潰——特別是在app層,隨著時間的推移它的負載會變得非常大。像谷歌、Facebook、Netflix、Twitter這樣的大公司學會了將單體架構拆分成許多獨立執行的塊,從而催生了微服務的興起。在引入微服務的那一刻,還引入了東西向流量。在這個世界上,通訊不再是專一的,而是在每一項服務之間。通訊若出錯,整個網站都會出現故障。

 

因此,這些公司都以類似的方式做出了迴應:他們編寫了“胖客戶端”庫來處理請求流量。這些庫——例如谷歌的Stubby、Netflix的Hysterix、Twitter的Finagle——為所有服務提供了統一的執行時操作方式。開發人員或服務所有者使用這些庫向其他服務發出請求,而在這個框架下,這些庫將負責負載均衡、路由、斷路、遙測。通過在應用程式中的每個服務之間提供統一的行為、可見性和控制點,這些庫形成了表面上最初的服務網格——沒有花哨的名稱。


Proxy的興起


快進到現代的雲原生世界。當然,這些庫仍然存在。但是,鑑於程序外代理提供的操作便利性,庫的吸引力顯著降低了——尤其是當容器和編排框架的出現使得部署複雜性大幅下降時。

 

代理避免了庫的許多缺點。例如,當一個庫發生變化時,必須在每個服務中部署這些變化,這個過程往往需要複雜的組織層面的協調工作。相比之下,代理可以在不重新編譯和重新部署每個應用程式的情況下進行升級。同樣,代理支援多語言系統,在多語言系統中由服務組成的應用程式是用不同語言編寫的——而這種方法對於庫而言過於昂貴。

 

也許最重要的是,對於大型組織而言,在代理而不是庫中實現服務網路,會將提供必要功能的責任,從服務所有者手上,轉移到最終使用該服務的終端使用者(即平臺工程團隊)手上。服務提供者和使用者的這種一致性,將會讓這些團隊把握自己的命運,消除開發和運維之間複雜的依賴關係。

 

這些因素都有助於服務網格的興起。通過部署代理的分散式“網格”(它可以作為底層基礎架構的一部分而不是應用程式本身來進行維護),並通過提供集中式API來分析和操作此流量,服務網格為跨越整個組織的執行時操作提供了標準化機制,包括確保可靠性、安全性和可見性的方法。


企業級服務網格應用


Service Mesh極大地簡化了使用者體驗,並將大中型企業的Kubernetes落地引領進下一個全新階段,被業界普遍認為是新一代的微服務架構的最佳技術設計。日前,國內外企業及技術領域對Service Mesh技術的應用和探索開展的如火如荼,對大多數使用容器的企業而言,Service Mesh彷彿是容器部署中亟待補齊的最後一塊拼圖。


由CNCF舉辦的KubeCon + CloudNativeCon,作為世界範圍的Kubernetes與容器技術領域的頂級技術盛會,將於今年11月14日-15日登陸上海,這是KubeCon首次來華舉辦。Rancher Labs攜手華為,將於11月13日和CNCF聯合舉辦KubeCon同場會議,同中國區眾多企業客戶一起,推出2018雲原生服務網格(Istio)企業峰會


屆時,來自華為、上汽集團、Rancher Labs、雲巨集、興業銀行、飛貸金融、金風科技、樹維資訊等著名企業的科技負責人和微服務架構師,將分享各自在新一代微服務架構建設和Service Mesh應用方面的經驗和心得。


日期:11月13日,星期二

時間:上午9:00至下午6:00

地點:上海新發展亞太JW萬豪酒店,長風大宴會廳

報名:http://t.cn/RFG85AW


誠邀您屆時蒞臨峰會,共話容器、微服務、Kubernetes等新技術的落地應用。


英文原文連結:

https://thenewstack.io/history-service-mesh/