Spring Cloud? Kubernetes? Istio?服務治理方案怎麼選

不一樣選擇分別表明了兩個方向:html

  • embedded component 內嵌組件 如(Ribbon,DiscoveryClient,Hystrix,Sleuth等)
  • attached sidecar 附着挎鬥 (如 kube-proxy, istio sidecar等)
sidecar分離了服務治理所需的部分職能到與業務應用不一樣的進程中完成,也表明着:
  • 業務應用的技術棧選擇更加靈活
  • 服務治理的配置與業務應用分離
  • 服務治理的配置對於DevOps人員更加友好
  • 服務治理相關功能的演進速度更快
這些好處顯而易見,在happy-path下咱們可能無往不利
 
但同時也意味着:
  • 熔斷、限流等須要DevOps人員不止關注到業務應用,還須要對不一樣接口進行配置管理。可能須要和開發人員對齊不一樣接口的設計規格(流量、負載、可用性指標等)
  • 根據老馬對熔斷的描述,熔斷不僅僅是斷掉就萬事大吉,須要咱們關注降級處理方案(fallback)(注1),而這些istio並未提供支持(注2,3)
  • 灰度/金絲雀發佈在istio中的實現方案(注七、8)基於header(cookie),意味着可能會信息泄露或被客戶端仿造,若內部組件控制則可能再次出現業務邏輯的耦合
  • 灰度/金絲雀發佈在某些需求下可能涉及業務邏輯(如:VIP會員能夠嚐鮮新版應用),須要定製化開發路由邏輯,而在sidecar中編入業務邏輯明顯不符合其設計初衷
  • 定位錯誤、調試、定製化開發不一樣程度上須要團隊中有對應平臺(Go,C++等)經驗的自身工程師存在,而且該工程師須要高度適應平臺的快速迭代
  • sidecar不是特等公民,同樣會崩潰、報錯(注4)。monitor 和metrics等監控、報警相關基礎設施及配置也是必經之路(注5)
  • 兩次請求轉發帶來的性能損耗不可忽視,在不一樣的掛載方案中性能損耗可能有數倍差異(注6),被掛載sidecar的應用thoughtput能力越強,性能損耗對其影響越大
固然,以上問題並非全部服務集羣都涉及到,簡單概括結論即:
 
適合採用或繼續選擇SpringCloud方案的狀況:
  • 團隊主要/徹底由熟悉Java/Spring 技術棧的工程師組成
  • 對灰度發佈、服務註冊/發現等組件有定製化能力需求
  • 有完整的熔斷能力需求
  • DevOps團隊還沒有具備能夠自主完成高壓問題的定位、處理能力
適合採用Kubernetes/Istio方案的狀況:
  • 團隊由多技術棧工程師組成
  • 服務治理須要涉及不一樣平臺、技術棧
  • DevOps與開發團隊通力合做,能夠順利完成對接口的設計規格(流量、負載、可用性指標等)配置管理
  • DevOps團隊或者對應技術專家可以自主完成sidecar或相似組件在Go、C++等技術棧下對高壓問題定位、處理
  • 有完整的sidecar監控、告警
  • 不須要熔斷,或者熔斷方案中不須要服務降級能力
  • 不須要業務敏感的路由、灰度發佈能力
 
一點發散思惟:
若是咱們順着用sidecar分離非業務代碼的方向走,
那咱們的應用系統與數據庫、磁盤等外部資源進行通訊的時候,是否要:
  • 作個磁盤IO sidecar? 
  • 作個數據庫鏈接池sidecar?(注9)
  • 作個NFS sidecar? 
注:
最後,若是以上觀點對你帶來了一點點幫助或者啓發,動動鼠標點個讚唄 🙇
相關文章
相關標籤/搜索