1. 程式人生 > 其它 >Spring cloud學習

Spring cloud學習

一、閘道器

1.Spring Cloud Gateway是基於Spring生態系統之上構建的API閘道器,包括:Spring 5.x,Spring Boot 2.x和Project Reactor。Spring Cloud Gateway旨在提供一種簡單而有效的方法來路由到API,併為它們提供跨領域的關注點,例如:安全性,監視/指標,限流等。

2.API Gateway(APIGW / API 閘道器),顧名思義,是系統對外的唯一入口。API閘道器封裝了系統內部架構,為每個客戶端提供定製的API。

3.微服務的應用可能部署在不同機房,不同地區,不同域名下。此時客戶端(瀏覽器/手機/軟體工具)想 要請求對應的服務,都需要知道機器的具體 IP 或者域名 URL,當微服務例項眾多時,這是非常難以記憶的,對 於客戶端來說也太複雜難以維護。此時就有了閘道器,客戶端相關的請求直接傳送到閘道器,由閘道器根據請求標識 解析判斷出具體的微服務地址,再把請求轉發到微服務例項。這其中的記憶功能就全部交由閘道器來操作了。

4.閘道器核心概念:

  • 路由(Route):路由是閘道器最基礎的部分,路由資訊由 ID、目標 URI、一組斷言和一組過濾器組成。如果斷言 路由為真,則說明請求的 URI 和配置匹配。
  • 斷言(Predicate):Java8 中的斷言函式。Spring Cloud Gateway 中的斷言函式輸入型別是 Spring 5.0 框架中 的 ServerWebExchange。Spring Cloud Gateway 中的斷言函式允許開發者去定義匹配來自於 Http Request 中的任 何資訊,比如請求頭和引數等。
  • 過濾器(Filter):一個標準的 Spring Web Filter。Spring Cloud Gateway 中的 Filter 分為兩種型別,分別是 Gateway Filter 和 Global Filter。過濾器將會對請求和響應進行處理。


  4.1 路由斷言工廠RoutePredicateFactory包含的主要實現類如圖所示,包括Datetime、Cookie、請求的遠端地址、路由權重、請求頭、Host 地址、請求方法、請求路徑和請求引數、IP地址和子網掩碼等型別的路由斷言。
  4.2 在spring cloud gateway中配置uri有三種方式,包括:

    • websocket配置方式
    • http地址配置方式
    • 註冊中心配置方式

  4.3 限流配置:限流就是限制流量。通過限流,我們可以很好地控制系統的 QPS(響應時間),從而達到保護系統的目的。常見的限流演算法有:計數器演算法,漏桶(Leaky Bucket)演算法,令牌桶(Token Bucket)演算法。


二、註冊中心

1.註冊中心在微服務專案中扮演著非常重要的角色,是微服務架構中的紐帶,類似於通訊錄,它記錄了服務和服務地址的對映關係。在分散式架構中,服務會註冊到這裡,當服務需要呼叫其它服務時,就到這裡找到服務的地址,進行呼叫。

2.註冊中心解決了服務發現的問題。在沒有註冊中心時候,服務間呼叫需要知道被調方的地址或者代理地址。當服務更換部署地址,就不得不修改呼叫當中指定的地址或者修改代理配置。而有了註冊中心之後,每個服務在呼叫別人的時候只需要知道服務名稱就好,繼續地址都會通過註冊中心同步過來。

3.Nacos是阿里巴巴開源的一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。


三、配置中心

1.配置中心就是一種統一管理各種應用配置的基礎服務元件。

2.配置中心將配置從各應用中剝離出來,對配置進行統一管理,應用自身不需要自己去管理配置。

3.Nacos是阿里巴巴開源的一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。

4配置中心的服務流程如下:

  • 使用者在配置中心更新配置資訊。
  • 服務A和服務B及時得到配置更新通知,從配置中心獲取配置。

5.動態重新整理:通常會在Controller裡邊用@Value取出使用,但是你要是想改變他,就要重新改程式碼,打包,部署,十分麻煩,我們需要讓配置檔案的值變得動起來,Nacos也採用了Spring Cloud原生註解@RefreshScope實現配置自動更新。

6.mysql支援:在單機模式時nacos使用嵌入式資料庫實現資料的儲存,不方便觀察資料儲存的基本情況。我們可以配置mysql資料庫,視覺化的檢視資料的儲存。

7.服務流量權重支援及流量保護:Nacos為使用者提供了流量權重控制的能力,同時開放了服務流量的閾值保護,以幫助使用者更好的保護服務服務提供者叢集不被意外打垮。

8.Nacos還提供服務例項的上下線操作,在服務詳情頁面,可以點選例項的“上線”或者“下線”按鈕,被下線的例項,將不會包含在健康的例項列表裡。

9.Nacos支援基於Namespace和Group的配置分組管理,以便使用者更靈活的根據自己的需要按照環境或者應用、模組等分組管理微服務以及Spring的大量配置,在配置管理中主要提供了配置歷史版本、回滾、訂閱者查詢等核心管理能力。

10.Nacos基於Namespace幫助使用者邏輯隔離多個名稱空間,這可以幫助使用者更好的管理測試、預發、生產等多環境服務和配置,讓每個環境的同一個配置(如資料庫資料來源)可以定義不同的值。


四、服務呼叫

1.Feign 是Spring Cloud Netflix元件中的一量級Restful的 HTTP 服務客戶端,實現了負載均衡和 Rest 呼叫的開源框架,封裝了Ribbon和RestTemplate, 實現了WebService的面向介面程式設計,進一步降低了專案的耦合度。

2.Feign 旨在使編寫 JAVA HTTP 客戶端變得更加簡單,Feign 簡化了RestTemplate程式碼,實現了Ribbon負載均衡,使程式碼變得更加簡潔,也少了客戶端呼叫的程式碼,使用 Feign 實現負載均衡是首選方案,只需要你建立一個介面,然後在上面添加註解即可。

3.Feign 是宣告式服務呼叫元件,其核心就是:像呼叫本地方法一樣呼叫遠端方法,無感知遠端 HTTP 請求。讓開發者呼叫遠端介面就跟呼叫本地方法一樣的體驗,開發者完全無感知這是遠端方法,無需關注與遠端的互動細節,更無需關注分散式環境開發。

4.Feign 內建了Ribbon,用來做客戶端負載均衡呼叫服務註冊中心的服務。Feign預設集成了Ribbon,Nacos也很好的相容了Feign,預設實現了負載均衡的效果。

5.Feign本身並不支援Spring MVC的註解,它有一套自己的註解,為了更方便的使用Spring Cloud孵化了OpenFeign。並且支援了Spring MVC的註解,如@RequestMapping,@PathVariable等等。OpenFeign的@FeignClient可以解析Spring MVC的@RequestMapping註解下的介面,並通過動態代理方式產生實現類,實現類中做負載均衡呼叫服務。

6.gzip是一種資料格式,採用deflate演算法壓縮資料。gzip大約可以幫我們減少70%以上的檔案大小。開啟壓縮可以有效節約網路資源,但是會增加CPU壓力,建議把最小壓縮的文件大小適度調大一點。

7.兩臺伺服器建立HTTP連線的過程涉及到多個數據包的交換,很消耗時間。採用HTTP連線池可以節約大量的時間提示吞吐量。Feign的HTTP客戶端支援3種框架:HttpURLConnection、HttpClient、OkHttp。預設是採用java.net.HttpURLConnection,每次請求都會建立、關閉連線,為了效能考慮,可以引入httpclient、okhttp作為底層的通訊框架。

8.瀏覽器發起的請求可以通過F12檢視請求和響應資訊。如果想看微服務中每個介面我們可以使用日誌配置方式進行檢視詳細資訊。

9.請求攔截器:在微服務應用中,通過feign的方式實現http的呼叫,可以通過實現feign.RequestInterceptor介面在feign執行後進行攔截,對請求頭等資訊進行修改。


五、服務監控

六、鏈路追蹤

七、熔斷和降級

八、分散式檔案

九、分散式事務

十、分散式日誌