Java Web架構篇之分佈式框架(微服務&SpringCloud&Dubbo)簡介

SOA與微服務架構

 SOA與微服務架構區別

參考:
SOA架構和微服務架構的區別
微服務架構 vs. SOA架構
SOA 服務架構之簡介及理解


領域驅動架構

微服務系統的設計自然離不開DDD(Domain-Driven Design,領域驅動設計),它由Eric Evans提出,是一種全新的系統設計和建模方法。DDD事實上是針對面向對象分析和設計的一個擴展和延伸,對技術架構進行了分層規劃,同時對每個類進行了策略和類型的劃分。領域模型是領域驅動的核心。領域模型通過聚合(Aggregate)組織在一起,聚合間有明顯的業務邊界,這些邊界將領域劃分爲一個個限界上下文(Bounded Context)。採用DDD的設計思想,業務邏輯不再集中在幾個大型的類上,而是由大量相對小的領域對象(類)組成,這些類具備自己的狀態和行爲,每個類是相對完整的獨立體,並與現實領域的業務對象映射。領域模型就是由許多這樣的細粒度的類組成的。基於領域驅動的設計,保證了系統的可維護性、可擴展性和可複用性,在處理複雜業務邏輯方面有着先天的優勢。

更多:
領域驅動模型&CQRS學習


SpringBoot

SpringBoot簡介

spring boot 它的設計目的就是爲例簡化開發,開啓了各種自動裝配,你不想寫各種配置文件,引入相關的依賴就能迅速搭建起一個web工程。它採用的是建立生產就緒的應用程序觀點,優先於配置的慣例。

SpringBoot設計思想

  • 約定優於配置
  • 開箱即用

SpringBoot模塊設計

  • 支持開箱即用
  • 支持覆寫模塊內的部分組件
  • 支持模塊全部推翻重寫

如何自定義一個spring-starter模塊

  • 項目添加spring-boot-autoconfigure依賴
  • 配置映射參數實體
  • 編寫自定義業務
  • 實現自動化配置
  • 自定義spring.factories,META-INF中spring.factories添加自定義的starter

參考:
SpringBoot非官方教程 | 終章:文章彙總
SpringBoot常用註解及應用啓動流程
springboot自定義Starter
Spring Boot入門教程(三十一): 自定義Starter
Spring boot題目整理
吐血整理 20 道 Spring Boot題目
Spring 技術系列乾貨 SpringBoot & SpringCloud


SpringCloud

SpringCloud概述

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的開發便利性巧妙地簡化了分佈式系統基礎設施的開發,如服務發現註冊、配置中心、消息總線、負載均衡、斷路器、數據監控等,都可以用Spring Boot的開發風格做到一鍵啓動和部署。Spring並沒有重複製造輪子,它只是將目前各家公司開發的比較成熟、經得起實際考驗的服務框架組合起來,通過Spring Boot風格進行再封裝屏蔽掉了複雜的配置和實現原理,最終給開發者留出了一套簡單易懂、易部署和易維護的分佈式系統開發工具包

以下爲Spring Cloud的核心功能:

  • 分佈式/版本化配置
  • 服務註冊和發現
  • 路由
  • 服務和服務之間的調用
  • 負載均衡
  • 斷路器
  • 分佈式消息傳遞

SpringCloud組件


通過這張圖,我們來了解一下各組件配置使用運行流程:

  • 1、請求統一通過API網關(Zuul)來訪問內部服務.
  • 2、網關接收到請求後,從註冊中心(Eureka)獲取可用服務
  • 3、由Ribbon進行均衡負載後,分發到後端具體實例
  • 4、微服務之間通過Feign進行通信處理業務
  • 5、Hystrix負責處理服務超時熔斷
  • 6、Turbine監控服務間的調用和熔斷相關指標

更多:
拜託!面試請不要再問我Spring Cloud底層原理

參考:
史上最簡單的 SpringCloud 教程 | 終章
Spring cloud框架介紹


Dubbo

概述

Dubbo是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分佈式的需求,其實是不需要用的,只有在分佈式的時候,纔有dubbo這樣的分佈式服務框架的需求,並且本質上是個服務調用的東東,說白了就是個遠程服務調用的分佈式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上註冊)

其核心部分包含:

  1. 遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
  2. 集羣容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及軟負載均衡,失敗容錯,地址路由,動態配置等集羣支持。
  3. 自動發現: 基於註冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。

Dubbo能做什麼

  • 1、透明化的遠程方法調用,就像調用本地方法一樣調用遠程方法,只需簡單配置,沒有任何API侵入。
  • 2、軟負載均衡及容錯機制,可在內網替代F5等硬件負載均衡器,降低成本,減少單點。
  • 3、服務自動註冊與發現,不再需要寫死服務提供方地址,註冊中心基於接口名查詢服務提供者的IP地址,並且能夠平滑添加或刪除服務提供者。

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置即可,Dubbo基於Spring的Schema擴展進行加載。

Dubbo的架構

架構圖如下:

節點角色說明:

  • Provider: 暴露服務的服務提供方。
  • Consumer: 調用遠程服務的服務消費方。
  • Registry: 服務註冊與發現的註冊中心。
  • Monitor: 統計服務的調用次調和調用時間的監控中心。
  • Container: 服務運行容器。

參考:
Dubbo是什麼
Dubbo詳細介紹與安裝使用過程
Dubbo與zookeeper的關係
Dubbo官方文檔


Dubbo 與Spring Cloud

  • dubbo由於是二進制的傳輸,佔用帶寬會更少
  • springCloud是http協議傳輸,帶寬會比較多,同時使用http協議一般會使用JSON報文,消耗會更大
  • dubbo的開發難度較大,原因是dubbo的jar包依賴問題很多大型工程無法解決
  • springcloud的接口協議約定比較自由且鬆散,需要有強有力的行政措施來限制接口無序升級
  • dubbo的註冊中心可以選擇zk,redis等多種,springcloud的註冊中心只能用eureka或者自研

參考:
比較spring cloud和dubbo,各自的優缺點是什麼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章