微服務的概念已經在各大公司實踐開了,以Java爲表明的spring boot成爲了微服務的表明,K8S+Docker成爲了微服務運行的最佳環境,微服務的概念已經離咱們沒有那麼遙遠了。spring
固然微服務是複雜的,除了組件繁多還須要代碼作出不少改造才能享受到它帶來的優點,那麼有沒有一種方式能夠不須要太多代碼改動就可以在多種不一樣的開發語言中靈活使用呢?數據庫
基於服務網格Istio就誕生了,撥雲見日咱們今天就來一同窗習瞭解微服務和Istio相關的知識.後端
附上:網絡
喵了個咪的博客:w-blog.cn架構
Istio官方地址:https://preliminary.istio.io/zh併發
Istio中文文檔:https://preliminary.istio.io/zh/docs/負載均衡
PS : 此處基於當前最新istio版本1.0.3版本進行搭建和演示,不一樣的版本各類細節會有些許不一樣!框架
在開始講解Istio以前咱們須要先了解微服務的概念,以及在微服務管理中經常須要使用到的一些列的組件:運維
總的來講(問題和挑戰):API Gateway、服務間調用、服務發現、服務容錯、服務部署、數據調用以及測試。分佈式
第二點咱們須要瞭解的是服務網格,Istio 提供了一個完整的解決方案,經過爲整個服務網格提供行爲洞察和操做控制來知足微服務應用程序的多樣化需求,Service Mesh這個術語一般用於描述構成這些應用程序的微服務網絡以及應用之間的交互。
隨着規模和複雜性的增加,服務網格愈來愈難以理解和管理。它的需求包括服務發現、負載均衡、故障恢復、指標收集和監控以及一般更加複雜的運維需求,例如 A/B 測試、金絲雀發佈、限流、訪問控制和端到端認證等。
2017 年末,非侵入式的 Service Mesh 技術從萌芽到走向了成熟。若是用一句話來解釋什麼是 Service Mesh,能夠將它比做是應用程序或者說微服務間的 TCP/IP,負責服務之間的網絡調用、限流、熔斷和監控。對於編寫應用程序來講通常無須關心 TCP/IP 這一層(好比經過 HTTP 協議的 RESTful 應用),一樣使用 Service Mesh 也就無須關係服務之間的那些原來是經過應用程序或者其餘框架實現的事情,好比 Spring Cloud、OSS,如今只要交給 Service Mesh 就能夠了。
關於微服務和服務網格的區別,個人一些理解:微服務更像是一個服務之間的生態,專一於服務治理等方面,而服務網格更專一於服務之間的通訊,以及和 DevOps 更好的結合。
最終萬衆期待的Istio誕生了,Istio於 2017 年 5 月 24 日首發布,由 Google、IBM 和 Lyft 聯合開發,就在前不久2018年8月份1.0正式版本已經發布,簡單一句概況就是Istio 容許您鏈接、保護、控制和觀測服務。
鏈接
保護
控制
觀測
PS: 如下內容來自官網文檔
Istio 服務網格邏輯上分爲數據平面和控制平面。
數據平面由一組以 sidecar 方式部署的智能代理(Envoy)組成。這些代理能夠調節和控制微服務及 Mixer 之間全部的網絡通訊。 控制平面負責管理和配置代理來路由流量。此外控制平面配置 Mixer 以實施策略和收集遙測數據。
下圖顯示了構成每一個面板的不一樣組件:
Istio 使用 Envoy 代理的擴展版本,Envoy 是以 C++ 開發的高性能代理,用於調解服務網格中全部服務的全部入站和出站流量。Envoy 的許多內置功能被 istio 發揚光大,例如:
Envoy 被部署爲 sidecar,和對應服務在同一個 Kubernetes pod 中。這容許 Istio 將大量關於流量行爲的信號做爲屬性提取出來,而這些屬性又能夠在 Mixer 中用於執行策略決策,併發送給監控系統,以提供整個網格行爲的信息。
Sidecar 代理模型還能夠將 Istio 的功能添加到現有部署中,而無需從新構建或重寫代碼。能夠閱讀更多來了解爲何咱們在設計目標中選擇這種方式。
Mixer 是一個獨立於平臺的組件,負責在服務網格上執行訪問控制和使用策略,並從 Envoy 代理和其餘服務收集遙測數據。代理提取請求級屬性,發送到 Mixer 進行評估。有關屬性提取和策略評估的更多信息,請參見 Mixer 配置。
Mixer 中包括一個靈活的插件模型,使其可以接入到各類主機環境和基礎設施後端,從這些細節中抽象出 Envoy 代理和 Istio 管理的服務。
Pilot 爲 Envoy sidecar 提供服務發現功能,爲智能路由(例如 A/B 測試、金絲雀部署等)和彈性(超時、重試、熔斷器等)提供流量管理功能。它將控制流量行爲的高級路由規則轉換爲特定於 Envoy 的配置,並在運行時將它們傳播到 sidecar。
Pilot 將平臺特定的服務發現機制抽象化並將其合成爲符合 Envoy 數據平面 API 的任何 sidecar 均可以使用的標準格式。這種鬆散耦合使得 Istio 可以在多種環境下運行(例如,Kubernetes、Consul、Nomad),同時保持用於流量管理的相同操做界面。
Citadel 經過內置身份和憑證管理能夠提供強大的服務間和最終用戶身份驗證。可用於升級服務網格中未加密的流量,併爲運維人員提供基於服務標識而不是網絡控制的強制執行策略的能力。從 0.5 版本開始,Istio 支持基於角色的訪問控制,以控制誰能夠訪問您的服務。
Istio結合了鏈路監控和服務監控,對於K8S狀態監控也天然而然也在其中
zipkin + jaeger 來對zipkin的數據進行更加友好的展現
.
PS : 須要實現鏈路監控須要代碼中作出基礎的適配
prometheus + grafana 來對prometheus獲取的數據進行展現監控報警配置