更新時間:2021年12月02日17時21分 來源:傳智教育 瀏覽次數(shù):
Dubbo 是阿里開源的遠程服務(wù)調(diào)用(RPC)的分布式框架,提供了 SOA 服務(wù)治理方案;它的架構(gòu)主要有五個角色/核心組件,分為是 Container(容器)、Provider(服務(wù)的提供方)、Registry(注冊中心)、Consumer(服務(wù)的消費方)、Monitor(監(jiān)控中心)。
容器主要負責啟動、加載、運行服務(wù)提供者;
同時服務(wù)提供者在啟動時,向注冊中心注冊自己提供的服務(wù);
消費者向注冊中心訂閱自己的服務(wù);
注冊中心返回服務(wù)提供者列表給消費者,如果有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者;
對于服務(wù)消費者,從提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調(diào)用,如果調(diào)用失敗,再選另外一臺調(diào)用;
服務(wù)消費者和提供者,在內(nèi)存中累計調(diào)用次數(shù)和調(diào)用時間,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心;
Dubbo 在項目中主要用來實現(xiàn)不同系統(tǒng)之間的服務(wù)調(diào)用,由于項目是按照不同的功能分了不同的系統(tǒng),按照三層架構(gòu)又分了不同的服務(wù),其中三層架構(gòu)中的控制層作為服務(wù)的消費方,業(yè)務(wù)層和持久層共同作為服務(wù)的發(fā)布方,這樣的架構(gòu)實現(xiàn)了系統(tǒng)的服務(wù)化,提高了開發(fā)效率,實現(xiàn)了業(yè)務(wù)的解耦。
項目中通過 Dubbo 和 Spring 的整合,采用全 Spring 配置方式,只需要用 Spring 來加載Dubbo 的配置,完成了服務(wù)的發(fā)布和調(diào)用。
我們主要在服務(wù)的暴露方通過dubbo:service標簽來暴露服務(wù),在服務(wù)的消費方通過dubbo:reference標簽來引用服務(wù),注冊中心我們選用的是 zookeeper,對服務(wù)的URL進行了管理和配置。
Dubbo 支持 Dubbo 協(xié)議、RMI 協(xié)議、hessian 協(xié)議、Http 協(xié)議等。
Dubbo 協(xié)議:缺省協(xié)議、采用了單一長連接和 NIO 異步通訊、使用線程池并發(fā)處理請求,能減少握手和加大并發(fā)效率、采用的是 Hession 二進制序列化、性能較好,推薦使用。
主要應(yīng)用于傳入傳出參數(shù)數(shù)據(jù)包較小(建議小于 100K),消費者比提供者個數(shù)多,由于是單一連接,因為盡量不要傳輸大文件。
RMI 協(xié)議:采用 JDK 標準的 RMI 協(xié)議(基于 TCP 協(xié)議)、堵塞式短連接、JDK 標準序列化方式、同步通訊。
適用于消費者和提供者個數(shù)差不多的,可傳文件。測試發(fā)現(xiàn)偶爾會連接失敗,需要重建 Stub。
Hessian 協(xié)議:采用 http 通訊,采用 Servlet 暴露服務(wù),多連接短連接的同步傳輸方式,采用hession 的二進制序列化,適合提供者比消費者多。