詳細的講一下微服務框架 SpringCloud

2022-08-31 12:27:11 字數 2509 閱讀 9296

大家都知道,最開始開發系統就是單機模式(only one computer)。但是隨著網路的不斷發展,資料不斷的增加,業務不斷的增加,之前在一台機器上實現的服務現在效能上更不上了,所以很需要一種模式來解決這個問題---微服務架構由此誕生。

大白話講一下就是:把乙個大型的單個應用程式和服務拆分為多個的支援微服務,各自都有對應的業務。個人認為就是按照業務來劃分成不同的微服務。

其處理複雜的系統時表現出高效能,易維護,好協調等好處

(1)通過分解各個微服務,以及各大元件技術,使得服務更好流暢的執行,分工明確。比如說之前飯店有10個人,每個人既要跑堂,又要記賬,又要做飯;這很麻煩;然而使用微服務架構後每個人都有了i明確的分工,自然就搞笑了很多,責任也好追查。

(2)微服務架構模式是每個微服務獨立的部署。開發者不再需要協調其它服務部署對本服務的影響。這種改變可以加快部署速度。ui團隊可以採用ab測試,快速的部署變化。微服務架構模式使得持續化部署成為可能。

(3)這種架構使得每個微服務都可以有專門開發團隊來開發。開發者可以自由選擇開發技術,提供api服務。這種自由意味著開發者不需要被迫使用某專案開始時採用的過時技術,他們可以選擇現在的技術。甚至於,因為服務都是相對簡單,即使用現在技術重寫以前**也不是很困難的事情。

spring cloud整體核心架構只有一點:rest服務。也就是這一點與其他所有的微服務框架都不同,其他都可以算是prc框架,而springcloud是基於restful實現的服務呼叫。而且其社群牛逼,技術更新相比很快。還有一點就是該框架提供的是全家桶服務;不像dubbo這些框架缺少很多元件,就採用其他元件來弄,搞得像是個雜牌機一樣;不過也正如doubbo的一位負責人說的,dubbo他的目的和springcloud不一樣,其旨在解決各個微服務的效能,管理等。接下來我們主要講各大元件技術。

就是在服務的呼叫和被呼叫之間加了乙個中介軟體。這個rureka主要分為伺服器和客戶端。

服務生產者把服務註冊到eureka;服務消費者在eureka中找到想要的服務api,並進行呼叫。eureka大多都是用集群,其保證的是ap原則。就是可用性和分割槽容錯性。

springcloud ribbon 是乙個基於netflix ribbion實現的的客戶端負載工具。主要功能是提供客戶端的軟體負載均衡演算法。通過springcloud的封裝,可以讓我們輕鬆的將面向服務的rest服務請求自動轉換為客戶端負載均衡的服務呼叫。服務提供者只需要啟動多個服務實力示例並註冊到乙個註冊中心或是多個相關聯的服務註冊中心。服務消費者直接通過呼叫@loadbalanced註解修飾過的resttemplate來實現面向服務介面呼叫。

feign是乙個宣告式webservice端。使用feign能夠讓編寫webservice客戶端更加簡單,他的使用方法是定義乙個介面,然後在其上面新增註解,其與rureka和ribbon組合使用以支援負載均衡。

feign整合了ribbon:利用ribbon某個微服務維護了服務列表資訊,通過整合irule這個介面,可以實現不同的lb演算法。而與ribbon不同的是通過feign只需要定義服務繫結介面且以宣告式的方法,優雅而簡單的實現了服務呼叫。

hystrix主要是處理分布式系統的延遲和容錯的開源庫。通常在分布式系統中會出現服務a依賴服務b,服務b有依賴服務c(這種情況叫做扇出);而只要b斷開或出問題的話,時間一長會導致所有的服務都卡在這裡就會出現系統崩潰。那麼hystrix能夠保證在乙個微服務出現問題了,不會導致整體服務失敗,避免級聯故障,以提高分布式系統的彈性。

而把其稱之為斷路器,也是在乙個服務單元發生故障後,通過故障檢測(類似熔斷保險絲),向呼叫方返回乙個符合預期,可處理的備選響應(fallback),而不是長時間的等待或者丟擲呼叫方無法處理的異常。這樣就保證了服務呼叫方的執行緒不會被長時間,不必要的占用,從而避免了故障在分布式系統中的蔓延,乃至雪崩。

其能夠完成服務降級,服務熔斷,服務限流,接近實時的監控。其實和前面說的意思差不多。

zuul伺服器也是會註冊進eureka中,提供**,路由,過濾三大功能呢。

zuul註冊進eureka中,同時也會從eureka的服務列表中獲得其他的微服務資訊。即以後的微服務都是通過zuul跳轉後獲得的。

這個理解起來就很簡單了。就是把每乙個微服務提供者的配置檔案統一管理。可以放到git上,或者其他伺服器利用svn來管理。

springcloud是乙個提供全家桶的微服務架構。下面是常用的元件架構圖。

通俗的講一下 閉包

閉包是指有權訪問另乙個函式作用域中的變數的函式。建立閉包的常見方式,就是在乙個函式內部建立另乙個函式。常見閉包出現的問題 function createfunction console.log i 的值 i return result createfunction 返回的結果 當我們呼叫 creat...

講一下git的相關問題

首先git是來進行專案版本控制的。git地常用命令有哪些?有git add,git status,git commit m,git push,git pull等。如果我們需要多人操作同乙個檔案,出現衝突,那麼衝突該如何解決?當遇到多人協作修改同乙個檔案時出現衝突,就需要先將遠端檔案先git pull...

簡單講一下 SpringMVC的執行流程

執行流程 1 使用者向伺服器傳送請求,請求被 spring 前端控制 servelt dispatcherservlet 捕獲 捕獲 2 dispatcherservlet 對請求 url進行解析,得到請求資源識別符號 uri 然後根據該 uri,呼叫 獲得該 handler 配置的所有相關的物件 ...