(一)dubbo學習,dubbo是什麼
dubbo是一個適用於分散式的RPC(遠端過程呼叫)框架。
什麼是分散式系統
隨著網際網路的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分散式服務架構以及流動計算架構勢在必行,需要一個治理系統確保架構有條不紊的演進。
“分散式系統是若干獨立計算機的集合,這些計算機對於使用者來說就像單個相關係統”。
我們拿電商系統來舉例
一個小型的資料量不是很大的電商系統架構,不需要做特殊的架構就可以支撐的住,就是開一個web工程,把使用者模組、訂單模組、商品模組等所有的模組都放到一個專案當中,由於所有模組都在同一個系統中,它們之間的呼叫也不需要特殊處理,直接呼叫即可,只需要一臺伺服器,對外提供服務的也就是這一個系統。
將所有功能都部署在一起,減少部署節點和成本。
當系統資料量達到一定量(千萬)、實時處理資料要求很高時,單獨的一個垂直架構的系統不足以支撐,就需要採用分散式架構,使用者模組單獨一個系統,訂單中心單獨一個系統,每個大模組變成一個單獨的系統,單獨部署伺服器,這樣處理資料的能力大幅度提升,系統也更加穩定。
當應用的模組越來越多,獨立的服務也會變的越來越多,各個伺服器之間也存在很多的相互呼叫,其關係會隨著服務的增多邊的越來越複雜。
如果新增一箇中心,類似於排程中心,作用是維護所有服務之間的關係和處理外部進來的web請求,將會變得清晰,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提高業務複用及整合的分散式服務框架(RPC)是關鍵。
流動計算架構:當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個排程中心基於訪問壓力實時管理叢集容量,提高叢集利用率。此時,用於提高機器利用率的資源排程和治理中心(SOA)[ Service Oriented Architecture]是關鍵。
RPC:RPC【Remote Procedure Call】是指遠端過程呼叫,是一種程序間通訊方式,他是一種技術的思想,而不是規範。它允許程式呼叫另一個地址空間(通常是共享網路的另一臺機器上)的過程或函式,而不用程式設計師顯式編碼這個遠端呼叫的細節。即程式設計師無論是呼叫本地的還是遠端的函式,本質上編寫的呼叫程式碼基本相同。
認識dubbo
Apache Dubbo是一款高效能、輕量級的開源Java RPC框架。
通俗的講,dubbo是解決兩個不同伺服器上的應用之間的相互呼叫:
dubbo能做什麼?它提供了三大核心能力:
- 面向介面的遠端方法呼叫
- 智慧容錯和負載均衡
- 以及服務自動註冊和發現
dubbo的流程架構圖:
各個流程節點說明:
- container: 服務執行容器,服務容器負責啟動,載入
- provider: 暴露服務的服務提供方,在啟動時,向註冊中心註冊自己提供的服務
- registry: 服務註冊與發現的註冊中心,
- consumer: 呼叫遠端服務的服務消費方,在啟動時,向註冊中心訂閱自己所需的服務
- monitor: 統計服務的呼叫次調和呼叫時間的監控中心
執行流程:
- 服務容器啟動,載入,執行服務提供者
- 服務提供者在啟動時,向註冊中心註冊自己提供的服
- 服務消費者在啟動時,向註冊中心訂閱自己所需的服務
- 註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連線推送變更資料給消費者
- 服務消費者,從提供者地址列表中,基於軟負載均衡演算法,選一臺提供者進行呼叫,如果呼叫失敗,再選另一臺呼叫
- 服務消費者和提供者,在記憶體中累計呼叫次數和呼叫時間,定時每分鐘傳送一次統計資料到監控中心
從dubbo官網中可以看到dubbo有以下的特性:
dubbo的註冊中心registry
dubbo支援多種註冊中心,包括Multicast 註冊中心、zookeeper 註冊中心、Redis 註冊中心、Simple 註冊中心,dubbo官方推薦使用 Zookeeper 註冊中心。