微服務(wù)的理解:? 就是把一個(gè)項(xiàng)目拆分為多個(gè)項(xiàng)目扶认, 項(xiàng)目之間進(jìn)行獨(dú)立運(yùn)行获三。 通過Http或者Socket來進(jìn)行通信處理數(shù)據(jù)和調(diào)用只怎。
Spring? Cloud? Eureka(服務(wù)治理):?
?? ? ? 服務(wù)治理: 服務(wù)治理是微服務(wù)架構(gòu)中最為核心和基礎(chǔ)的模塊,它主要用來實(shí)現(xiàn)各個(gè)微服務(wù)實(shí)例的自動化注冊和發(fā)現(xiàn)险毁。
?? ? ? 服務(wù)注冊: 在服務(wù)治理框架中,通常都會構(gòu)建一個(gè)注冊中心们童,每個(gè)服務(wù)單元向注冊中心登記自己提供的服務(wù)畔况,包括服務(wù)的主機(jī)與端口號、服務(wù)版本號慧库、通訊協(xié)議等一些附加信息跷跪。注冊中心按照服務(wù)名分類組織服務(wù)清單,同時(shí)還需要以心跳檢測的方式去監(jiān)測清單中的服務(wù)是否可用齐板,若不可用需要從服務(wù)清單中剔除吵瞻,以達(dá)到排除故障服務(wù)的效果。
? ? ? 服務(wù)發(fā)現(xiàn): 在服務(wù)治理框架下甘磨,服務(wù)間的調(diào)用不再通過指定具體的實(shí)例地址來實(shí)現(xiàn)橡羞,而是通過服務(wù)名發(fā)起請求調(diào)用實(shí)現(xiàn)。服務(wù)調(diào)用方通過服務(wù)名從服務(wù)注冊中心的服務(wù)清單中獲取服務(wù)實(shí)例的列表清單济舆,通過指定的負(fù)載均衡策略取出一個(gè)服務(wù)實(shí)例位置來進(jìn)行服務(wù)調(diào)用卿泽。
?? ? Eureka服務(wù)端:Eureka服務(wù)端,即服務(wù)注冊中心滋觉。它同其他服務(wù)注冊中心一樣签夭,支持高可用配置。依托于強(qiáng)一致性提供良好的服務(wù)實(shí)例可用性椎侠,可以應(yīng)對多種不同的故障場景第租。Eureka服務(wù)端支持集群模式部署,當(dāng)集群中有分片發(fā)生故障的時(shí)候我纪,Eureka會自動轉(zhuǎn)入自我保護(hù)模式煌妈。它允許在分片發(fā)生故障的時(shí)候繼續(xù)提供服務(wù)的發(fā)現(xiàn)和注冊,當(dāng)故障分配恢復(fù)時(shí)宣羊,集群中的其他分片會把他們的狀態(tài)再次同步回來。集群中的的不同服務(wù)注冊中心通過異步模式互相復(fù)制各自的狀態(tài)汰蜘,這也意味著在給定的時(shí)間點(diǎn)每個(gè)實(shí)例關(guān)于所有服務(wù)的狀態(tài)可能存在不一致的現(xiàn)象仇冯。
?? ? 詳細(xì)介紹地址: https://blog.csdn.net/sunhuiliang85/article/details/76222517?
Spring? Cloud? Ribbon(客戶端負(fù)載均衡):
? ? ? Spring Cloud Ribbon 是一個(gè)基于Http和TCP的客服端負(fù)載均衡工具,它是基于Netflix Ribbon實(shí)現(xiàn)的族操。它不像服務(wù)注冊中心苛坚、配置中心比被、API網(wǎng)關(guān)那樣獨(dú)立部署,但是它幾乎存在于每個(gè)微服務(wù)的基礎(chǔ)設(shè)施中泼舱。包括前面的提供的聲明式服務(wù)調(diào)用也是基于該Ribbon實(shí)現(xiàn)的等缀。理解Ribbon對于我們使用Spring Cloud來講非常的重要,因?yàn)樨?fù)載均衡是對系統(tǒng)的高可用娇昙、網(wǎng)絡(luò)壓力的緩解和處理能力擴(kuò)容的重要手段之一尺迂。
?? ? 使用springcloud ribbon實(shí)現(xiàn)與eureka的配合
?ribbon可從eureka服務(wù)注冊表中獲取服務(wù)提供者的地址列表,使用一定的負(fù)載均衡算法冒掌,Ribbon的工作主要分為2步噪裕。
1.先選擇eureka service ,優(yōu)先選擇一個(gè)zone負(fù)載較小的service股毫。
2.根據(jù)用戶制定策膳音,從service取得eureka 服務(wù)注冊表中選擇一個(gè)地址。
提供的策略:輪詢Round Robin铃诬、隨機(jī)Random祭陷、ResponseTime加權(quán)
Spring? Cloud? Hystrix(服務(wù)容錯(cuò)保護(hù)):
? ? 在微服務(wù)架構(gòu)中通常會有多個(gè)服務(wù)層調(diào)用,基礎(chǔ)服務(wù)的故障可能會導(dǎo)致級聯(lián)故障趣席,進(jìn)而造成整個(gè)系統(tǒng)不可用的情況兵志,這種現(xiàn)象被稱為服務(wù)雪崩效應(yīng)。服務(wù)雪崩效應(yīng)是一種因“服務(wù)提供者”的不可用導(dǎo)致“服務(wù)消費(fèi)者”的不可用,并將不可用逐漸放大的過程吩坝。
? ? 熔斷器的原理很簡單毒姨,如同電力過載保護(hù)器。它可以實(shí)現(xiàn)快速失敗钉寝,如果它在一段時(shí)間內(nèi)偵測到許多類似的錯(cuò)誤弧呐,會強(qiáng)迫其以后的多個(gè)調(diào)用快速失敗,不再訪問遠(yuǎn)程服務(wù)器嵌纲,從而防止應(yīng)用程序不斷地嘗試執(zhí)行可能會失敗的操作俘枫,使得應(yīng)用程序繼續(xù)執(zhí)行而不用等待修正錯(cuò)誤,或者浪費(fèi)CPU時(shí)間去等到長時(shí)間的超時(shí)產(chǎn)生逮走。熔斷器也可以使應(yīng)用程序能夠診斷錯(cuò)誤是否已經(jīng)修正鸠蚪,如果已經(jīng)修正,應(yīng)用程序會再次嘗試調(diào)用操作师溅。
熔斷器模式就像是那些容易導(dǎo)致錯(cuò)誤的操作的一種代理茅信。這種代理能夠記錄最近調(diào)用發(fā)生錯(cuò)誤的次數(shù),然后決定使用允許操作繼續(xù)墓臭,或者立即返回錯(cuò)誤蘸鲸。
? 斷路器很好理解, 當(dāng)Hystrix Command請求后端服務(wù)失敗數(shù)量超過一定比例(默認(rèn)50%), 斷路器會切換到開路狀態(tài)(Open). 這時(shí)所有請求會直接失敗而不會發(fā)送到后端服務(wù). 斷路器保持在開路狀態(tài)一段時(shí)間后(默認(rèn)5秒), 自動切換到半開路狀態(tài)(HALF-OPEN). 這時(shí)會判斷下一次請求的返回情況, 如果請求成功, 斷路器切回閉路狀態(tài)(CLOSED), 否則重新切換到開路狀態(tài)(OPEN). Hystrix的斷路器就像我們家庭電路中的保險(xiǎn)絲, 一旦后端服務(wù)不可用, 斷路器會直接切斷請求鏈, 避免發(fā)送大量無效請求影響系統(tǒng)吞吐量, 并且斷路器有自我檢測并恢復(fù)的能力.
?? 詳細(xì)介紹地址: https://www.cnblogs.com/ityouknow/p/6868833.html
Spring? Cloud? Feign(聲明式服務(wù)調(diào)用):
? ? Feign是一種聲明式、模板化的HTTP客戶端窿锉。在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠(yuǎn)程服務(wù)時(shí)能與調(diào)用本地方法一樣的編碼體驗(yàn)酌摇,開發(fā)者完全感知不到這? ? ? 是遠(yuǎn)程方法膝舅,更感知不到這是個(gè)HTTP請求
?? ? ? 詳細(xì)介紹地址:https://blog.csdn.net/neosmith/article/details/52449921
Spring Cloud ? Zuul(API網(wǎng)關(guān)服務(wù)): ? 過濾:安全、監(jiān)控窑多、限流仍稀、路由
基于Spring的微服務(wù)結(jié)點(diǎn)在能力上沒有高低貴賤之分,但是在角色上會分為邊緣服務(wù)和內(nèi)部服務(wù)兩部分埂息。內(nèi)部服務(wù)顧名思義是為對內(nèi)暴露服務(wù)的結(jié)點(diǎn)技潘,供架構(gòu)內(nèi)部來調(diào)用;邊緣服務(wù)是對外部網(wǎng)絡(luò)暴露的服務(wù)結(jié)點(diǎn)耿芹,也就是對外API接口崭篡。
開發(fā)人員頭疼的地方:為了防止我的程序在網(wǎng)絡(luò)上被人攻擊,我們需要寫各種權(quán)限機(jī)制吧秕,這些機(jī)制在每個(gè)微服務(wù)結(jié)點(diǎn)都要實(shí)現(xiàn)一次琉闪。一旦鑒權(quán)上有什么bug,又要全部節(jié)點(diǎn)上推倒重來砸彬,噩夢颠毙。
運(yùn)維人員頭疼的地方:邊緣服務(wù)前段都會架一個(gè)F5或者Nginx等負(fù)載均衡的代理,需要手動維護(hù)一份服務(wù)列表和服務(wù)地址的路由信息砂碉,隨著結(jié)點(diǎn)的擴(kuò)展或地址調(diào)整這份列表要變來變?nèi)ァ?/p>
為了解決鑒權(quán)重復(fù)的問題蛀蜜,使業(yè)務(wù)結(jié)點(diǎn)本身只關(guān)心實(shí)現(xiàn)自己的業(yè)務(wù),將對權(quán)限的處理抽離到上層增蹭。外部客戶先請求到Zuul上滴某,在Zuul服務(wù)上對權(quán)限進(jìn)行統(tǒng)一實(shí)現(xiàn)和過濾,以實(shí)現(xiàn)微服務(wù)結(jié)點(diǎn)的過濾和驗(yàn)證滋迈。
為了解決請求路由和安全過濾霎奢,Spring Cloud推出了一個(gè)API gateway組件:Spring Cloud Zuul。
在路由方面饼灿,Zuul將自己作為一個(gè)微服務(wù)結(jié)點(diǎn)注冊到Eureka上幕侠,就獲取了所有微服務(wù)的實(shí)例信息,同時(shí)又以服務(wù)名為ContextPath的方式創(chuàng)建路由映射碍彭。
詳細(xì)介紹: https://blog.csdn.net/yejingtao703/article/details/77816555/
Spring Cloud ? Config(分布式配置中心):
在分布式系統(tǒng)中晤硕,每一個(gè)功能模塊都能拆分成一個(gè)獨(dú)立的服務(wù),一次請求的完成庇忌,可能會調(diào)用很多個(gè)服務(wù)協(xié)調(diào)來完成舞箍,為了方便服務(wù)配置文件統(tǒng)一管理,更易于部署皆疹、維護(hù)创译,所以就需要分布式配置中心組件了,在spring cloud中墙基,有分布式配置中心組件spring cloud config软族,它支持配置文件放在在配置服務(wù)的內(nèi)存中,也支持放在遠(yuǎn)程Git倉庫里残制。引入spring cloud config后立砸,我們的外部配置文件就可以集中放置在一個(gè)git倉庫里,再新建一個(gè)config server初茶,用來管理所有的配置文件颗祝,維護(hù)的時(shí)候需要更改配置時(shí),只需要在本地更改后恼布,推送到遠(yuǎn)程倉庫螺戳,所有的服務(wù)實(shí)例都可以通過config server來獲取配置文件,這時(shí)每個(gè)服務(wù)實(shí)例就相當(dāng)于配置服務(wù)的客戶端config client,為了保證系統(tǒng)的穩(wěn)定折汞,配置服務(wù)端config server可以進(jìn)行集群部署倔幼,即使某一個(gè)實(shí)例,因?yàn)槟撤N原因不能提供服務(wù)爽待,也還有其他的實(shí)例保證服務(wù)的繼續(xù)進(jìn)行损同。
詳細(xì)介紹: https://blog.csdn.net/fox9916/article/details/79499854/
Spring Cloud? ? Bus(消息總線):
Spring Cloud Bus 將分布式的節(jié)點(diǎn)用輕量的消息代理連接起來。它可以用于廣播配置文件的更改或者服務(wù)之間的通訊鸟款,也可以用于監(jiān)控膏燃。
消息總線是一種通信工具,可以在機(jī)器之間互相傳輸消息何什、文件等组哩。消息總線扮演著一種消息路由的角色,擁有一套完備的路由機(jī)制來決定消息傳輸方向处渣。發(fā)送段只需要向消息總線發(fā)出消息而不用管消息被如何轉(zhuǎn)發(fā)伶贰。Spring cloud bus 通過輕量消息代理連接各個(gè)分布的節(jié)點(diǎn)。管理和傳播所有分布式項(xiàng)目中的消息霍比,本質(zhì)是利用了MQ的廣播機(jī)制在分布式的系統(tǒng)中傳播消息幕袱,目前常用的有Kafka和RabbitMQ。
1悠瞬、提交代碼觸發(fā)post請求給bus/refresh
2们豌、server端接收到請求并發(fā)送給Spring Cloud Bus
3、Spring Cloud bus接到消息并通知給其它客戶端
4浅妆、其它客戶端接收到通知望迎,請求Server端獲取最新配置
5、全部客戶端均獲取到最新的配置
? 詳細(xì)介紹: https://blog.csdn.net/jack281706/article/details/73742522
Spring Cloud? ? Stream(消息驅(qū)動微服務(wù)):
消息驅(qū)動理解: Windows消息是凌外,當(dāng)一個(gè)窗體或者控件需要讓另外一個(gè)窗體或者消息執(zhí)行某個(gè)動作辩尊,就向那個(gè)窗體發(fā)一個(gè)消息,放到對方的消息隊(duì)列中康辑,然后對方有一個(gè)消息循環(huán)不停的讀取消息隊(duì)列摄欲,并執(zhí)行相應(yīng)的動作轿亮。
簡單的講就是一種生產(chǎn)者,消費(fèi)者模式胸墙。發(fā)布者是生產(chǎn)我注,將輸出發(fā)布到數(shù)據(jù)中心,訂閱者是消費(fèi)者迟隅,訂閱自己感興趣的數(shù)據(jù)但骨。當(dāng)有數(shù)據(jù)到達(dá)數(shù)據(jù)中心時(shí),就把數(shù)據(jù)發(fā)送給對應(yīng)的訂閱者智袭。
消息中間件簡介: ? 詳細(xì)介紹:https://www.cnblogs.com/bluestorm/p/6633492.html
Spring Cloud? ? Sleuth(分布式服務(wù)跟蹤)
在微服務(wù)框架中奔缠,一個(gè)由客戶端發(fā)起的請求在后端系統(tǒng)中會經(jīng)過多個(gè)不同的的服務(wù)節(jié)點(diǎn)調(diào)用來協(xié)同產(chǎn)生最后的請求結(jié)果,每一個(gè)前段請求都會形成一條復(fù)雜的分布式服務(wù)調(diào)用鏈路吼野,鏈路中的任何一環(huán)出現(xiàn)高延時(shí)或錯(cuò)誤都會引起整個(gè)請求最后的失敗校哎。
Spring Cloud Sleuth提供了一套完整的服務(wù)跟蹤的解決方案。
Spring? Cloud? Shiro(安全權(quán)限控制):? ? 這個(gè)是進(jìn)入系統(tǒng)了箫锤, 然后進(jìn)行處理贬蛙。 Zuul這個(gè)是路由器的管理,在系統(tǒng)未進(jìn)入之前管理谚攒。?
Spring Cloud Data Flow: 大數(shù)據(jù)操作組建阳准,Spring XD的替代品,也是一個(gè)混合計(jì)算的模型馏臭,可以通過命令的方式操作數(shù)據(jù)流野蝇。
Spring Cloud Security: 安全模塊組件,是對Spring Security的封裝括儒,通常配合OAuth2使用來保護(hù)微服務(wù)系統(tǒng)的安全绕沈。
Spring Cloud Consul: 該組件是對Spring Cloud對Consul的封裝,和Eureka類似帮寻,他是另一個(gè)服務(wù)注冊和發(fā)現(xiàn)組件乍狐。
Spring Cloud Zookeep: 該組件是Spring Cloud 對Zookeeper的封裝和Eureka,Consul類似固逗,用于服務(wù)注冊和發(fā)現(xiàn)組件浅蚪。
Spring CLoud CLI: 該組件是Spring cloud 對Spring boot CLI的封裝,可以用命令(CMD)方式快速執(zhí)行運(yùn)行和搭建容器烫罩。
Spring Cloud Task: 該組件基于Spring Task惜傲, 提供了任務(wù)調(diào)度和任務(wù)管理的功能。
Spring Cloud Connectors: 用于Pass平臺鏈接到后端贝攒。