文章目錄
-
- 分布式基礎概念
-
- 1、微服務
- 2、叢集&分布式&節點
- 3、遠端調用
- 4、負載均衡
- 5、服務注冊/發現&注冊中心
- 6、配置中心
- 7、服務熔斷&服務降級
- 8、API網關
分布式基礎概念
1、微服務
微服務架構風格,就像是把一個單獨的應用程式開發為一套小服務,每個小服務運作在自 己的程序中,并使用輕量級機制通信,通常是 HTTP API。這些服務圍繞業務能力來建構, 并通過完全自動化部署機制來獨立部署。這些服務使用不同的程式設計語言書寫,以及不同資料存儲技術,并保持最低限度的集中式管理。 簡而言之:拒絕大型單體應用,基于業務邊界進行服務微化拆分,各個服務獨立部署運作。
2、叢集&分布式&節點
叢集 是個實體形态,分布式是個工作方式。
分布式中的每一個節點,都可以做叢集。 而叢集并不一定就是分布式的。
**叢集 😗*指的是将幾台伺服器集中在一起,實作同一業務。
**分布式 😗*是指将不同的業務分布在不同的地方。
例如:京東是一個分布式系統,衆多業務運作在不同的機器,所有業務構成一個大型的業務叢集。每一個小的業務,比如使用者系統,通路壓力大的時候一台伺服器是不夠的。我們就 應該将使用者系統部署到多個伺服器,也就是每一個業務系統也可以做叢集化;
節點:叢集中的一個伺服器
3、遠端調用
在分布式系統中,各個服務可能處于不同主機,但是服務之間不可避免的需要互相調用,我 們稱為遠端調用。
SpringCloud 中使用 HTTP+JSON 的方式完成遠端調用
4、負載均衡
分布式系統中,A 服務需要調用 B 服務,B 服務在多台機器中都存在,A 調用任意一個 伺服器均可完成功能。
為了使每一個伺服器都不要太忙或者太閑,我們可以負載均衡的調用每一個伺服器,提升網站的健壯性。
常見的負載均衡算法:
**輪詢:**為第一個請求選擇健康池中的第一個後端伺服器,然後按順序往後依次選擇,直 到最後一個,然後循環。
**最小連接配接:**優先選擇連接配接數最少,也就是壓力最小的後端伺服器,在會話較長的情況下 可以考慮采取這種方式。
**散列:**根據請求源的 IP 的散列(hash)來選擇要轉發的伺服器。這種方式可以一定程度上保證特定使用者能連接配接到相同的伺服器。如果你的應用需要處理狀态而要求使用者能連接配接到和之前相同的伺服器,可以考慮采取這種方式。
5、服務注冊/發現&注冊中心
A 服務調用 B 服務,A 服務并不知道 B 服務目前在哪幾台伺服器有,哪些正常的,哪些服務 已經下線。解決這個問題可以引入注冊中心:
如果某些服務下線,我們其他人可以實時的感覺到其他服務的狀态,進而避免調用不可用的服務
6、配置中心
每一個服務最終都有大量的配置,并且每個服務都可能部署在多台機器上。我們經常需要變 更配置,我們可以讓每個服務在配置中心擷取自己的配置。
配置中心用來集中管理微服務的配置資訊
7、服務熔斷&服務降級
在微服務架構中,微服務之間通過網絡進行通信,存在互相依賴,當其中一個服務不可用時,有可能會造成雪崩效應。要防止這樣的情況,必須要有容錯機制來保護服務。
[外鍊圖檔轉存失敗,源站可能有防盜鍊機制,建議将圖檔儲存下來直接上傳
1)、服務熔斷
a. 設定服務的逾時,當被調用的服務經常失敗到達某個門檻值,我們可以開 啟斷路保護機制,後來的請求不再去調用這個服務。本地直接傳回預設 的資料
2)、服務降級
a. 在運維期間,當系統處于高峰期,系統資源緊張,我們可以讓非核心業 務降級運作。降級:某些服務不處理,或者簡單處理【抛異常、傳回 NULL、 調用 Mock 資料、調用 Fallback 處理邏輯】。
8、API網關
在微服務架構中,API Gateway 作為整體架構的重要元件,它抽象了微服務中都需要的公共 功能,同時提供了用戶端負載均衡,服務自動熔斷,灰階釋出,統一認證,限流流控,日 志統計等豐富的功能,幫助我們解決很多 API 管理難題。