微服務架構的核心關鍵點
1、微服務的服務治理
服務治理(服務註冊及服務發現),通過服務發現,消費者可以在預先不知道服務提供者物理地址的情況下,僅通過相應的服務名稱就可以實現服務調用。服務註冊機制,可以讓服務提供者在上線時將所提供的服務信息註冊到服務治理伺服器中,供服務消費者使用。當服務下線時將自己從服務治理伺服器中註銷,避免服務消費者調用而造成的異常。
2、微服務的負載均衡
客戶端負載均衡,也稱為軟負載均衡,指在服務消費者保存有一份服務者列表,這份服務者列表通常是從服務治理伺服器中動態獲取,也可以採用股東配置方式,然後通過某種負載均衡策略來決定每次服務調用時所使用的具體服務實例,從而實現微服務之間的負載均衡。
3、微服務的統一入口
API服務網關就是為微服務提供了一個統一入口,並能夠附加一些路由規則,使得不同的微服務通過路由規則提供一致的訪問入口。
4、微服務的容錯
微服務架構的容錯提出了斷路器、服務降級等模式,這些模式都可以有效防止微服務調用失敗而引起的連鎖反應,並且在必要時可以通過這些模式主動實施應用的降級處理,從而保證核心業務的正常運行。
5、微服務的統一配置
對微服務架構中,數十個、上百個實例,統一對配置進行管理和發布更新。
6、微服務的監控
日誌多由服務實力自己管理,如何將分散在多個日誌之間的調用串聯起來,形成一個完整的請求調用鏈。微服務監控中提供了日誌聚合、日誌可視化分析、調用鏈跟蹤等。
7、微服務的部署
通過構建-發布管道來構建自動化發布流程,可以通過Docker工具快速部署,通過k8s來構建自動化部署編排等。
Spring Cloud技術
SpringCloud使用Spring Boot風格將比較成熟的微服務框架組合起來,屏蔽掉了複雜的配置和實現原理,為快速構建微服務架構的應用提供了一套設施工具和開發支持。
所提供的基礎設置,如服務發現、客戶端負載均衡、API網關、微服務容錯、統一配置中心、消息總線及微服務調用監控等,都可以做到一鍵啟動和部署。
Spring Cloud所提供的核心功能包含:
基於Netfilix實現服務治理、客戶端負載均衡和聲明式調用;服務網關微服務容錯管理整合消息中間件提供消息驅動式開發基於Spring Security提供微服務安全、單點登錄功能分布式、版本化的統一配置管理微服務調用鏈及追蹤管理Spring Cloud子項目
對於Spring Cloud旗下的子項目大致可以分為兩類:一類是對現有成熟的第三方開源項目Spring Boot化,進行封裝集成,使得我們基於Spring的開發非常容易集成和使用。第二類是新增一些微服務架構開發所需的基礎設置,如Spring Cloud Config提供了統一配置中心、Spring Clound Stream則充當了與Kafka、RabbitMQ等消息中間件快速集成的橋梁。
1、Spring Clound與Spring Boot
Spring Boot可以說是微服務架構的核心技術之一,快速啟動,通過Spring Boot應用中添加Spring MVC依賴,就可以快速實現基於REST架構的服務接口,並且可以提供堆HTTP標準動作的支持。而且Spring Boot默認提供JackJson序列化支持,可以讓服務接口輸入、輸出支持JSON。當使用Spring Cloud進行微服務架構開發時,必須要Spring Boot。
2、Spring Cloud與服務治理
服務治理是Spring Cloud的核心,在實現上提供了連個選擇,即Consul和Netflix的Eureka。
Eureka提供了服務註冊中心、服務發現客戶端,以及註冊服務的UI界面應用。在Eureka的實現中,節點之間相互平等,有部分註冊中心「掛掉」也不會對整個應用造成影響,即使集群只剩下一個節點存活,也可以正常地治理服務。即使所有服務註冊節點都宕機,Eureka客戶端中所緩存的服務實例列表信息,也可讓服務消費能夠正常工作,從而保障微服務之間互相調用的健壯性和應用的彈性。
3、Spring Cloud與客戶端負載均衡
Ribbon默認與Eureka進行無縫整合,當客戶端啟動的時候,從Eureka伺服器中獲取一份服務註冊列表並維護在本地,當服務消費者需要調用時,Ribbon就會根據負載均衡策略選擇一個合適的服務提供者實例並進行訪問。
通過在微服務調用時通過RestTemplate進行調用,這時需要開發者處理參數、調用路徑等,Spring Cloud通過集成Netflix的Feign項目,為開發者提供了聲明式服務調用,從而簡化了微服務之間的調用處理方式。並且默認Feigin項目集成了Ribbon,使得聲明式調用也支持客戶端負載均衡功能。
4、Spring Cloud與微服務容錯、降級
微服務容錯、降級旨在為微服務架構提供更大的彈性,通過Hystrix提供的@HystrixCommand註解可以輕鬆為我們所開發的微服務提供容錯、回退、降級等功能。另外,Hystrix也默認集成到Fegin子項目中。
Hystrix是根據「斷路器」模式而創建。當Hystrix監控到某服務單元發生故障之後,就會進入服務熔斷處理,並向調用方返回一個符合預期的服務降級處理(fallback),而不是長時間的等待或者拋出調用異常,從而保障服務調用方的線程不會被長時間、不必要地佔用,避免故障在應用中的蔓延造成的雪崩效應。
而Hystrix的儀錶盤項目(Dasgboard)可以監控各個服務調用所消耗的時間、請求數、成功率等。通過這種近乎實時的監控和告警,可以及時發現系統中潛在問題並進行處理。
5、Spring Clond與服務網關
Spring Cloud通過集成Netflix中的Zuul實現API服務網關功能,提供對請求的路由和過濾兩個功能,其中路由功能負責將外部請求轉發到具體的微服務實例上,是實現外部訪問統一入口的基礎。過濾器功能則負責對請求的處理過程進行幹預,是實現請求校驗、服務聚合等功能的基礎。通過Zuul,可以將細粒度的服務組合起來提供一個粗粒度的服務,所有請求都導入一個統一的入口,對外整個服務只需要暴露一個API藉口,屏蔽了服務端的實現細節。通過Zuul的反向代理功能,可以實現路由尋址,將請求轉發到後端的粗粒度服務上,並做一些通用的邏輯處理。
Zuul默認會與Eureka伺服器進行整合,自動從Eureka伺服器中獲取所有註冊的服務並進行路由映射,實現API服務網關自動配置。
6、Spring Cloud與消息中間件
Spring Cloud提供了Stream項目,通過建立消息應用抽象層,構建了消息收發、分組消費和消息分片等功能處理,將業務應用中的消息收發與具體消息中間件進行解耦,使微服務應用開發中可以非常方便地與Kafka和RabbitMQ等消息中間件進行集成。
此外,Spring Cloud Bus基於Stream進行擴展,可以作為微服務之間的事件、消息總線,用於服務集群中狀態變化的傳播,比如Spring Cloud Config藉助Bus,可以實現配置的動態刷新處理。
7、Spring Cloud與分布式配置中心
Spring Cloud Config具有中心化、版本控制、支持動態更新和語言獨立等特性。在Config子項目中將微服務應用分為兩種角色:配置伺服器(Config Server)和配置客戶端(Config Client)。使用配置伺服器集中地管理所有配置屬性文件,配置服務中心可以將配置屬性文件存儲到Git、SVN等具有版本管理倉庫中,也可以存放在文件系統中。默認採用Git的方式進行存儲,因此可以很容易地對配置文件進行修改,並實現版本控制。
8、Spring Cloud與微服務鏈路追蹤
Sleuth核心思想就是通過一個全局的ID將分布在各微服務結點上的請求處理串聯起來,還原了調用關係,並藉助數據埋點,實現對微服務調用鏈路上的性能數據的採集。因此,通過Sleuth可以很清楚地了解到一個用戶請求經過了哪些服務、每個服務處理花費了多長時間,從而可以對用戶的請求進行分析。
此外,通過將採集的數據發送給Zipkin進行存儲、統計和分析,從而可以實現可視化的分析和展示,幫助開發者對微服務實施優化處理。
9、Spring Cloud與微服務安全
Spring Cloud Security提供了一個認證和鑑權的安全框架,實現了資源授權、令牌管理等功能,同時結合了Zuul可以將認證信息在微服務調用過程中直接傳遞,簡化了我們進行安全管控的開發。此外,因為Spring Cloud Security默認支持OAuth 2.0認證協議,因此單點登錄也可以非常容易實現,並且OAuth 2.0所生成的令牌可以使用JWT的方式,進一步簡化了微服務中的安全管理。
10、Spring Cloud其他子項目
Spring Cloud Cli:提供了以命令行和腳本的方式來管理微服務。Spring Cloud Data Flow:一個用於開發、執行大數據處理的統一編程模型和託管服務。其基於原生雲,並重新對Spring XD進行設計,簡化了大數據應用的開發,為基於微服務的分布式流處理和批處理數據通道提供了一系列模型和最佳實踐。Spring Cloud Task:用於短時的任務管理和調度微服務管理,通過與Data Flow一起使用。Spring Cloud Starters:類似於Spring Boot的啟動項目,為基於Spring Cloud的微服務開發提供開箱即用的依賴管理Spring Cloud Contract:面向Java的契約框架,消費者驅動的,旨在幫助開發者完成微服務測試的子項目。Spring Cloud優點
Spring Cloud作為Spring Boot的傳承,遵循約定優於配置的原則,在使用時不需要複雜的配置就可以運行起來,學習曲線低。Spring Cloud中大部分子項目開箱即用,採用自動化配置機制,使用門檻低。Spring Cloud屬於Spring大家族,Spring是進行企業級開發的首選框架,因此在項目中引入Spring Cloud的技術成本低。Spring Cloud的口號就是開發「面向雲環境的應用程式」,通過集成成熟的第三方開源組件,為微服務架構的開發提供了全方位的支持,並且在Spring系列下後續的更新、完善都有保障。Spring Cloud拋棄了傳統的RPC通信,採用了基於HTTP的REST方式,使得微服務接口更為靈活,服務提供者和消費者之間的依賴只需要連接即可,而不存在代碼級別的強依賴,這對快速演化的微服務架構更合適。Spring Cloud並沒有限制所使用的環境,可以與異構系統進行整合。同時對於所提供的各組件服務即可單獨部署,又可集中部署,方便了運維和管理。