一文告訴你Istio和Spring Cloud該怎么選
相信了解SpringCloud的朋友在剛剛開始接觸Istio的時(shí)候一定會(huì)有一個(gè)疑問:Istio和 spring cloud也太像了,他們都可以提供服務(wù)發(fā)現(xiàn)、負(fù)截均衡、限流、鏈路跟蹤、鑒權(quán)等微服務(wù)治理手段,那么二者的主要區(qū)別是什么呢?本文就會(huì)帶大家理解二者的區(qū)別,如果您目前對(duì)微服務(wù)和 Service Mesh還不了解,那么請(qǐng)您忽略本文。
Istio 概述
Istio 是一個(gè)開源服務(wù)網(wǎng)格(Service Mesh),它透明地分層到現(xiàn)有的分布式應(yīng)用程序上。 Istio 強(qiáng)大的特性提供了一種統(tǒng)一和更有效的方式來保護(hù)、連接和監(jiān)視服務(wù)。 Istio 是實(shí)現(xiàn)負(fù)載平衡、服務(wù)到服務(wù)身份驗(yàn)證和監(jiān)視的路徑——只需要很少或不需要更改服務(wù)代碼。
它強(qiáng)大的控制平面帶來了重要的特點(diǎn),包括:
- 使用 TLS 加密、強(qiáng)身份認(rèn)證和授權(quán)的集群內(nèi)服務(wù)到服務(wù)的安全通信。
- 自動(dòng)負(fù)載均衡的 HTTP, gRPC, WebSocket,和 TCP 流量。
- 通過豐富的路由規(guī)則、重試、故障轉(zhuǎn)移和故障注入對(duì)流量行為進(jìn)行細(xì)粒度控制。
- 一個(gè)可插入的策略層和配置 API,支持訪問控制、速率限制和配額。
- 對(duì)集群內(nèi)的所有流量(包括集群入口和出口)進(jìn)行自動(dòng)度量、日志和跟蹤。
SpringCloud概述
Spring Cloud為開發(fā)人員提供了用于快速構(gòu)建分布式系統(tǒng)中某些常見模式的工具(例如,配置管理,服務(wù)發(fā)現(xiàn),斷路器,智能路由,微代理,控制總線)。主要涉及的組件包括:
Eureka:注冊(cè)中心
Zuul:服務(wù)網(wǎng)關(guān)
Rbiibon:負(fù)載均衡
Feign:服務(wù)調(diào)用
Hystrix:熔斷器
Istio 和Spring Cloud的區(qū)別
大家會(huì)發(fā)現(xiàn):Istio和 spring cloud都可以提供服務(wù)發(fā)現(xiàn)、負(fù)截均衡、限流、鏈路跟蹤、鑒權(quán)等微服務(wù)治理手段,那么二者的主要區(qū)別是什么呢?
1、Istio 使用功能強(qiáng)大的 Envoy 服務(wù)代理擴(kuò)展了 Kubernetes,kubernetes本身是一個(gè)運(yùn)維平臺(tái),而Spring cloud只是一個(gè)開發(fā)框架,所以這就注定了Istio在運(yùn)維層面更為優(yōu)秀,下圖說明了kubernetes和Spring cloud的差異
Istio通過K8S API收集了Service信息來接管后續(xù)工作,把流量轉(zhuǎn)發(fā)控制權(quán)交給了由C++開發(fā)的Envoy,Envoy就是Istio的 Sidecar。因此Istio更注重運(yùn)維而Spring cloud更注重開發(fā);
2、Istio 支持多語言(Istio 實(shí)現(xiàn)了Service Mesh,而Service Mesh的核心是改變通信和服務(wù)治理能力的提供的方式,通過將這些能力實(shí)現(xiàn)從各語言業(yè)務(wù)實(shí)現(xiàn)中解耦,下沉到基礎(chǔ)設(shè)施層面,以一種更加通用和標(biāo)準(zhǔn)化的方式提供,屏蔽不同語言、不同平臺(tái)的差異性,有利于通信和服務(wù)治理能力的迭代和創(chuàng)新,使得業(yè)務(wù)實(shí)現(xiàn)更加方便。Service Mesh避免了多語言服務(wù)治理上的重復(fù)建設(shè),通過Service Mesh語言無關(guān)的通信和服務(wù)治理能力,助力于多語言技術(shù)棧的效率提升);SpringCloud體系的缺點(diǎn)是語言只能指定Java;
3、個(gè)人認(rèn)為最重要的是spring cloud 是侵入式微服務(wù),Istio是非侵入式微服務(wù)。在Istio中服務(wù)發(fā)現(xiàn),注冊(cè),調(diào)用,負(fù)載均衡,降級(jí)熔斷隔離,網(wǎng)關(guān)都是非侵入式的,不需要程序員關(guān)心,不需要加入依賴和注解。
從下面這張圖中,就可以更為清晰地看到,Istio與springcloud的差異
二者的選擇
看到這里,大家一定會(huì)認(rèn)為在Istio和SpringCloud的比較中,Istio會(huì)完勝!因?yàn)镮stio的出現(xiàn)為微服務(wù)架構(gòu)減輕了很多的負(fù)擔(dān),開發(fā)者不需要關(guān)心服務(wù)調(diào)用的超時(shí)、重試、rate limit 的實(shí)現(xiàn),服務(wù)之間的安全、授權(quán)也自動(dòng)得到了保證;集群管理員也能夠很方便地發(fā)布應(yīng)用(AB 測(cè)試和灰度發(fā)布),并且能清楚看到整個(gè)集群的運(yùn)行情況。
但是這并不表明有了 Istio 就可以高枕無憂了,Istio 只是把原來分散在應(yīng)用內(nèi)部的復(fù)雜性統(tǒng)一抽象出來放到了統(tǒng)一的地方,并沒有讓原來的復(fù)雜消失不見。因此我們需要維護(hù) Istio 整個(gè)集群,而 Istio 的架構(gòu)比較復(fù)雜,一般需要基于 kubernetes 之上,這兩個(gè)系統(tǒng)都比較復(fù)雜,而且它們的穩(wěn)定性和性能會(huì)影響到整個(gè)集群。
因此在采用Isito 之前,必須做好清楚的規(guī)劃,權(quán)衡它帶來的好處是否遠(yuǎn)大于額外維護(hù)它的花費(fèi),需要有相關(guān)的人才對(duì)整個(gè)網(wǎng)絡(luò)、kubernetes 和 Istio 都比較了解才行。下圖做了一個(gè)關(guān)于Istio和springcloud的總結(jié),大家可以自行判斷選擇哪種框架。