目錄
為什么要用dubbo?
隨着互聯網的發展,網站的應用規模不斷擴大,常規的垂直架構已經無法應,分布式服務架構勢在必行,亟需一個治理系統架構的方案。
1)單一架構,當網站流量很小,我們將所有的功能都部署到一起,減少部署節點和成本。此時,用於簡化增刪改工作量,ORM是關鍵
2)垂直架構,當訪問逐漸增大,單一機器的速度顯然不理想,將應用拆成幾個不相干的應用,以便提升效率。此時,用於加速前端訪問,MVC是關鍵。
3)分布式服務架構,當垂直應用越來越多,應用之間的交互不可避免。將核心的業務抽取出來,作為獨立的服務,使前端應用可以快速響應多變的市場需求。此時,提高業務的復用整合的RPC框架是關鍵。
4)當我們服務越來越多,容量評估以及小服務資源浪費的問題逐漸展現出來。此時就需要一個調度中心基於訪問壓力實時的去管理集群容量,提高集群利用率。此時用於提高集群利用率和資源問題soa是關鍵。
dubbo是什么?
Dubbo是 阿里巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和Spring框架無縫集成。
Dubbo是一個分布式服務框架,致力於提供高性能和透明化的RPC遠程服務調用方案,以及SOA服務治理方案。簡單的說,dubbo就是個服務框架,如果沒有分布式的需求,其實是不需要用的,只有在分布式的時候,才有dubbo這樣的分布式服務框架的需求。其本質上是個遠程服務調用的分布式框架(告別Web Service模式中的WSdl,以服務者與消費者的方式在dubbo上注冊)
其核心部分包含:
Remoting: 網絡通信框架,實現了 sync-over-async 和 request-response 消息機制
RPC: 一個遠程過程調用的抽象,支持負載均衡、容災和集群功能
Registry: 服務目錄框架用於服務的注冊和服務事件發布和訂閱
遠程通訊: 提供對多種基於長連接的NIO框架抽象封裝,包括多種線程模型,序列化,以及“請求-響應”模式的信息交換方式。
集群容錯: 提供基於接口方法的透明遠程過程調用,包括多協議支持,以及負載均衡、失敗容錯、地址路由、動態配置等集群支持。
自動發現: 基於注冊中心目錄服務,使服務消費方能動態的查找服務提供方,使地址透明,使服務提供方可以平滑增加或減少機器。
dubbo架構
各個節點角色說明:
Provider: 暴露服務的服務提供方。
Consumer: 調用遠程服務的服務消費方。
Registry: 服務注冊與發現的注冊中心。
Monitor: 統計服務的調用次調和調用時間的監控中心。
Container: 服務運行容器。
調用關系說明:
1. 服務容器負責啟動,加載,運行服務提供者。
2. 服務提供者在啟動時,向注冊中心注冊自己提供的服務。
3. 服務消費者在啟動時,向注冊中心訂閱自己所需的服務。
4. 注冊中心返回服務提供者地址列表給消費者,如果有變更,注冊中心將基於長連接推送變更數據給消費者。
5. 服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一台提供者進行調用,如果調用失敗,再選另一台調用。
6. 服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鍾發送一次統計數據到監控中心。
dubbo為什么需要和zookeeper結合使用,zookeeper在dubbo體系中起到什么作用?
dubbo是一個prc遠程服務調用框架,需要一個注冊中心去管理每個服務的集群。zookeeper在dubbo中扮演一個注冊中心的角色(當然也可以不選擇zookeeper),zookeeper用來注冊服務和進行負載均衡。
詳述:哪一個服務由哪一個機器來提供,必須讓調用者知道。也就是ip地址和服務名對應關系。也可以把這種對應關系通過硬編碼的方式加在調用者的業務中,但是一旦提供的服務掛掉調用者無法知曉。zookeeper通過心跳機制來檢測並將掛掉的機器從列表中刪除。可以在不更改代碼的情況下通過添加機器來解決高並發。