再見,微服務!
傳統的微服務即將過時,這并不是一個唬人的標題。3 年前 Kubernetes 剛興起的時候,我覺得這東西差不多 3 年能夠普及,畢竟他是實打實的谷歌十多年容器編排的精華。
圖片來自 Pexels
而今天我想安利的是網格化服務這東西,如下圖:
服務架構的演進
微服務初期
產生了:Spring Cloud,Dubbo 等微服務框架,大部分的服務治理(熔斷,限流,服務編排,服務鏈路跟蹤)功能與框架甚至業務代碼強依賴。
Kubernetes
Kubernetes 是一個很杰出的軟件產品,在一定程度上解決了微服務所需的應用編排,伸縮等問題,但是在流量治理,日志,監控,指標度量,等場景能力有限。
網格化服務
可以理解它是 Kubernetes 中期的產物(也許你還沒摸過 Kubernetes 初期的產物他就即將逝去),網格化服務可以彌補 Kubernetes 的不足,提供更為豐富的服務治理方案。
回首我們曾在微服務那個青蔥歲月犯過的傻!
①項目開始
老板:說我們要跟上時代,要用微服務。
開發:沒啥問題。服務開始拆分,引入 Spring Cloud 或者 Dubbo 等框架,完工。(就是這么簡單,沒有誰比我更懂微服務了!)
②上線運行
老板:微服務上了,我們現在是不是可以像大公司那樣無停機發布了?
開發:我們只是拆分了服務,并沒有做其他的,這塊目前做不了。
開發:微服務太難搞了,日志,監控,異常排查,服務部署,成本是之前的好幾倍。
③填坑之路
引入大量中間件,代碼配合植入輔助功能,來實現日志采集,服務鏈路監控,智能網關,熔斷。
多語言異構系統:中間件難以兼容,Spring Cloud 支持的大部分微服務功能都只適用 Java 而已。and so on (等等,太痛苦了)
初見 Kubernetes ,曾以為它能拯救全世界。
Kubernetes 提供服務發現、配置管理、負載均衡和網關。既然這樣,那么是否就可以不再需要注冊中心和服務治理框架,只基于 Kubernetes 構建微服務系統呢?
很多公司進行了這方面的嘗試,嘗試后發現從治理功能豐富度、大規模集群效率等方面,還是有不太滿意的地方:
- 流量治理能力不足:缺乏熔斷能力,沒有灰度控制能力;
- 大規模使用時的性能問題:基于 Kubernetes Service 的服務發現過程需要經過 Iptables 或 IPVS 的查找過程,集群規模大時性能影響會比較明顯。
- 日志,鏈路監控,指標度量等,依舊需要額外的組件以及業務代碼中需要加入輔助的代碼。
目前較為成熟的方案:使用 Kubernetes 部署+Spring Cloud(或 Dubbo 等),該方案在語言和框架依賴比較局限。
豪門出身,不但有顏值還是個實力派(扎心了)。
以 Istio 為代表的網格化服務橫空出世,徹底戰勝了傳統微服務在服務數量多,多語言的,在安全性、網絡流量控制、可觀察性等方面的挑戰:
- 徹底把業務和服務治理邏輯切分開(沒有語言和框架依賴)。
- 更靈活,更細粒度的流量管理。
- 監控,日志,鏈路跟蹤提供編輯、統一的規范。
官網定義的四大功能
偷偷告訴你:在服務網格化的江湖里,消費者和生產者直接不需要額外引入一個注冊中心,服務直接部署通信。
這在網格化服務里本是一個不值得一提的點,就是為了讓沒見過世面的你開開眼,免得其他太深奧沒聽明白失敬了。
沒有繁瑣的服務搭建/框架圖,直接上部分案例:
案例的服務架構圖
這個示例部署了一個用于演示多種 Istio 特性的應用,該應用由四個單獨的微服務構成。這個應用模仿在線書店的一個分類,顯示一本書的信息。
頁面上會顯示一本書的描述,書籍的細節(ISBN、頁數等),以及關于這本書的一些評論:
- productpage:這個微服務會調用 details 和 reviews 兩個微服務,用來生成頁面。
- details:這個微服務中包含了書籍的信息。
- reviews:這個微服務中包含了書籍相關的評論。它還會調用 ratings 微服務。(有 3 個版本)
- ratings:這個微服務中包含了由書籍評價組成的評級信息。
以下是瀏覽器效果圖。
案例 1:流量 A/B 測試
A/B 流量測試案例 1
A/B 流量測試 2
同一系統,jackson 登陸的跟沒有登陸的看到的界面效果是不同的。這一切的功勞都歸于 Istio,而不用你的代碼設置。(想想這么香的功能,自己是不是曾經反反復復在自己代碼里面插入了很多埋點/配置)。
案例 2:服務鏈路跟蹤
productpage 訪問 detail,review,rating 的鏈路一目了然。
這種鏈路跟蹤不需要你代碼或者框架額外植入代碼。
案例 3:監控
雖然很常見,但是你沒用過都不知道他有多便利,多香。
部署腳本演示
靈活的流量設置
輕輕松松實現故障植入的功能
作者:RJ不止于編程
編輯:陶家龍
出處:toutiao.com/i6903536074665034243/