分布式基礎概念
1、微服務
拒絕大型單體應用,基于業務邊界進行服務微化拆分,各個服務獨立部署運行
2、集群、分布式、節點
集群
- 是一種物理形態
- 將幾臺服務器集中在一起,實現同一業務
分布式
- 是一種工作方式
- 若干獨立計算機的集合,這些計算機對于用戶來說就像單個相關系統
- 將不同的業務分布在不同的地方
節點
- 集群中的一個服務器
3、遠程調用
分布式系統中,各個服務可能處于不同主機,但是服務之間不可避免的需要互相調用,我們稱為遠程調用。
SpringCloud 中使用 HTTP+JSON 的方式完成遠程調用。
4、負載均衡
A 服務調用 B 服務,B 服務部署在多臺機器,A 發送請求到任意一個服務器均可完成調用。
為了使每臺服務器不至于忙于處理請求,可以將請求均衡到每一個服務器,提升網站的可用性。
負載均衡算法:
- 輪詢:請求依次按順序分發到不同的可用服務器執行,循環分發請求。
- 最小連接:分發請求到連接數最少的服務器。場景:處理請求用時較長的場景。
- 散列:根據用戶請求的 IP 地址的散列(hash)來選擇要轉發的服務器。場景:需要處理狀態而要求用戶能連接到相同服務器。
5、服務注冊、服務發現、注冊中心
A 服務調用 B 服務、C 服務,但是 A 服務不知道 B、C 服務所在的服務器是正常還是下線,注冊中心可以幫助解決。
注冊中心實時知道哪些服務正常,哪些服務下線,也能記錄新增的正常服務。服務之間調用不需要去判斷哪些服務正常,注冊中心會告訴服務有效的調用地址。
**服務注冊:**服務將自己的 IP 和端口報告給注冊中心的過程。
**服務發現:**查詢可用微服務列表及其網絡地址的機制。
**注冊中心:**集中記錄每個服務的地址,注冊和注銷服務。
**服務檢查:**檢查已注冊的服務,如發現某服務長時間無法訪問,則會從注冊中心移除該服務。
6、配置中心
每個服務都有大量配置,更新一個配置,需要同步到每個服務,如何修改每個服務的配置呢?
每個服務從配置中心獲取配置,自動更新自己的配置。
7、服務熔斷、服務降級
下單場景:用戶下單了一個商品,客戶端調用訂單服務來生成預付款訂單,訂單服務調用商品服務查看下單的哪款商品,商品服務調用庫存服務判斷這款商品是否有庫存,如有庫存,則可以生成預付款訂單。
雪崩場景:
- 第一次滾雪球:庫存服務不可用(如響應超時等),庫存服務收到的很多請求都未處理完,庫存服務將無法處理更多請求。
- 第二次滾雪球:因商品服務的請求都在等庫存服務返回結果,導致商品服務調用庫存服務的很多請求未處理完,商品服務將無法處理其他請求,導致商品服務不可用
- 第三次滾雪球:因商品服務不可用,訂單服務調用商品服務的的其他請求無法處理,導致訂單服務不可用。
- 第四次滾雪球:因訂單服務不可用,客戶端將不能下單,更多客戶將重試下單,將導致更多下單請求不可用。
服務熔斷:
設置服務的超時,當被調用的服務某段時間內失敗率達到某個閾值,則對該服務開啟短路保護,后來的請求不調用這個服務,直接返回默認的數據。
服務降級:
對非核心業務降級運行:某些服務不處理,或者簡單處理(拋異常、返回 Null、返回 Mock 數據)
8、API 網關
- 抽象了微服務中都需要的公共功能
- 提供了負載均衡、自動熔斷、灰度發布、統一認證、限流、日志統計功能