精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

支撐日均百萬訂單的微服務(wù)架構(gòu)應(yīng)該這么搞!

開發(fā) 架構(gòu) 開發(fā)工具
最近幾年微服務(wù)很火,大家都在建設(shè)微服務(wù),如果不懂點微服務(wù)相關(guān)的技術(shù),都不好意思跟同行打招呼了。

 最近幾年微服務(wù)很火,大家都在建設(shè)微服務(wù),如果不懂點微服務(wù)相關(guān)的技術(shù),都不好意思跟同行打招呼了。

[[342308]]


圖片來自 Pexels

 

我也見過身邊很多人在微服務(wù)踩過很多坑,我從 2016 年開始接觸微服務(wù),有多家大型企業(yè)的微服務(wù)分布式系統(tǒng)的架構(gòu)經(jīng)驗,不過微服務(wù)和涉及的分布式計算非常的復(fù)雜,絕非是一篇文章就可以講清楚的。

本文只是從最簡單的概念的基本使用帶你入門,如果后續(xù)還有興趣的話,可以查閱相關(guān)的文獻(xiàn)和技術(shù)書籍去深入學(xué)習(xí)。

本文的微服務(wù)分享以下三部分,總體大綱如下:

  • 微服務(wù)的概念和原則(理論)
  • Spring Cloud 如何低成本的實現(xiàn)微服務(wù)(實現(xiàn))
  • Spring Cloud 大型項目的架構(gòu)方案(真實案例)

微服務(wù)的概念和原則

什么是微服務(wù)?

簡單舉例:看軍事新聞的同學(xué)應(yīng)該都知道,一艘航空母艦作戰(zhàn)能力雖然很強(qiáng),但是弱點太明顯,就是防御能力太差,單艘的航空母艦很少單獨行動,通常航空母艦戰(zhàn)斗群才是主要軍事力量。

你可以把單艘航母理解為的單體應(yīng)用(防御差,機(jī)動性不好),把航母戰(zhàn)斗群(調(diào)度復(fù)雜,維護(hù)費用高)理解為微服務(wù)。

簡單講特征就是:

  • 單體應(yīng)用:簡單,脆弱(某個模塊出問題,整個系統(tǒng)不可用),戰(zhàn)斗力弱,維護(hù)成本低。
  • 微服務(wù)架構(gòu):復(fù)雜,健壯(某個模塊出問題,不會影響系統(tǒng)整體的可用性),戰(zhàn)斗力強(qiáng),維護(hù)成本高。

[[342309]]

 

單體作戰(zhàn)的應(yīng)用(圖)

[[342310]]

 

微服務(wù)戰(zhàn)斗群(圖)

大部分的開發(fā)者經(jīng)歷和開發(fā)過單體應(yīng)用,無論是傳統(tǒng)的 SSM,還是現(xiàn)在的 Spring Boot/Rails,它們都是單體應(yīng)用。

那么長期陪伴我們的單體應(yīng)用有什么弊端?我們是面臨了什么問題,導(dǎo)致我們要拋棄單體應(yīng)用轉(zhuǎn)向微服務(wù)架構(gòu)?

個人總結(jié)主要問題如下:

  • 部署成本高(無論是修改 1 行代碼,還是 10 行代碼,都要全量部署替換)。
  • 改動影響大,風(fēng)險高,測試成本高(不論代碼改動多小,成本都相同)。
  • 因為成本高,風(fēng)險高,所以導(dǎo)致部署頻率低(無法滿足快速交付客戶需求)。

當(dāng)然還有例如無法滿足快速擴(kuò)容,彈性伸縮,無法適應(yīng)云環(huán)境特性等問題,但我們不一一詳談了,以上的問題,都是微服務(wù)架構(gòu)要解決的問題,至于具體是怎么解決的,我們先放到后面再聊。

歷代應(yīng)用程序的架構(gòu)變遷(圖)

 

解決什么問題,又引入了什么問題?

我們先看看微服務(wù)能帶給我們什么?微服務(wù)架構(gòu)的特點:

  • 針對特定服務(wù)發(fā)布,影響小,風(fēng)險小,成本低
  • 頻繁發(fā)布版本,快速交付需求
  • 低成本擴(kuò)容,彈性伸縮,適應(yīng)云環(huán)境

我們知道一個樸素的理念,沒有任何事物是完美的,任何東西都有兩面性,有得必有失。

那么在選擇微服務(wù)在解決了快速響應(yīng)和彈性伸縮的問題同時,它又給我們帶來了什么問題?

個人總結(jié)如下:

  • 分布式系統(tǒng)的復(fù)雜性
  • 部署,測試和監(jiān)控的成本問題
  • 分布式事務(wù)和 CAP 的相關(guān)問題

系統(tǒng)應(yīng)用由原來的單體變成幾十到幾百個不同的工程,會所產(chǎn)生例如包括服務(wù)間的依賴,服務(wù)如何拆封,內(nèi)部接口規(guī)范,數(shù)據(jù)傳遞等等問題。

尤其是服務(wù)拆分,需要團(tuán)隊熟悉業(yè)務(wù)流程,懂得取舍,要保證拆分的粒度服務(wù)既符合“高內(nèi)聚,低耦合”的基本原則,還要兼顧業(yè)務(wù)的發(fā)展以及公司的愿景,要還要說服團(tuán)隊成員為之努力,并且積極投入,在多方中間取得平衡。

對于分布式系統(tǒng),部署,測試和監(jiān)控都需要大量的中間件來支撐,而且中間件本身也要維護(hù)。

原先單體應(yīng)用很簡單的事務(wù)問題 ,轉(zhuǎn)到分布式環(huán)境就變得很復(fù)雜,分布式事務(wù)是采用簡單的重試+補(bǔ)償機(jī)制,還是采用二階段提交協(xié)議等強(qiáng)一致性方法來解決,就要取決對業(yè)務(wù)場景的熟悉加上反復(fù)的權(quán)衡了。

相同問題還包括對 CAP 模型的權(quán)衡,總之微服務(wù)對團(tuán)隊整體的技術(shù)棧水平整體要求更高。

[[342311]]

 

微服務(wù)有哪些應(yīng)該遵循哪些原則?

古人云:兵馬未動,糧草先行。建設(shè)微服務(wù)是需要建立長遠(yuǎn)規(guī)劃,不是像寫 CMS 那樣建好數(shù)據(jù)庫表,然后就開始干活,這樣十有八九是會失敗的。

我們要進(jìn)行微服務(wù)改造前,架構(gòu)師要提前做好規(guī)劃,我們把這里分為三步,前期階段,設(shè)計階段,技術(shù)階段。

前期階段,大致要做好如下事情:

  • 和多方充分溝通,確保能符合客戶和組織的需求,并且得到認(rèn)同。
  • 和團(tuán)隊溝通,讓隊友(開發(fā)/測試/運維)理解,并且積極投入。
  • 和業(yè)務(wù)部門溝通,指定版本計劃和上線時間。

設(shè)計階段,參考 Sam Newman 的著作《微服務(wù)設(shè)計》,單微服務(wù)必須要滿足以下的條件,才符合微服務(wù)的基本要求:

  • 標(biāo)準(zhǔn)的 REST 風(fēng)格接口(基于 HTTP 和 JSON 格式)。
  • 獨立部署,避免共享數(shù)據(jù)庫(避免因為數(shù)據(jù)庫而影響整個分布式系統(tǒng))。
  • 業(yè)務(wù)上的高內(nèi)聚,減少依賴(從設(shè)計上要避免服務(wù)過大或者太小)。

龐大的分布式系統(tǒng),需要強(qiáng)大基礎(chǔ)設(shè)施來支撐,微服務(wù)涉及哪些基礎(chǔ)設(shè)施?

  • CI/CD 和自動化(分布式系統(tǒng)幾乎不可能通過人工手動發(fā)布。)
  • 虛擬化技術(shù)(要保證微服務(wù)運行環(huán)境隔離,目前行業(yè)主流的是使用 Docker 容器)。
  • 日志聚合,全鏈路監(jiān)控(高度可觀察和分析診斷問題)。

說了那么多,那什么樣的情況下,你的團(tuán)隊不適合建設(shè)微服務(wù)?(請勿對號入座)

  • 開發(fā)團(tuán)隊不具備自主性,所在組織對開發(fā)團(tuán)隊限制非常多(具體請參考 康威定律)。
  • 團(tuán)隊不熟悉業(yè)務(wù),無法識別出服務(wù)的邊界,進(jìn)行合理的拆分(請參考 DDD 領(lǐng)域驅(qū)動設(shè)計)。

微服務(wù)設(shè)計其實是很早就有的設(shè)計思想,因為隨著虛擬化技術(shù)的崛起,微服務(wù)可以低成本的實現(xiàn),所以也開始流行和興起。

微服務(wù)的內(nèi)涵很深,其中就包括,自動化,去中心化,獨立性等等,其中細(xì)節(jié)無法用一篇文章概述清楚,我們在做技術(shù)選型或者方案的時候,盡可能多去了解技術(shù)的本身和起源再結(jié)合我們業(yè)務(wù)的特點,進(jìn)行更好的選擇。

如何低成本的實現(xiàn)微服務(wù)?

Spring Cloud 為什么是國內(nèi)最流行的微服務(wù)框架,它提供哪些開箱即用的組件 ?

概覽如下:

  • Srping Boot 服務(wù)應(yīng)用
  • Spring Cloud Config 配置中心
  • Spring Cloud Eureka 服務(wù)發(fā)現(xiàn)
  • Spring Cloud Hystrix 熔斷保護(hù)
  • Spring Cloud Zuul 服務(wù)網(wǎng)關(guān)
  • Spring Cloud OAuth 2 服務(wù)保護(hù)
  • Spring Cloud Stream 消息驅(qū)動
  • 分布式全鏈路跟蹤
  • 部署微服務(wù)

①Spring Boot 微服務(wù)基石

 

Spring Boot 是構(gòu)建微服務(wù)的理想框架,主要得益于 Spring Boot 可以打包成為單個可執(zhí)行JAR文件交付服務(wù),Spring Actuator 公開服務(wù)健康信息都是微服務(wù)的基石,為什么這么說 ?

我們先看看構(gòu)建微服務(wù)的四個重要原則:

  • 服務(wù)應(yīng)該是獨立和可獨立部署的
  • 應(yīng)該從中央(配置中心)讀取配置
  • 對客戶端是透明的
  • 傳達(dá)健康信息

微服務(wù)有優(yōu)點和缺點,并非所有應(yīng)用都適合用微服務(wù)架構(gòu),架構(gòu)師需要能做到以下要求:

  • 分解業(yè)務(wù)問題:描述業(yè)務(wù)問題,注意動詞,尋找數(shù)據(jù)內(nèi)聚。
  • 建立服務(wù)粒度:講大服務(wù)重構(gòu)到更小的服務(wù),重點關(guān)注服務(wù)如何相互交互,服務(wù)職責(zé)隨時間改變。
  • 定義服務(wù)接口:擁抱 REST 的理念,使用 URI 來傳達(dá)意圖,使用 HTTP 狀態(tài)碼傳達(dá)結(jié)果。

糟糕的微服務(wù)有哪些特征?

  • 過于粗粒度:服務(wù)承擔(dān)過多的職責(zé),服務(wù)跨大量表來管理數(shù)據(jù),測試用例太多。
  • 過于細(xì)粒度:服務(wù)彼此依賴嚴(yán)重,服務(wù)內(nèi)部沒有邏輯。

何時不應(yīng)該使用微服務(wù) ?

  • 不愿投入(需要高度成熟的運維,伸縮,復(fù)雜性問題)。
  • 管理/監(jiān)控散亂的服務(wù)器也需要很高的成本。
  • 小型應(yīng)用不適合,太昂貴。
  • 數(shù)據(jù)事務(wù)(分布式系統(tǒng)處理事務(wù)非常困難)

②Spring Cloud Config 配置服務(wù)

 

Spring Config 是 Spring 提供的配置中心輕量級實現(xiàn),基于 Git 存儲,國內(nèi)用戶大多推薦使用 Alibaba 開源的 Nacos(集成配置中心和注冊中心)都是非常不錯的配置中心的實現(xiàn)。

微服務(wù)程序?qū)τ谂渲弥行牡膸c管理原則:

  • 應(yīng)用程序的配置和部署的實際代碼分離(配置中心和應(yīng)用程序分離)。
  • 集中(將配置中心集中在少量的存儲庫中)。
  • 穩(wěn)定(配置中心要保證高可用)。

Spring Config 這款配置中心提供的核心功能:

  • 配置服務(wù)器允許使用環(huán)境特定值。
  • 使用 Spring Profile 區(qū)分環(huán)境值。
  • 可以使用基于文件或基于 Git 存儲屬性。
  • 允許對稱加密和非對稱加密。

③Spring Cloud Eureka 服務(wù)發(fā)現(xiàn)

 

服務(wù)發(fā)現(xiàn)是微服務(wù)架構(gòu)中非常重要的概念,也稱注冊中心,類似我們生活中的房地產(chǎn)中介的角色,買房賣房都要通過它。

所以它是所有微服務(wù)上線/下線的必經(jīng)之路,也掌握微服務(wù)的生殺大權(quán),注冊中心會根據(jù) CAP 策略和對微服務(wù)的健康檢查,作出對具體服務(wù)剔除,下線,恢復(fù)上線等操作。

主要還有以下幾個核心功能:

  • 快速對環(huán)境中服務(wù)數(shù)量水平伸縮(功能和 K8s 有些重合,不過也可以設(shè)定具體服務(wù)的運行時數(shù)量)。
  • 抽象服務(wù)的物理位置(微服務(wù)通常運行在 Docker 容器內(nèi),沒有固定 IP,只能通過注冊中心才能找到它)。
  • 提高程序的彈性,自動伸縮。
  • 信息共享, 健康檢測。

微服務(wù)架構(gòu)里面要實現(xiàn)注冊中心,需要達(dá)到哪些基本要求?

  • 高可用,注冊信息共享(注冊中心集群部署),不可能因為注冊中心掛了,導(dǎo)致所有集群不可用。
  • 負(fù)載均衡(對服務(wù)間的動態(tài)請求負(fù)載均衡),合理在服務(wù)間分配流量。
  • 有彈性(客戶端緩存服務(wù)信息)。
  • 容錯,健康檢查(檢測壞掉的服務(wù)自動移除,無需人工干預(yù))。

 

Spring Eureka 提供的服務(wù)發(fā)現(xiàn)實現(xiàn),具備哪些特點 ?

  • 服務(wù)發(fā)現(xiàn)抽象服務(wù)的物理位置。
  • 無感知添加和移除服務(wù)。
  • 為服務(wù)間調(diào)用提供負(fù)載均衡。
  • 使用 3 種不同機(jī)制來調(diào)用服務(wù):DiscoveryClient,支持 Ribbon 的 RestTemplate,Netflix 的 FeignClient。

④Spring Cloud Hystrix 熔斷保護(hù)

 

為什么微服務(wù)進(jìn)行熔斷 ?當(dāng)一個服務(wù)出現(xiàn)問題:

  • 通常都是從小部分開始,到耗盡線程徹底崩潰。
  • 服務(wù)間調(diào)用會長時間阻塞。
  • 服務(wù)未關(guān)閉就會一直被調(diào)用,導(dǎo)致連鎖效應(yīng)。
  • 一個性能不佳的服務(wù)可以迅速拖垮整個應(yīng)用。

為什么熔斷很重要 ?

  • 每個節(jié)點(調(diào)用服務(wù)和數(shù)據(jù)庫)實現(xiàn)斷路器,可以避免服務(wù)崩潰的連鎖效應(yīng)。
  • 實現(xiàn)只有出問題的服務(wù)受影響,其余的服務(wù)功能都是完整的(影響范圍降到最小)。
  • 熔斷是服務(wù)器的靈活的基礎(chǔ)。

斷路器提供的關(guān)鍵能力:

  • 快速失敗。
  • 功能降級(替代方案)。
  • 無縫恢復(fù)(斷路器定期檢查,自動恢復(fù)服務(wù))。

 

Netflix 研發(fā)和出品的 Hystrix 實現(xiàn)是一款成熟穩(wěn)定的熔斷實現(xiàn),在 Netflix 在生產(chǎn)實踐和運行多年,非常可靠,后面加入 Spring Cloud 體系,成為 Spring Cloud 微服務(wù)生態(tài)鏈的一員,使用起來也非常的簡單和方便。

Hystrix 支持四種斷路模式:

  • 客戶端負(fù)載均衡模式(檢測服務(wù)出錯,移除服務(wù))。
  • 斷路器模式(出現(xiàn)超時拋出異常強(qiáng)行失敗,超過閾值強(qiáng)行失敗所有調(diào)用)。
  • 后備模式(不是拋出異常而是執(zhí)行替代方案,例如排隊,稍后再試等)。
  • 艙壁模式(把遠(yuǎn)程調(diào)用的資源分配到獨立的線程池中,調(diào)用出問題只是線程池飽和并停止請求)。

跳閘會導(dǎo)致的三種結(jié)果:

  • 服務(wù) B 立即知道服務(wù) C 有問題,不必等待,立即失敗。
  • 服務(wù) B 執(zhí)行服務(wù) C 的替代代碼來采取行動(后備模式)。
  • 服務(wù) C 可以在跳閘后,檢查問題,快速恢復(fù)。

 

熔斷的幾個處理原則:

  • 設(shè)計分布式應(yīng)用必須考慮彈性。
  • 服務(wù)的徹底故障是很容易檢測和處理,只是需要時間,斷路器給了這個時間窗口。
  • 一個服務(wù)性能不佳,可能導(dǎo)致集群崩潰,因為相互調(diào)用會阻塞線程,耗盡資源。
  • Hystrix 支持兩種隔離模型,即 THREAD 和 SEMAPHORE。

⑤Spring Cloud Zuul 網(wǎng)關(guān)

網(wǎng)關(guān)是整個微服務(wù)分布式集群的入口,對于用戶來說,用戶無需知道你每個服務(wù)的地址,只需要記住網(wǎng)關(guān)地址就可以了。

這樣理解可能比較抽象,舉一個生活的例子,微服務(wù)集群是一個大型公司,公司內(nèi)部有很多個不同的職能部門(對應(yīng)每個微服務(wù))。

但是你如果要訪問具體的職能部門,你必須先到前臺登記,再由前臺帶你到你想訪問的具體職能部門去辦理實際的業(yè)務(wù)(智能路由)。

微服務(wù)對于網(wǎng)關(guān)實現(xiàn)的規(guī)范:

  • 一個獨立負(fù)責(zé)所有服務(wù)調(diào)用過濾和路由的服務(wù)。
  • 服務(wù)和客戶端的中間人,簡化客戶端開發(fā)。

網(wǎng)關(guān)通常要做哪些事情:

  • 靜態(tài)路由,從注冊中心獲取每個微服務(wù)的具體位置。
  • 動態(tài)路由(根據(jù)參數(shù)特點,調(diào)用特定服務(wù),少量用戶體驗新功能,通常用于灰度發(fā)布)。
  • 驗證和授權(quán):驗證訪客的身份信息(統(tǒng)一驗證,服務(wù)只需要關(guān)注業(yè)務(wù)邏輯)。
  • 數(shù)據(jù)收集和日志(收集調(diào)用次數(shù)和響應(yīng)時間等)。

Zuul 網(wǎng)關(guān)的具體運行參考圖:

Spring Cloud Zuul 是初期版本的 API 網(wǎng)關(guān)實現(xiàn),提供以下功能:

 

  • 結(jié)合 Spring Cloud Eureka 將服務(wù)發(fā)現(xiàn)的注冊地址加入到 Zuul 路由。
  • Zuul 可以給所有服務(wù)輕松的添加/API 之類的前綴路由地址。
  • 在全局上定制 Zuul 的 Spring Cloud Hystrix 和 Spring Cloud Ribbon (調(diào)度策略)的超時。
  • 實現(xiàn)動態(tài)路由,不同版本進(jìn)行 A/B 測試。
  • 檢查參數(shù)合法性等,例如 JWT,時間戳等等。

⑥Spring Cloud OAuth 2 服務(wù)保護(hù)

Oauth 2 是用于保證請求的合法和正確性,為了讓微服務(wù)本身更加專注于業(yè)務(wù),所以 OAuth 2 類似配置中心被單獨抽離出來作為基礎(chǔ)組件的統(tǒng)一認(rèn)證中心來使用。

OAuth 2 的作用類似我們生活中的公安局的角色,當(dāng)我們需要去正規(guī)機(jī)構(gòu)辦理業(yè)務(wù)的時候,我們需要提供有效的身份證(合法的身份認(rèn)證標(biāo)示)。

如果沒有你就需要去公安局(OAuth)申請一張在有效期內(nèi)的身份證(Token),然后帶著這張身份證我們才能去購買機(jī)票,酒店等其他社會服務(wù)(微服務(wù))。

社會服務(wù)機(jī)構(gòu)在拿到你提供的身份證(Token)后,也會向公安局(OAuth)聯(lián)網(wǎng)發(fā)送信息,來驗證你的身份證的合法性(Token 合法性校驗),身份認(rèn)證不通過就會被拒絕服務(wù),合法的身份才能進(jìn)行業(yè)務(wù)的辦理。

關(guān)于 OAuth 的工作流程,可以結(jié)合下圖來理解:

 

微服務(wù)對于 OAuth2 規(guī)范的 4 種類型授權(quán):密碼/客戶端憑據(jù)/授權(quán)碼/隱式。

Spring Cloud OAuth 2 為我們提供哪些便利?

  • 安全框架,提供令牌生成,驗證等邏輯。
  • 開箱即用,和其他服務(wù)無縫集成。
  • 行業(yè)標(biāo)準(zhǔn),輕松與云服務(wù)商集成。

OAuth 2:/auth/oauth/token 的返回信息:

  • access_token(OAuth 2 令牌,每次調(diào)用出示)。
  • token_type(令牌類型,常用 bearer token)。
  • refresh_token(續(xù)約令牌)。
  • expires_in(過期描述,默認(rèn) 12H)。
  • scope(令牌有效作用域)。

OAuth 2 支持 JWT (JSON Web Token)的規(guī)范,關(guān)于 JWT 的原理就不特別解釋了。

簡單的 JWT 有以下幾個特點:

  • 小巧(Base64編碼)。
  • 密碼簽名(防篡改)。
  • 自包含(不需要調(diào)用驗證服務(wù)確認(rèn)內(nèi)容,通過相同的密鑰進(jìn)行對稱解密)。
  • 可擴(kuò)展(可在令牌內(nèi)包含額外的信息)。

OAuth 2 的簡單總結(jié):

  • OAuth 2 是一個令牌驗證框架。
  • 使用 OAuth 2 需要建立 OAuth 2 驗證服務(wù)。
  • 調(diào)用受保護(hù)的資源都要通過 OAuth 2 驗證。

⑦Spring Cloud Stream 消息驅(qū)動

我們和世界的互動不是同步的,很多時候是基于消息異步驅(qū)動模型,比如郵件,點餐,訂票等等,想要了解 Spring Cloud Stream,必須先要理解基于事件(MQ)編程的模型,基于消息驅(qū)動有利于開發(fā)構(gòu)建高度解耦的系統(tǒng)。

因為 Spring Cloud Stream 并不是自己實現(xiàn)了消息中間件,而是對于市場上主流(例如 RabbitMQ,KafKa)的 MQ 產(chǎn)品做了一層封裝和抽象。

Spring Cloud Stream 做的事情并不是什么新鮮的事情,非常類似 ORM 所做的事情,了解 ORM 框架的同學(xué)應(yīng)該都熟悉對于多種數(shù)據(jù)庫(MySQL,Oracle,SQL Server)產(chǎn)品的抽象是何等重要。

面向 ORM 進(jìn)行數(shù)據(jù)庫訪問,可以讓你脫離對于指定數(shù)據(jù)庫產(chǎn)品的深度依賴和綁定,而且可以不用特意去學(xué)習(xí)不同數(shù)據(jù)庫的本地化特性和方言,降低學(xué)習(xí)成本。

假如你想從 Oracle 遷移到 MySQL 上面,幾乎是不需要改動一行代碼,只需要改動 ORM 的配置就可以實現(xiàn)了。

參考下圖簡單了解一下 ORM:

 

Spring Cloud Stream 類似 ORM,你只需要基于 Spring Cloud Stream 提供的消息模型進(jìn)行編程。

至于底層的消息組件是用的 RabbitMQ 還是 Kafka 還是其他的消息中間件產(chǎn)品,都沒有關(guān)系,甚至更換底層消息組件也不會對你的應(yīng)用產(chǎn)生任何影響,這就是標(biāo)準(zhǔn)化所帶來的收益。

關(guān)于如何更好的理解 Spring Cloud Stream 工作模型可以簡單參考下圖:

微服務(wù)中使用的的兩種服務(wù)通信方式對比:

 

  • 同步:通過 REST 端點接口進(jìn)行請求:服務(wù)之間緊耦合(強(qiáng)依賴),服務(wù)之間的脆弱性(連鎖效應(yīng)),增加新的消費者不靈活。
  • 異步:基于消息中間件通信:松耦合(無接口直接調(diào)用的依賴),耐久性(服務(wù)重啟后可以消費歷史消息),可伸縮性(消息過多可啟動多服務(wù)來處理消息),靈活性(輕松添加新的消費者)。

消息傳遞架構(gòu)的缺點:

  • 消息處理語義:消息順序處理,消息異常處理。
  • 消息可見性:消息不會立刻被處理,事務(wù)關(guān)聯(lián) ID 在消息中的傳遞。

消息中放置什么數(shù)據(jù) ?

  • 消息體要盡可能的小,減少傳輸成本:通常只返回 action 類型和 id,然后用id獲取最新數(shù)據(jù)。
  • 只使用消息傳遞狀態(tài):在消息中包含版本號和時間戳,處理數(shù)據(jù)服務(wù)可以檢查數(shù)據(jù)的版本號。

Spring Cloud Stream 的消息模型和概念:

  • 發(fā)射器(Source):接收對象(對象表示要發(fā)布的消息),序列化對象,將消息發(fā)布到通道。
  • 通道(Channel):隊列的抽象,通道寫在配置文件,更改配置切換通道(讀取和寫入隊列)。
  • 綁定器(Binder):與消息平臺對話的 Spring 代碼,不必依賴特定的 API 來發(fā)布和消費消息。
  • 接收器(Sink):從隊列接收消息,將消息反序列化為 POJO。

Spring Cloud Stream 的簡單總結(jié):

  • 使用消息傳遞的異步通信是微服務(wù)架構(gòu)的關(guān)鍵部分。
  • 使用消息傳遞可以使服務(wù)能夠伸縮并且更具有容錯性。
  • Spring Cloud Stream 通過簡單的注解抽象底層的消息平臺細(xì)節(jié)。

⑧Sleuth 和 Zipkin 分布式跟蹤

微服務(wù)分布式架構(gòu)帶來了復(fù)雜度,成本最高的就是跟蹤檢查和運維,分布式意味要在多個服務(wù),機(jī)器跟蹤一個事務(wù),Sleuth 和 Zipkin 都是用于 Spring Cloud 服務(wù)體系的分布式跟蹤技術(shù),先直接看下最終效果。

下圖一個簡單的可視化鏈路跟蹤調(diào)用,ZipKin 可以清晰的看到一個客戶端請求在每個服務(wù)上面處理所消耗的事情,點擊進(jìn)去可以看到具體的事務(wù)執(zhí)行內(nèi)容,方便排查錯誤。

 

 


 

 

Spring Cloud Sleuth 的工作流程:

  • 透明地創(chuàng)建并注入一個關(guān)聯(lián) ID 到服務(wù)調(diào)用中。
  • 管理關(guān)聯(lián) ID 到出站服務(wù)調(diào)用的傳播。
  • 將關(guān)聯(lián)信息添加到 Spring 的 MDC 日志記錄(應(yīng)用/跟蹤 ID/跨度 ID/數(shù)據(jù)發(fā)送)。
  • 將服務(wù)調(diào)用中的跟蹤信息發(fā)布到 Zipkin 跟蹤平臺。

Open Zipkin 的簡單概述:

  • 調(diào)用鏈?zhǔn)褂靡粡埜蓛艉啙嵉膱D片,比一百萬條日志要好看的多。
  • 分布式跟蹤平臺,用于跟蹤多個服務(wù)調(diào)用的事務(wù)。
  • 圖形的方式查看事務(wù)占用的時間量,分解每個服務(wù)所用的時間。
  • 4 種不同的數(shù)據(jù)存儲:內(nèi)存數(shù)據(jù)/MySQL/Cassandra/Elasticsearch。

關(guān)于微服務(wù)全鏈路跟蹤的總結(jié):

  • Spring Cloud Sleuth 可以無縫將關(guān)聯(lián) ID 添加到微服務(wù)中。
  • 可以使用關(guān)聯(lián) ID 查看事務(wù)涉及的所有服務(wù)行為。
  • 關(guān)聯(lián) ID 需要與日志聚合結(jié)合使用。
  • 日志平臺很重要,但是可視化跟蹤事務(wù)也是有價值的工具。

⑨部署微服務(wù)

構(gòu)建和部署管道是微服務(wù)架構(gòu)最重要的部分,微服務(wù)的主要特點是快速構(gòu)建,修改,發(fā)布。

符合微服務(wù)特征的部署要達(dá)到以下幾個要求:

  • 自動的(自動構(gòu)建和部署代碼。
  • 完整的(軟件成品是鏡像),不可變(發(fā)布過程不可人為干預(yù))。
  • 良好的微服務(wù)部署管道應(yīng)該允許在幾分鐘部署新功能和修復(fù) Bug。

Spring Cloud 大型項目的架構(gòu)方案

這是一個真實用于國內(nèi)某大型企業(yè)的微服務(wù)架構(gòu)體系,支撐日均百萬訂單的項目,因為已經(jīng)過了 2 年的保密期,所以可以拿出來分享。

剛好可以結(jié)合前面凌亂的知識點,看看 Spring Cloud 這套組件是如何搭建起來的。

整套微服務(wù)就是下面這張架構(gòu)圖:

 

具體每個組件的作用就不在這里詳細(xì)說明了,在這套架構(gòu)方案里面,我們沒有完全照搬 Spring Cloud 全家桶的組建,還是根據(jù)自己的需求對其中組件進(jìn)行的更換。

例如:

  • 配置中心從 Spring Cloud Config 更換為 Apollo ,除了有更好的性能,還有更加簡化的操作頁面,修改配置文件毫秒級響應(yīng)。
  • 服務(wù)發(fā)現(xiàn) Eureka 官網(wǎng)已經(jīng)停止維護(hù),我們后面更換為 Alibaba Nacos,服務(wù)注冊和心跳檢測都提升到毫秒級,Eureka 是 90 秒輪詢。
  • 分布式任務(wù)調(diào)度引入了 XXL-JOB,這是國內(nèi)主流的分布式任務(wù)調(diào)度平臺,沒有特別需要說明的地方。
  • 日志聚合也是用了主流的 ELK 技術(shù)方案,用于收集和檢索日志。

PS:另外在值得補(bǔ)充的是,在寫這篇文章的時候 Spring Cloud Zuul 已經(jīng)不被官方推薦使用了,替代品是性能更好的 Spring Cloud Gateway ,大家可以在了解的時候需要注意一下。

總結(jié)

微服務(wù)是未來大型企業(yè)的必經(jīng)之路,雖然成本很高,但是可以提升 IT 系統(tǒng)的健壯性和提升技術(shù)人員的廣度和深度都還是很有幫助的。

作者:肖斌

編輯:陶家龍

出處:轉(zhuǎn)載自公眾號小二十七(ID:drak-phoenix)

責(zé)任編輯:武曉燕 來源: 小二十七
相關(guān)推薦

2025-11-14 00:25:00

微服務(wù)架構(gòu)并發(fā)

2020-08-05 08:23:19

架構(gòu)Java微服務(wù)

2024-04-03 12:14:15

微服務(wù)架構(gòu)監(jiān)控

2022-09-27 15:06:07

微服務(wù)架構(gòu)開發(fā)

2024-06-18 08:07:50

存儲架構(gòu)設(shè)計

2019-02-27 09:46:05

數(shù)據(jù)庫架構(gòu)并發(fā)

2022-08-19 06:42:11

數(shù)據(jù)庫高并系統(tǒng)

2023-10-26 01:30:00

系統(tǒng)架構(gòu)成本較高

2017-11-20 18:10:37

普元

2025-02-10 08:20:09

2019-01-17 09:50:55

京東ES架構(gòu)

2018-05-04 10:04:47

Docker微服務(wù)架構(gòu)

2023-07-28 09:23:24

微服務(wù)架構(gòu)

2019-01-21 10:50:07

微服務(wù)架構(gòu)開發(fā)

2017-10-28 23:13:43

微服務(wù)架構(gòu)開發(fā)單體應(yīng)用

2022-04-20 07:48:09

微服務(wù)鏈路服務(wù)器

2023-07-27 14:03:51

微服務(wù)

2019-10-16 08:41:46

微服務(wù)架構(gòu)Nginx

2023-08-31 17:13:01

架構(gòu)軟件開發(fā)

2022-06-12 23:36:26

微服務(wù)架構(gòu)單體應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號

欧美视频在线看| 国产精品一区二区男女羞羞无遮挡| 精品福利一区二区三区免费视频| 男女激情免费视频| 国产综合在线播放| 国产欧美短视频| 中文字幕日韩欧美在线| 久久精品久久99| 51av在线| 国产精品入口麻豆九色| 91久久爱成人| www.中文字幕在线观看| 久久在线免费| 欧美成人a∨高清免费观看| 内射国产内射夫妻免费频道| 欧美三级理伦电影| 丁香激情综合国产| 国产精品一香蕉国产线看观看| 青娱乐在线视频免费观看| 九一成人免费视频| 精品国产乱码久久久久久闺蜜| 午夜精品久久久内射近拍高清 | 99在线视频影院| 日本一区二区三区dvd视频在线| 97中文在线| 中文字幕一区二区三区四区欧美| 欧美激情无毛| 神马久久久久久| 国产亚洲无码精品| 免费一区二区三区在线视频| 一本色道久久综合亚洲aⅴ蜜桃 | 成人资源av| 这里只有精品国产| 亚洲一区欧美二区| 欧美大奶子在线| 国产又粗又长又硬| 精品大片一区二区| 日韩av影院在线观看| 古装做爰无遮挡三级聊斋艳谭| 91精品韩国| 欧美日韩中文字幕在线| 成年女人18级毛片毛片免费 | 97碰碰碰免费色视频| 成年人一级黄色片| 久久久影院免费| 在线不卡国产精品| 国产三级av在线播放| 色婷婷av一区二区三区丝袜美腿| 精品国精品国产| 一级黄色大片免费看| 国产精品伊人| 欧美色精品天天在线观看视频| 日本精品一区在线观看| 99re6在线精品视频免费播放| 亚洲欧洲综合另类| 免费观看黄色大片| 欧美成人hd| 亚洲欧美综合色| 欧美亚洲视频一区| 欧美激情黑人| 亚洲精品成人在线| 日韩视频在线免费播放| 麻豆最新免费在线视频| 成人欧美一区二区三区视频网页| 亚洲图片小说在线| 免费网站成人| 亚洲免费观看高清完整版在线观看熊| 在线亚洲美日韩| 超碰在线免费播放| 亚洲综合精品自拍| 欧美精品自拍视频| 国产美女高潮在线观看| 丰满岳妇乱一区二区三区| 男人日女人bb视频| 免费亚洲电影| 欧美日韩五月天| 亚洲在线观看网站| 午夜电影一区| 亚洲国产日韩精品在线| 精品人伦一区二区三电影| 国产欧美日韩在线一区二区| 色哟哟亚洲精品一区二区| 免费精品在线视频| 午夜视频精品| 668精品在线视频| 国产美女www| 激情亚洲综合在线| 国产传媒一区二区| 可以在线观看的黄色| 国产精品国产成人国产三级| 老司机激情视频| 亚洲国产欧美日本视频| 欧美日韩国产另类一区| 男男受被啪到高潮自述| 日韩最新在线| 菠萝蜜影院一区二区免费| 久久国产在线观看| 久久精品中文| 91手机在线观看| 久久手机免费观看| 亚洲美腿欧美偷拍| av免费中文字幕| 久久综合给合| 亚洲色图校园春色| 久久国产精品波多野结衣| 久久在线精品| 国产精品99久久久久久久| 亚洲狼人综合网| 国产精品欧美经典| 老太脱裤子让老头玩xxxxx| 色综合天天色| 日韩高清免费在线| 国产精品三区在线观看| 久久蜜桃资源一区二区老牛| 18成人在线| 国产高清视频在线| 亚洲不卡av一区二区三区| 老司机午夜av| 国产精品天天看天天狠| 少妇精69xxtheporn| 日韩三级视频在线| 国产高清精品久久久久| 图片区小说区区亚洲五月| av电影院在线看| 欧美一二三区在线观看| 神马久久久久久久久久久| 亚洲激情国产| 亚洲在线第一页| 最新电影电视剧在线观看免费观看| 亚州成人在线电影| 爱情岛论坛亚洲自拍| 99视频精品全部免费在线视频| 91精品国产91久久久久久最新| 99er热精品视频| 国产精品区一区二区三| 日av中文字幕| 欧美日韩导航| 国内精品久久久久| www.日韩高清| 一区二区三区在线观看国产 | 亚洲第一会所| 日韩麻豆第一页| 国产一级淫片a| 国产电影一区二区三区| 手机成人av在线| 99视频这里有精品| 日日噜噜噜夜夜爽亚洲精品| 中文字幕资源网| 中文字幕欧美区| 亚洲欧美在线精品| 欧洲乱码伦视频免费| 国产精品九九九| 国产乱子伦三级在线播放| 色婷婷综合中文久久一本| 亚洲精品视频大全| 午夜亚洲激情| 欧美日韩免费观看一区| 电影网一区二区| 亚洲一级黄色av| 中文字幕永久在线视频| 国产精品人人做人人爽人人添| 一区二区成人网| 希岛爱理av一区二区三区| 成人在线激情视频| fc2ppv国产精品久久| 日韩无一区二区| 激情综合网五月婷婷| 91影院在线免费观看| 免费成人在线视频网站| 亚洲素人在线| 国产精品久久久久91| 午夜免费播放观看在线视频| 5858s免费视频成人| 久久久久成人片免费观看蜜芽| 粉嫩av亚洲一区二区图片| 成人网站免费观看入口| 尤物tv在线精品| 国产女人18毛片水18精品| 国产精品剧情一区二区在线观看 | 日韩**中文字幕毛片| 川上优的av在线一区二区| 欧美日韩综合色| 欧美精品乱码视频一二专区| av电影一区二区| 国产精品乱码久久久久| 天天影视欧美综合在线观看| 不卡一卡2卡3卡4卡精品在| 在线天堂新版最新版在线8| 在线成人激情黄色| 亚洲春色一区二区三区| 欧美视频一区二区三区…| 91久久久久久久久久久久久久| 国产成人精品免费| 美女福利视频在线| 99精品综合| 久久av一区二区| 人人精品久久| 欧美中文字幕在线| 久久亚洲天堂| 亚洲精品动漫久久久久| 一级黄色片视频| 亚洲va欧美va天堂v国产综合| 人妻aⅴ无码一区二区三区| 七七婷婷婷婷精品国产| 国产96在线 | 亚洲| 欧美aaaa视频| 免费影院在线观看一区| 国产视频一区二区在线播放| 欧美有码在线观看视频| 老司机午夜在线| 亚洲欧洲在线看| 成人久久精品人妻一区二区三区| 欧洲精品中文字幕| 日韩精品国产一区二区| 中文字幕亚洲在| av黄色免费网站| 粉嫩久久99精品久久久久久夜| 黄大色黄女片18第一次| 国产美女一区| 国产精品69久久久| 91国语精品自产拍| 日韩资源av在线| 欧洲精品一区| 高清国产在线一区| 伊人久久大香| 国产精品视频xxxx| 刘亦菲一区二区三区免费看| 久久免费精品视频| 在线观看h网| www.久久久久久.com| 国产福利小视频在线| 日韩精品极品毛片系列视频| 午夜精品小视频| 91精品国产91久久久久久一区二区| 在线免费一区二区| 欧美日韩在线一区| 国产毛片aaa| 黑人巨大精品欧美一区二区一视频| 国内偷拍精品视频| 亚洲天堂网中文字| 成人黄色短视频| 国产精品久久午夜| 88久久精品无码一区二区毛片| 99精品偷自拍| 久久精品女同亚洲女同13| 国产jizzjizz一区二区| 91网址在线观看精品| 精品亚洲porn| 一起操在线视频| 另类专区欧美蜜桃臀第一页| wwww.国产| 免费成人美女在线观看.| 无码人妻精品一区二区三区66| 一区二区三区国产盗摄| 久久综合色视频| 国产精品入口| 国产裸体舞一区二区三区| 久久高清一区| 国产成人综合一区| 免费人成黄页网站在线一区二区| 福利在线一区二区三区| 免费av成人在线| 最新av免费在线观看| 韩国精品一区二区| 精品人妻二区中文字幕| 波多野结衣中文一区| 一区二区不卡免费视频| 国产日韩欧美一区二区三区乱码| 国产成人一区二区在线观看| 亚洲国产岛国毛片在线| 四虎永久免费地址| 亚洲精品国产一区二区三区四区在线 | www.夜夜爱| 亚洲三级网站| 久久久久久香蕉| 精品一区免费av| 精品人妻在线视频| 久久蜜桃香蕉精品一区二区三区| 亚洲精品午夜视频| 亚洲女同ⅹxx女同tv| 国产精品第九页| 日本高清成人免费播放| 国产伦精品一区二区三区免.费| 日韩欧美123| 视频在线不卡| 日韩综合视频在线观看| 伊人春色在线观看| 日本不卡视频在线播放| 国产95亚洲| 蜜桃传媒视频第一区入口在线看| 久久高清免费| 国产免费黄色小视频| 免费在线观看精品| 日本人妻一区二区三区| 国产日韩亚洲欧美综合| 蜜臀av午夜精品久久| 亚洲v精品v日韩v欧美v专区 | 日本亚洲视频在线| 亚洲综合中文网| 国产清纯白嫩初高生在线观看91 | 精品国产乱码久久久久久虫虫漫画 | 欧美午夜精品一区二区| 久久久不卡网国产精品一区| 中文字幕在线有码| 91久久精品一区二区二区| 99产精品成人啪免费网站| 日韩大陆欧美高清视频区| 777电影在线观看| 97精品一区二区三区| 亚洲青青久久| 青青草原亚洲| 亚洲人成高清| 午夜免费福利网站| 中文字幕精品综合| wwwwww国产| 精品国产不卡一区二区三区| jyzzz在线观看视频| 91精品国产91久久| 日本一区二区三区电影免费观看| 日韩av电影免费在线观看| 亚洲午夜一区| 中文字幕人妻无码系列第三区| 亚洲国产成人私人影院tom| 日韩精品视频免费播放| 日韩免费观看高清完整版| 在线免费观看黄色av| 国产精品成熟老女人| 日韩精品丝袜美腿| 国产一级爱c视频| 国产成人av福利| 精品一区在线观看视频| 精品视频免费看| 福利小视频在线观看| 日本成熟性欧美| 丝袜久久网站| 国产极品尤物在线| 成人h动漫精品| 国产亚洲精品久久777777| 日韩一区二区在线看片| 成人福利网站| 亚洲永久在线观看| 午夜亚洲福利| 亚洲国产综合av| 亚洲精品自拍动漫在线| 国产精品热久久| 久久精品视频在线| 欧美视频免费看| 中文字幕一区二区三区四区五区六区| 青青草一区二区三区| 99精品全国免费观看| 欧美手机在线视频| av在线日韩国产精品| 国产精品视频在线播放| av在线不卡顿| 中文字幕亚洲影院| 亚洲色图清纯唯美| 亚洲精品久久久久久动漫器材一区| 美女视频黄免费的亚洲男人天堂| 欧洲一区在线| 日韩成人手机在线| av电影在线观看一区| 五月婷婷色丁香| 尤物99国产成人精品视频| 精品福利在线| 艳母动漫在线观看| 东方欧美亚洲色图在线| 亚洲免费激情视频| 亚洲欧洲美洲在线综合| 黄色成人在线观看网站| 亚洲国产精品女人| 成人黄色a**站在线观看| 日本一区二区三区四区五区| 日韩第一页在线| 久久国内精品| 男人天堂新网址| aaa欧美日韩| 国产成人av免费| 欧美精品在线免费| 欧美亚洲tv| 久热在线视频观看| 亚洲制服丝袜av| 六十路在线观看| 亚洲a成v人在线观看| 国产日韩欧美高清免费| 夫妇露脸对白88av| 日韩欧美三级在线| 欧美黄色网页| 992tv快乐视频| 26uuu国产一区二区三区| 中文字幕在线日亚洲9| 欧美激情亚洲一区| 亚洲人成精品久久久 | 在线观看18视频网站| av一本久道久久综合久久鬼色| 黄色污污视频软件| 欧美福利在线观看| 精品国产一区二区三区久久久樱花| 丰满少妇中文字幕| 在线观看三级视频欧美| 日韩另类在线|