來(lái)源:北大青鳥(niǎo)總部 2023年08月17日 15:08
時(shí)至今日,Springcloud幾乎已經(jīng)是互聯(lián)網(wǎng)公司的標(biāo)配了,但是很多同學(xué)可能對(duì)SpringCloud還不是特別的了解,微服務(wù)和SpirngCloud經(jīng)常傻傻分不清楚,今天的我們的文章是介紹下SpringCloud生態(tài);順便把微服務(wù)的和SpirngCloud的關(guān)系,在跟大家解釋下;因?yàn)橐肜斫釹pringCloud,怎么也離不了微服務(wù)。
因?yàn)镾pringCloud火爆的大背景就是微服務(wù)架構(gòu)的火爆,接下來(lái)我們就按照先說(shuō)微服務(wù),再說(shuō)SpringCloud的順序,給大家一一介紹。
· 微服務(wù)
提到微服務(wù)相信大家都不太陌生,互聯(lián)網(wǎng)經(jīng)過(guò)這么多年的發(fā)展,從最初的草莽時(shí)代,到現(xiàn)在巨頭林立的階段,很多領(lǐng)域都已經(jīng)相對(duì)完善。
從早期的單體架構(gòu)、集群架構(gòu)、分布式架構(gòu)、到現(xiàn)在基本人人都是微服務(wù)架構(gòu),這里我們先通過(guò)幾張圖來(lái)看下互聯(lián)網(wǎng)技術(shù)架構(gòu)的演進(jìn)。
· 單體架構(gòu)
我們都知道互聯(lián)網(wǎng)剛開(kāi)始發(fā)展的時(shí)候,用戶量是非常少的,能接觸到網(wǎng)絡(luò)的人都是極其有限的,所以這個(gè)時(shí)候的互聯(lián)網(wǎng)的架構(gòu)師是這樣的,只有一個(gè)服務(wù)器,一個(gè)數(shù)據(jù)庫(kù)。
· 集群架構(gòu)
緊接著,隨著互聯(lián)網(wǎng)的發(fā)展,用戶量的增加(就是能玩的電腦的人多了),原來(lái)的這個(gè)單體的架構(gòu)支撐不了這么大的用戶訪問(wèn)量了,之前一個(gè)服務(wù)器,現(xiàn)在網(wǎng)站動(dòng)不動(dòng)就掛了,這個(gè)課怎么得了;大佬一咬牙,一跺腳,一個(gè)服務(wù)器不行,加多來(lái)幾個(gè)服務(wù)器,就這么一不小心互聯(lián)網(wǎng)的技術(shù)架構(gòu)就變成了集群架構(gòu)。
· 分布式架構(gòu)
本來(lái)一切都這么安靜發(fā)生著,好像宇宙大和諧的樣子,用戶感覺(jué)網(wǎng)速嗖嗖的,大佬們也感覺(jué)我們的想法真牛逼,簡(jiǎn)直可以改變世界??墒菦](méi)想到,突然互聯(lián)網(wǎng)迎來(lái)了前所未有的大發(fā)展,因?yàn)槎嗄昵坝幸詾槔先嗽谥袊?guó)的南海邊畫了一個(gè)圈。
這個(gè)時(shí)候各位技術(shù)大佬可是坐不住了,網(wǎng)站總是卡死可怎么辦,以為增加的服務(wù)器根本解決不了問(wèn)題,之前所有的業(yè)務(wù)都在同一個(gè)服務(wù)器中,非常復(fù)雜。這個(gè)時(shí)候就開(kāi)始把之前耦合在一起的業(yè)務(wù)給拆分來(lái)了,比如:訂單模塊、用戶模塊等;這樣互聯(lián)網(wǎng)的技術(shù)架構(gòu)也就演變。
· 微服務(wù)架構(gòu)
本來(lái)分布式架構(gòu)基本滿足了現(xiàn)在互聯(lián)網(wǎng)的發(fā)展,一切都這么安靜的發(fā)生著,但是大廠的可是永遠(yuǎn)不那么安分,依然進(jìn)行著創(chuàng)新,想要進(jìn)一步提高效率,所以之前僅從業(yè)務(wù)單元進(jìn)行拆分,還是滿足不了大廠的需求,所以就對(duì)業(yè)務(wù)進(jìn)行了更加細(xì)粒度的拆分,而且每一個(gè)服務(wù)都可以獨(dú)立部署,這就就是我們現(xiàn)在所說(shuō)的微服務(wù)。
· SpringCloud
好了,到這里互聯(lián)網(wǎng)的技術(shù)架構(gòu)演變基本就這么回事兒,最終實(shí)現(xiàn)微服務(wù)的技術(shù)就是我們接下來(lái)要介紹SpringCloud,要說(shuō)SpringCloud是個(gè)啥,先買個(gè)關(guān)子,且聽(tīng)我慢慢道來(lái)。
SpringCloud是微服務(wù)架構(gòu)的集大成者,將一系列優(yōu)秀的組件進(jìn)行了整合(大雜燴)已經(jīng)在國(guó)內(nèi)眾多大中小型的公司有實(shí)際應(yīng)用案例。許多公司的業(yè)務(wù)線全部擁抱SpringCloud,部分公司選擇部分擁抱SpringCloud.
之所以說(shuō)它是大雜燴,我們可以通過(guò)下面這張圖來(lái)感受一下,因?yàn)樗鼛缀蹙桶鼣埩怂形⒎?wù)架構(gòu)所需的技術(shù)組件。這里再給大家透露一個(gè)小秘密,就是SpringCloud中的很多組件,都是一家電影公司開(kāi)源的;你能想象嗎?一家電影公司的技術(shù)實(shí)力都這么強(qiáng),我們真的應(yīng)該反思反思了。
SpringCloud中組件很多,并且還在擴(kuò)充中,所以我們就介紹幾個(gè)常用的組件:
Eureka:服務(wù)治理組件,包含服務(wù)注冊(cè)與發(fā)現(xiàn)
Feign:聲明式服務(wù)調(diào)用組件
Ribbon:客戶端負(fù)載均衡的服務(wù)調(diào)用組件
Hystrix:容錯(cuò)管理組件,實(shí)現(xiàn)了熔斷器
Zuul:網(wǎng)關(guān)組件,提供智能路由、訪問(wèn)過(guò)濾等功能
Config:分布式配置中心組件,用來(lái)統(tǒng)一配置文件
通過(guò)這么多核心的組件就可以輕松的搭建起一個(gè)個(gè)微服務(wù)系統(tǒng)架構(gòu),由于都是一個(gè)生態(tài)內(nèi)的技術(shù),所以很多技術(shù)都很兼容,極大的降低了開(kāi)發(fā)的門開(kāi),所以現(xiàn)在基本是互聯(lián)網(wǎng)公司的,都上微服務(wù)架構(gòu)了,接下來(lái)我們就挨個(gè)來(lái)看下這幾個(gè)組件吧。
· Eureka服務(wù)治理組件
Eureka是Netflix開(kāi)發(fā)的服務(wù)治理框架,是一個(gè)基于REST的服務(wù),主要用于服務(wù)間的注冊(cè)發(fā)現(xiàn)、負(fù)載均衡等。
· Feign聲明式服務(wù)調(diào)用組件
Feign是一個(gè)聲明式的web服務(wù)客戶端,一種負(fù)載均衡的HTTP客戶端,使用Feign調(diào)用API就像調(diào)用本地方法一樣,從避免了調(diào)用目標(biāo)微服務(wù)時(shí),需要不斷的解析/封裝json數(shù)據(jù)的繁瑣,通常是和Ribbon一起實(shí)現(xiàn)。
· Ribbon負(fù)載均衡組件
Ribbon 是一個(gè)基于HTTP 和 TCP的 客服端負(fù)載均衡工具,包括Feign 提供的聲明式服務(wù)調(diào)用也是基于該Ribbon 實(shí)現(xiàn)的。Ribbon默認(rèn)提供很多種負(fù)載均衡算法,例如輪詢、隨機(jī)等等。我們也可以根據(jù)自己的需要自定義的負(fù)載均衡策略。
· Hystrix熔斷限流組件
Hystrix這個(gè)組件就有點(diǎn)復(fù)雜了,因?yàn)樗赡軟](méi)有具體的實(shí)現(xiàn)某項(xiàng)功能,他主要的作用提高系統(tǒng)的高可用性和穩(wěn)定性,在分布式系統(tǒng)環(huán)境下,服務(wù)間各種依賴,一個(gè)業(yè)務(wù)調(diào)用通常依賴多個(gè)基礎(chǔ)服務(wù)是非常常見(jiàn)的。而Hystrix就起到了監(jiān)控服務(wù),以及服務(wù)容錯(cuò)的作用,如果處理問(wèn)題不及時(shí),就很可能出現(xiàn)雪崩,后果不堪設(shè)想。
· Zuul服務(wù)網(wǎng)關(guān)組件
Zuul是微服務(wù)API網(wǎng)關(guān),也是用戶訪問(wèn)的第一道關(guān),所有用戶的請(qǐng)求都會(huì)經(jīng)過(guò)Zuul才能到達(dá)后端應(yīng)用程序。Zuul提供了動(dòng)態(tài)路由、監(jiān)控、彈性負(fù)載和安全功能。Zuul底層利用各種filter實(shí)現(xiàn)如下功能:
認(rèn)證和安全,識(shí)別每個(gè)需要認(rèn)證的資源,拒絕不符合要求的請(qǐng)求。
性能監(jiān)測(cè),在服務(wù)邊界追蹤并統(tǒng)計(jì)數(shù)據(jù),提供精確的生產(chǎn)視圖。
動(dòng)態(tài)路由,根據(jù)需要將請(qǐng)求動(dòng)態(tài)路由到后端集群。
壓力測(cè)試,逐漸增加對(duì)集群的流量以了解其性能。
負(fù)載卸載,預(yù)先為每種類型的請(qǐng)求分配容量,當(dāng)請(qǐng)求超過(guò)容量時(shí)自動(dòng)丟棄。
靜態(tài)資源處理,直接在邊界返回某些響應(yīng)。
所以在網(wǎng)關(guān)這一層,除了核心的路由功能外,也是限流的一種手段。
· Config分布式配置中心組件
Config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了Client和Server兩個(gè)部分,server提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client通過(guò)接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用。工作中也經(jīng)常和攜程開(kāi)源的Apllo一起使用。
好了,到這里就基本給大家介紹了SpringCloud的幾個(gè)核心組件,如果我們把這些核心組件搞定后,就基本把微服務(wù)的核心知識(shí)搞定啦!