現在最火的后端架構無疑是微服務了,微服務將之前的單體應用拆分成了許多獨立的服務應用,每個微服務都是獨立的,好處自然很多,但是隨著應用的越來越大,微服務暴露出來的問題也就隨之而來了,微服務越來越多,管理越來越麻煩,特別是要你部署一套新環境的時候,你就能體會到這種痛苦了,隨之而來的服務發現、負載均衡、Trace跟蹤、流量管理、安全認證等等問題。如果從頭到尾完成過一套微服務框架的話,你就會知道這里面涉及到的東西真的非常多。當然隨著微服務的不斷發展,微服務的生態也不斷完善,最近新一代的微服務開發就悄然興起了,那就是服務網格/Service Mesh。
什么是Service Mesh?
Service Mesh 是一個非常新的名詞,最早是2016年由開發 Linkerd 的 Buoyant 公司提出的,伴隨著 Linkerd 的傳入, Service Mesh 的概念也慢慢進入國內技術社區,現在主流的叫法都叫:服務網格。
服務網格是一個用于處理服務間通信的基礎設施層,它負責為構建復雜的云原生應用傳遞可靠的網絡請求。在實踐中,服務網格通常實現為一組和應用程序部署在一起的輕量級的網絡代理,但對應用程序來說是透明的。
要理解網格的概念,就得從服務的部署模型說起:
單個服務調用,表現為sidecar
Service Mesh 的部署模型,先看單個的,對于一個簡單請求,作為請求發起者的客戶端應用實例,會首先用簡單方式將請求發送到本地的 Service Mesh 實例。這是兩個獨立進程,他們之間是遠程調用。
Service Mesh 會完成完整的服務間調用流程,如服務發現負載均衡,最后將請求發送給目標服務,這表現為 Sidecar 方式。
部署多個服務,表現為通訊層
![WechatIMG195.png][2]
多個服務調用的情況,在這個圖上我們可以看到 Service Mesh 在所有的服務的下面,這一層被稱之為服務間通訊專用基礎設施層。Service Mesh 會接管整個網絡,把所有的請求在服務之間做轉發。在這種情況下,我們會看到上面的服務不再負責傳遞請求的具體邏輯,只負責完成業務處理。服務間通訊的環節就從應用里面剝離出來,呈現出一個抽象層。
有大量服務,表現為網絡
如果有大量的服務,就會表現出來網格,圖中左邊綠色方格是應用,右邊藍色的方框是 Service Mesh,藍色之間的線條是表示服務之間的調用關系。Sidecar 之間的連接就會形成一個網絡,這個就是服務網格名字的由來,這個時候代理體現出來的就和前面的 Sidecar 不一樣了,形成網狀。
首先第一個,服務網格是抽象的,實際上是抽象出了一個基礎設施層,在應用之外。其次,功能是實現請求的可靠傳遞。部署上體現為輕量級的網絡代理。最后一個關鍵詞是,對應用程序透明。
大家注意看,上面的圖中,網絡在這種情況下,可能不是特別明顯。但是如果把左邊的應用程序去掉,現在只呈現出來 Service Mesh 和他們之間的調用,這個時候關系就會特別清晰,就是一個完整的網絡。這是 Service Mesh 定義當中一個非常重要的關鍵點,和 Sidecar 不相同的地方:不再將代理視為單獨的組件,而是強調由這些代理連接而形成的網絡。在 Service Mesh 里面非常強調代理連接組成的網絡,而不像 Sidecar 那樣看待個體。
現在我們基本上把 Service Mesh 的定義介紹清楚了,大家應該可以大概了解什么是 Service Mesh 了。現在實現 Service Mesh 的開源方案有很多,比如 Linkerd、Istio 等,當然目前最流行最火熱的還是要數 Istio 了,記下來我們就來開始講解 Istio 的使用。