SpringCloud實戰項目全套學習教程連載中
PassJava 學習教程
簡介
- PassJava-Learning項目是PassJava(佳必過)項目的學習教程。對架構、業務、技術要點進行講解。
- PassJava 是一款Java
面試刷題
的開源系統,可以用零碎時間利用小程序查看常見面試題,夯實Java基礎。 - PassJava 項目可以教會你如何搭建SpringBoot項目,Spring Cloud項目
- 採用流行的技術,如 SpringBoot、MyBatis、Redis、 MySql、 MongoDB、 RabbitMQ、Elasticsearch,採用Docker容器化部署。
更好的閱讀體驗
文檔連載目錄
- 打造一款 刷Java 知識的小程序
- 打造一款 刷Java 知識的小程序(二)
- 01.五分鐘搞懂分佈式基礎概念
- 02.快速搭建Linux環境-運維必備
- 03.配置虛擬機網絡
- 04.安裝Docker
- 05.Docker安裝mysql
- 06.Docker安裝redis
- 07.本地開發環境配置
- 08.配置Git
- 09.初始化項目和添加微服務
- 10.PassJava-微服務劃分圖
- 11.初始化數據庫和表
- 12.搭建管理後臺
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網關
- 抽象了微服務中都需要的公共功能
- 提供了負載均衡、自動熔斷、灰度發佈、統一認證、限流、日誌統計功能