分佈式或者說 SOA 分佈式重要的就是面向服務,說簡單的分佈式就是咱們把整個系統拆分紅不一樣的服務而後將這些服務放在不一樣的服務器上減輕單體服務的壓力提升併發量和性能。好比電商系統能夠簡單地拆分紅訂單系統、商品系統、登陸系統等等。算法
咱們可使用 Dubbo做爲分佈式系統的橋樑,那麼什麼是 Dubbo 呢?服務器
Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、輕量級的開源Java RPC 框架,它提供了三大核心能力:面向接口的遠程方法調用,智能容錯和負載均衡,以及服務自動註冊和發現。簡單來講 Dubbo 是一個分佈式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。網絡
下面咱們簡單地來看一下 Dubbo 的架構,加深對 Dubbo 的理解。架構
下面咱們再來看看 Dubbo 的架構,咱們後面會使用 zookeeper 做爲註冊中心,這也是 Dubbo 官方推薦的一種方式。併發
上述節點簡單說明:負載均衡
Provider 暴露服務的服務提供方框架
Consumer 調用遠程服務的服務消費方分佈式
Registry 服務註冊與發現的註冊中心ide
Monitor 統計服務的調用次數和調用時間的監控中心高併發
Container 服務運行容器
調用關係說明:
服務容器負責啓動,加載,運行服務提供者。
服務提供者在啓動時,向註冊中心註冊本身提供的服務。
服務消費者在啓動時,向註冊中心訂閱本身所需的服務。
註冊中心返回服務提供者地址列表給消費者,若是有變動,註冊中心將基於長鏈接推送變動數據給消費者。
服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,若是調用失敗,再選另外一臺調用。
服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。
咱們在講 Dubbo 的時候提到了 Dubbo 其實是一款 RPC 框架,那麼RPC 到底是什麼呢?相信看了下面我對 RPC 的介紹你就明白了!
RPC(Remote Procedure Call)—遠程過程調用,它是一種經過網絡從遠程計算機程序上請求服務,而不須要了解底層網絡技術的協議。好比兩個不一樣的服務A,B部署在兩臺不一樣的機器上,那麼服務 A 若是想要調用服務 B 中的某個方法該怎麼辦呢?使用 HTTP請求 固然能夠,可是可能會比較慢並且一些優化作的並很差。 RPC 的出現就是爲了解決這個問題。
若是你要開發分佈式程序,你也能夠直接基於 HTTP 接口進行通訊,可是爲何要用 Dubbo呢?
我以爲主要能夠從 Dubbo 提供的下面四點特性來講爲何要用 Dubbo:
負載均衡——同一個服務部署在不一樣的機器時該調用那一臺機器上的服務
服務調用鏈路生成——服務之間互相是如何調用的
服務訪問壓力以及時長統計——當前系統的壓力主要在哪裏,如何來擴容和優化
服務降級——某個服務掛掉以後調用備用服務