您好,登錄后才能下訂單哦!
這篇文章主要介紹“ 怎么理解SpringCloud框架”,在日常操作中,相信很多人在 怎么理解SpringCloud框架問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答” 怎么理解SpringCloud框架”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
本文基于SpringBoot 1.5.7和SpirngCloud Dalston.SR5。
針對這個架構(gòu)圖我分層介紹一下:
1、是web服務(wù)器的選型,這個我選擇的是nginx+keepalived,haproxy也是一個選擇,但是haproxy在反向代理處理跨域訪問的時候問題很多。所以我們nginx有些地方做了keep-alive模式處理,減少了三次握手的次數(shù),提高了連接效率。keepalived做nginx的負(fù)載,虛擬一個vip對外,兩個nginx做高可用,nginx本身反向代理zuul集群。
2、api gateway,這里的zuul很多人詬病,說是速度慢推薦直接用nginx,這里我還是推薦使用zuul的,畢竟zuul含有攔截器和反向代理,在權(quán)限管理、單點(diǎn)登錄、用戶認(rèn)證時候還是很有用的,而且zuul自帶ribbon負(fù)載均衡,如果你直接用nginx,還需要單獨(dú)做一個feign或者ribbon層,用來做業(yè)務(wù)集群的負(fù)載層,畢竟直接把接口暴露給web服務(wù)器太危險了。這里zuul帶有ribbon負(fù)載均衡和hystrix斷路器,直接反向代理serviceId就可以代理整個集群了。
3、業(yè)務(wù)集群,這一層我有些項(xiàng)目是分兩層的,就是上面加了一個負(fù)載層,下面是從service開始的,底層只是單純的接口,controller是單獨(dú)一層由feign實(shí)現(xiàn),然后內(nèi)部不同業(yè)務(wù)服務(wù)接口互調(diào),直接調(diào)用controller層,只能說效果一般,多了一次tcp連接。所以我推薦合并起來,因?yàn)樽鲞^spring cloud項(xiàng)目的都知道,feign是含有ribbon的,而zuul也含有ribbon,這樣的話zuul調(diào)用服務(wù)集群,和服務(wù)集群間接口的互調(diào)都是高可用的,保證了通訊的穩(wěn)定性。Hystrix還是要有的,沒有斷路器很難實(shí)現(xiàn)服務(wù)降級,會出現(xiàn)大量請求發(fā)送到不可用的節(jié)點(diǎn)。當(dāng)然service是可以改造的,如果改造成rpc方式,那服務(wù)之間互調(diào)又是另外一種情況了,那就要做成負(fù)載池和接口服務(wù)池的形式了,負(fù)載池調(diào)用接口池,接口池互相rpc調(diào)用,feign client只是通過實(shí)現(xiàn)接口達(dá)到了仿rpc的形式,不過速度表現(xiàn)還是不錯的。
4、redis緩存池,這個用來做session共享,分布式系統(tǒng)session共享是一個大問題。同時呢,redis做二級緩存對降低整個服務(wù)的響應(yīng)時間,并且減少數(shù)據(jù)庫的訪問次數(shù)是很有幫助的。當(dāng)然redis cluster還是redis sentinel自己選擇。
5、eurake注冊中心這個高可用集群,這里有很多細(xì)節(jié),比如多久刷新列表一次,多久監(jiān)測心跳什么的,都很重要。
6、spring admin,這個是很推薦的,這個功能很強(qiáng)大,可以集成turbine斷路器監(jiān)控器,而且可以定義所有類的log等級,不用單獨(dú)去配置,還可以查看本地log日志文件,監(jiān)控不同服務(wù)的機(jī)器參數(shù)及性能,非常強(qiáng)大。它加上elk動態(tài)日志收集系統(tǒng),對于項(xiàng)目運(yùn)維非常方便。
7、zipkin,這個有兩種方式,直接用它自己的功能界面查看方式,或者用stream流的方式,由elk動態(tài)日志系統(tǒng)收集。但是我必須要說,這個對系統(tǒng)的性能損害非常大,因?yàn)殒溌纷粉櫟臅r候會造成響應(yīng)等待,而且等待時間非常長接近1秒,這在生產(chǎn)環(huán)境是不能忍受的,所以生產(chǎn)環(huán)境最好關(guān)掉,有問題調(diào)試的時候再打開。
8、消息隊列,這個必須的,分布式系統(tǒng)不可能所有場景都滿足強(qiáng)一致性,這里只能由消息隊列來作為緩沖,這里我用的是Kafka。
9、分布式事物,我認(rèn)為這是分布式最困難的,因?yàn)椴煌臉I(yè)務(wù)集群都對應(yīng)自己的數(shù)據(jù)庫,互相數(shù)據(jù)庫不是互通的,互相服務(wù)調(diào)用只能是相互接口,有些甚至是異地的,這樣造成的結(jié)果就是網(wǎng)絡(luò)延遲造成的請求等待,網(wǎng)絡(luò)抖動造成的數(shù)據(jù)丟失,這些都是很可怕的問題,所以必須要處理分布式事物。我推薦的是利用消息隊列,采取二階段提交協(xié)議配合事物補(bǔ)償機(jī)制,具體的實(shí)現(xiàn)需要結(jié)合業(yè)務(wù),這里篇幅有限就不展開說了。
10、config配置中心,這是很有必要的,因?yàn)榉?wù)太多配置文件太多,沒有這個很難運(yùn)維。這個一般利用消息隊列建立一個spring cloud bus,由git存儲配置文件,利用bus總線動態(tài)更新配置文件信息。
11、實(shí)時分布式日志系統(tǒng),logstash收集本地的log文件流,傳輸給elasticsearch,logstash有兩種方式,1、是每一臺機(jī)器啟動一個logstash服務(wù),讀取本地的日志文件,生成流傳給elasticsearch。2、logback引入logstash包,然后直接生產(chǎn)json流傳給一個中心的logstash服務(wù)器,它再傳給elasticsearch。elasticsearch再將流傳給kibana,動態(tài)查看日志,甚至zipkin的流也可以直接傳給elasticsearch。這個配合spring admin,一個查看動態(tài)日志,一個查看本地日志,同時還能遠(yuǎn)程管理不同類的日志級別,對集成和運(yùn)維非常有利。
最后要說說,spring cloud的很多東西都比較精確,比如斷路器觸發(fā)時間、事物補(bǔ)償時間、http響應(yīng)時間等,這些都需要好好的設(shè)計,而且可以優(yōu)化的點(diǎn)非常多。比如:http通訊可以使用okhttp,jvm優(yōu)化,nio模式,數(shù)據(jù)連接池等等,都可以很大的提高性能。
還有一個docker問題,很多人說不用docker就不算微服務(wù)。其實(shí)我個人意見,spring cloud本身就是微服務(wù)的,只需要jdk環(huán)境即可。編寫dockerfile也無非是集成jdk、添加jar包、執(zhí)行jar而已,或者用docker compose,將多個不同服務(wù)的image組合run成容器而已。但是帶來的問題很多,比如通訊問題、服務(wù)器性能損耗問題、容器進(jìn)程崩潰問題,當(dāng)然如果你有一套成熟的基于k8s的容器管理平臺,這個是沒問題的,如果沒有可能就要斟酌了。而spring cloud本身就是微服務(wù)分布式的架構(gòu),所以個人還是推薦直接機(jī)器部署的,當(dāng)然好的DevOps工具將會方便很多。
引言
面試中面試官喜歡問組件的實(shí)現(xiàn)原理,尤其是常用技術(shù),我們平時使用了SpringCloud還需要了解它的實(shí)現(xiàn)原理,這樣不僅起到舉一反三的作用,還能幫助輕松應(yīng)對各種問題及有針對的進(jìn)行擴(kuò)展。
以下是《Java深入微服務(wù)原理改造房產(chǎn)銷售平臺》課程講到的部分原理附圖,現(xiàn)在免費(fèi)開放給大家,讓大家輕松應(yīng)對原理面試題。
服務(wù)注冊發(fā)現(xiàn)組件Eureka工作原理
服務(wù)網(wǎng)關(guān)組件Zuul工作原理
跨域時序圖
Eureka與Ribbon整合工作原理
解決分布式一致性
級聯(lián)故障流程
斷路器組件Hystrix工作原理
分布式追蹤Sleuth工作原理
SpringBoot自動配置工作原理
到此,關(guān)于“ 怎么理解SpringCloud框架”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。