01.分佈式基礎概念
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網關
- 抽象了微服務中都需要的公共功能
- 提供了負載均衡、自動熔斷、灰度發佈、統一認證、限流、日誌統計功能