首頁>技術>

前言

目前,Spring Boot+Spring Cloud架構已經成為Java程式設計師的必備技能之一,剛開始學習時看到琳琅滿目的Spring全家桶,可能會感到無從下手。如果只瞭解微服務中的各知識點,而忽略了以微服務分散式架構的方式學習系統的架構順序,初學者可能就不知道如何使用微服務構建分散式系統。為了使讀者更快掌握Spring Boot+SpringCloud的基礎知識與架構方法,本文的章節順序即應用系統的架構順序。

分散式可以理解為人體器官,人體可看成分散式系統,大腦是註冊中心的叢集,四肢與器官是提供服務的微服務,前進的距離是微服務執行之後的返回值,消耗的體力是微服務中處理的邏輯,影響的記憶是某些微服務對資料庫的增刪改查。分散式可看成一種思想,而Spring Cloud 與 Spring Boot是實現了這種思想的工具。

無論多複雜的分散式應用程式,整合多少個伺服器,呼叫多少種服務介面,使用多少種協議,使用叢集還是高可用的何種架構方式,使用客戶端還是服務端的何種負載均衡,使用哪個訊息中介軟體、哪個資料庫叢集,使用搜索引擎/非關係型資料庫/時序性資料庫/關係型資料庫/檔案管理等多少種儲存介質,其分散式本質都是分散式自身的思想。建議讀者動手將本文例項都敲在IDE中,在Linux伺服器上搭建各叢集,那麼上面那些看起來頗具難度的問題,都將不會是難題。

目錄主要內容

介紹微服務分散式的相關概念,搭建第一個微服務專案,瞭解微服務專案的執行過程。透過微服務整合Consul註冊中心,搭建第一個微服務+註冊中心的分散式系統。多個微服務與Consul註冊中心相連,彼此通訊,微服務獲得彼此的介面及地址,呼叫彼此的介面與服務。

然後無可避免地需要處理彼此通訊時報錯的情況,以免單一微服務無法正常提供服務,導致整個分散式系統的癱瘓。此時採用Ribbon客戶端負載均衡方案,依靠多臺伺服器部署多個相同微服務專案,以提高系統的效能。在分散式通訊不足以解決全部報錯問題時,可選擇Hystrix 進行更精細劃分,保證在任何一臺微服務出現問題時,系統整體仍然能正常執行。

至此初步搭建了分散式系統,然後開始增加微服務的增刪改查等業務功能。在系統處理增刪改查過程的同時,還需要事務功能的支撐與管理。在初步增刪改查後,依靠微服務的快取增加微服務的效能,同時需要確保Redis與MySQL之間的增刪改查一致性。另外,如果有特殊業務需求,可由分散式訊息通訊彼此協作、溝通、處理。

在處理基本業務後,還會有定時任務等業務需求,此時需要微服務的任務排程進行處理。而單節點任務排程的微服務可能會有宕機或重複執行等相關問題,只有使多臺微服務同時進行任務排程,且彼此協同的情況下,才能解決此類問題。這時需要 Quartz分散式任務排程解決多個任務排程間彼此協同、相互管理等問題。若有檔案上傳、下載等相關需求,需要使用微服務的檔案上傳管理。單節點檔案上傳可能存在磁碟空間不足或不易管理等問題,需要 FastDFS 分散式檔案管理以解決多臺檔案管理伺服器彼此協同、磁碟擴容等問題。

第1章微服務分散式架構設計原理;

本章1.3節利用Spring Boot建立了第一個微服務應用程式。1.5節將該應用程式的埠號修改為9090。1.7節將該應用程式的properties配置檔案修改成了YAML配置檔案。1.8節透過單配置檔案讓工程適應多應用場景。1.9節透過多配置檔案使工程適應多環境進行開發。

在實際工程中,分散式的環境整合經常會使用多環境配置,多環境配置是微服務十分重要的部分。另外,在實際工程中建議多運用bootstrap.yml 和 bootstrap.properties 檔案,以方便日後維護。

第2章分散式的註冊中心;

2.3 節初步認識了 Consul 註冊中心,並且搭建了 Consul 註冊中心的叢集,使 Consul註冊中心可以更加良好地執行。

2.4節使用Spring Cloud整合了Consul進行註冊並獲得其他服務的註冊地址。

2.5節使用Spring Cloud整合了Consul的Config功能,可以透過Java程式碼獲取Consul上的配置引數,方便多個微服務工程管理相同的配置資訊。

在得到了其他微服務資訊後,第3章將介紹使用Feign框架透過Consul註冊中心呼叫其他微服務介面。

第3章分散式的通訊;

基於微服務的分散式架構,本章使用 Feign 達到多個微服務互相通訊的目的。當呼叫Server端出現異常時,透過Feign降級回退函式返回。

微服務整合Swagger減少了多個程式設計師之間的溝通成本,在某程式設計師提供Swagger UI後,其他程式設計師可以直接瞭解介面地址、名稱、入參、返回值等資訊。在得到其他介面的資訊後,透過Feign Client端可以呼叫Server端微服務提供的介面。Feign的攔截器在Feign Client端呼叫其他Server介面時,對本次請求統一處理。

如果Feign Client端呼叫的Server端發生了報錯現象,Feign的Fallback類和Feign的Fallback 工廠分別用降級回退類與降級回退工廠,直接將本次請求透過降級函式回退給前臺,不會造成執行緒的阻塞。

如果Feign Client端呼叫的Server端發生超時現象,可透過配置Feign內建的Ribbon負載均衡器進行解決。一旦 Server 端發生超時現象,Feign 都會直接將本次請求透過降級函式回退給前臺,不會造成執行緒的阻塞。

第4章分散式的客戶端負載均衡;

透過將多個微服務使用相同的微服務名稱註冊在同一個註冊中心上,Feign Client可以使用Ribbon根據演算法呼叫其中任何一個微服務,透過多臺伺服器提高應用程式的併發承受能力。在分散式架構中,分散式通訊是最重要的環節之一,註冊中心保證分散式能夠得到相關的通訊地址,客戶端負載均衡減小了分散式通訊的併發壓力。

第5章分散式的斷路器;

5.2節實現了更高階的降級回退方式,在一個函式中使用多個Feign Client的Service,若有任何異常,整個函式都會回退到降級函式中。

5.4節實現了在呼叫某個函式後,將該函式的返回結果作為快取,以防多次呼叫產生高併發,用“函式名+入參”的形式作為 Key 值,將返回結果作為 Value 值快取。在一個函式中使用多個Feign Client的Service,以減小多個微服務之間溝通的併發壓力。

5.5節實現了在多次呼叫某個函式後,將多個執行緒合併成一個執行緒進行呼叫,減小了系統記憶體和執行緒併發數量的壓力。在一個函式中使用某個Feign Client的Service,將多次得到的ID合併成一個List對其他微服務進行請求,減小多個微服務之間溝通的併發壓力。

5.6節利用Hystrix自帶的Dashboard效能監控儀表盤頁面和效能監控控制元件,監控其他微服務的Hystrix執行緒池,包括Hystrix執行緒池目前的剩餘執行緒數目、執行緒池容量、併發情況、執行情況、執行次數等。

其實Hystrix自帶的Dashboard儀表盤使用方法十分簡單,在需要被監控的微服務中透過application資源配置檔案開啟被呼叫地址,透過@Bean註解將效能控制元件相關內容配置在 Spring 容器上,監控端Dashboard 儀表盤使用@EnableHystrix-Dashboard註解開啟頁面,並在頁面上呼叫Hystrix效能控制元件的相關地址即可。

分散式的三大劍客:註冊中心Consul(包括通訊Feign)、微服務Spring Application、斷路器Hystrix已經全部介紹完成。一般在分散式系統搭建初期,先要搭建三個基本要素,再在每個微服務中增加增刪改查等業務邏輯。

第6章微服務的非同步執行緒池;

非同步執行緒池是一個底層實現複雜但使用方法非常簡單的技術,優雅停止非同步執行緒池的測試執行過程則比較複雜。此處要注意每個細節,尤其是在優雅停止非同步執行緒池且執行完成所有應該執行的執行緒後,執行緒池中的執行緒數目是否正確歸零。

第7章微服務整合持久化資料來源;

本章透過Spring Boot微服務整合MyBatis註解和JPA註解,達到操作資料庫進行增刪改查操作的效果。

由於JPA註解、MyBatis註解的分頁和多表十分類似,本章不再重複介紹。透過運用7.2節和7.4節中的@Select、@Query等註解,可瞭解利用註解進行資料庫開發的思想。

第8章微服務事務;

透過8.2節的例項更加完整地瞭解@Transational註解,包括該註解在@Service層對多個dao層的應用方式,擴充套件了第7章的內容,希望透過本章可以使讀者更加清晰地理解事務的使用方式、傳播行為、隔離級別等內容。

第9章微服務的快取與分散式的訊息通訊;

Redis是最簡潔的非關係型快取資料庫,在實際工作中使用較多。9.2節與9.6節分別使用Spring Data Redis與Spring Cache整合Redis以實現快取的增刪改查操作。

9.5節使用Redis作為訊息通訊中介軟體進行多個微服務之間的通訊。

第10章微服務的任務排程與分散式的任務排程;

10.1節整合了單點任務排程,10.4節整合了分散式任務排程,以此介紹了任務排程的分散式方法。

Quartz使用方法十分簡捷,在實際專案中也可以使用其他分散式解決方案的框架。其實更重要的是理解任務排程的分散式原理,而非死記硬背API。

第11章微服務的檔案上傳與分散式檔案管理;

11.2節實現了微服務檔案上傳,11.7節實現了微服務的分散式上傳。

11.5.4 節介紹了分散式上傳的原理,以及微服務的即將上傳伺服器、檔案伺服器分割成兩個伺服器進行操作。FastDFS安裝較為複雜,可參考相關書籍。

第12章擴充套件與部署;

本章拓展了分散式架構的相關方案,總結了本文前幾章未涉及的Spring Boot與Spring Cloud框架擴充套件內容。

16
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • DPDK Release 20.11