国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

應(yīng)用架構(gòu)演變過程、rpc及Dubbo簡介

這篇具有很好參考價值的文章主要介紹了應(yīng)用架構(gòu)演變過程、rpc及Dubbo簡介。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、應(yīng)用架構(gòu)演變歷史:

????????單一應(yīng)用架構(gòu) -> 垂直應(yīng)用架構(gòu) -> 分布式服務(wù)架構(gòu)?-> 微服務(wù)架構(gòu)。

單一應(yīng)用架構(gòu)

????????當(dāng)網(wǎng)站流量很小時,只需一個應(yīng)用,將所有功能都部署在一起,以減少部署節(jié)點和成本。 此時,用于簡化增刪改查工作量的 數(shù)據(jù)訪問框架(ORM) 是關(guān)鍵。

????????缺點:單一的系統(tǒng)架構(gòu),使得在開發(fā)過程中,占用的資源越來越多,而且隨著流量的增加越來越難以維護。

垂直應(yīng)用架構(gòu)

????????當(dāng)訪問量逐漸增大,單一應(yīng)用增加機器帶來的加速度越來越小,垂直應(yīng)用架構(gòu)就出現(xiàn)了,垂直應(yīng)用架構(gòu)將應(yīng)用拆成互不相干的幾個應(yīng)用,解決了單一應(yīng)用架構(gòu)所面臨的擴容問題,流量能夠分散到各個子系統(tǒng)當(dāng)中,且系統(tǒng)的體積可控,一定程度上降低了開發(fā)人員之間協(xié)同以及維護的成本,提升了開發(fā)效率。

????????缺點:但是在垂直架構(gòu)中相同邏輯代碼需要不斷的復(fù)制,不能復(fù)用。

分布式服務(wù)架構(gòu)

soa

? ? ? ? 隨著業(yè)務(wù)的發(fā)展,垂直應(yīng)用越來越多,應(yīng)用之間的交互不可避免,并且這些應(yīng)用之間的調(diào)用和依賴關(guān)系也會越來越復(fù)雜,為了解決這個問題,同時為了解決多個垂直應(yīng)用間的代碼重復(fù)性問題,我們就不得不再次對這些垂直應(yīng)用做水平拆分了,soa時代也就來臨了,soa是面向服務(wù)的架構(gòu),它允許我們將核心業(yè)務(wù)和公共功能從多個垂直應(yīng)用中拆分出來,作為單獨的服務(wù)進行獨立的部署,逐漸形成了穩(wěn)定的服務(wù)中心,使前端應(yīng)用能更快速的響應(yīng)多變的市場需求。這個時期也衍生出了一系列服務(wù)于soa的技術(shù),如對服務(wù)提供、服務(wù)調(diào)用、連接處理、通信協(xié)議、序列化方式、服務(wù)發(fā)現(xiàn)、服務(wù)路由、日志輸出等行為進行封裝的服務(wù)框架。

????????從部署的角度來看,soa其實就是分布式服務(wù):將垂直架構(gòu)中的各個子系統(tǒng)再進行水平拆分,將多個子系統(tǒng)中的共同功能拆分為獨立的服務(wù),將這些服務(wù)部署在不同的主機上,通過網(wǎng)絡(luò)通信技術(shù)來實現(xiàn)服務(wù)之間的調(diào)用,并通過服務(wù)路由、負載均衡等技術(shù)來優(yōu)化服務(wù)間的調(diào)用過程,提高整體服務(wù)效率。

微服務(wù)架構(gòu)

? ? ? ? 微服務(wù)是對于分布式服務(wù)進行的更小粒度的拆分,因為分布式服務(wù)架構(gòu)中依然有多個具有調(diào)用關(guān)系的模塊存在于同一個應(yīng)用中,當(dāng)被調(diào)用的模塊出現(xiàn)了異常時,這個異常會被傳播到調(diào)用它的模塊中,也就是模塊間具有代碼級別的強依賴,耦合度太高了,為了解決這個問題,我們對分布式服務(wù)進行了更小粒度的拆分,也就是按照模塊拆分服務(wù)。微服務(wù)架構(gòu)就是將應(yīng)用按照業(yè)務(wù)模塊拆分成一個一個的微服務(wù),每個微服務(wù)運行在獨立的進程中,并使用輕量級的機制進行通信,通常是http restful api,這些服務(wù)可以使用不同的編程語言來實現(xiàn),也可以連接不同的數(shù)據(jù)庫,以保證最低限度的集中式管理,微服務(wù)也可以進行集群化部署,以提高服務(wù)應(yīng)對高并發(fā)的能力。隨著微服務(wù)架構(gòu)出現(xiàn)的是微服務(wù)框架,一種用于進行服務(wù)治理的框架,微服務(wù)框架自成生態(tài),提供了用于治理微服務(wù)架構(gòu)各方面的組件,包括服務(wù)的自動注冊與發(fā)現(xiàn)、服務(wù)網(wǎng)關(guān)路由、負載均衡、服務(wù)調(diào)用、服務(wù)容錯、服務(wù)鏈路追蹤、配置的動態(tài)管理等。常用的微服務(wù)框架如Spring Cloud。

二、rpc

? ? ? ? 在soa時代出現(xiàn)了用于實現(xiàn)遠程過程調(diào)用的rpc協(xié)議,遠程過程調(diào)用其實是一種思想,它想要實現(xiàn)的目標(biāo)為:在分布式系統(tǒng)中,能夠像調(diào)用本地方法一樣調(diào)用遠程接口,使我們無需進行網(wǎng)絡(luò)編程,也無需了解網(wǎng)絡(luò)通信技術(shù),就能通過網(wǎng)絡(luò)從遠程計算機程序上請求服務(wù)。

rpc的傳輸協(xié)議

????????rpc可以使用http作為傳輸協(xié)議,也可以直接使用tcp協(xié)議,使用不同的協(xié)議一般也是為了適應(yīng)不同的場景。那么http協(xié)議和tcp協(xié)議有什么區(qū)別呢?

????????http是應(yīng)用層協(xié)議,應(yīng)用層的任務(wù)是通過應(yīng)用進程間的交互來實現(xiàn)特定的網(wǎng)絡(luò)應(yīng)用。http屬于應(yīng)用層協(xié)議。http協(xié)議工作于C-S架構(gòu)之上,客戶端基于http協(xié)議向web服務(wù)端發(fā)送請求,服務(wù)端處理接收到的請求后,向客戶端發(fā)送響應(yīng)信息。http協(xié)議建立在tcp協(xié)議之上,它會基于TCP/IP通信協(xié)議來進行數(shù)據(jù)的傳遞(HTML 文件, 圖片文件, 查詢結(jié)果等)。

????????tcp是傳輸層協(xié)議,傳輸層的主要任務(wù)就是負責(zé)為兩臺主機進程之間的通信提供通用的數(shù)據(jù)傳輸服務(wù)。tcp是傳輸層協(xié)議,主要解決數(shù)據(jù)如何在網(wǎng)絡(luò)中傳輸。tcp提供的是面向連接的,可靠的數(shù)據(jù)傳輸服務(wù)。

rpc的實現(xiàn)需要解決的問題

????????rpc實現(xiàn)的是遠程調(diào)用,肯定是需要跨網(wǎng)絡(luò)而非本機調(diào)用,所以需要網(wǎng)絡(luò)編程才能實現(xiàn),這就帶來了以下幾個問題:

? ? ? ? 1、網(wǎng)絡(luò)通訊問題:主要是通過在客戶端和服務(wù)器之間建立tcp連接,遠程過程調(diào)用的所有交換的數(shù)據(jù)都在這個連接里傳輸。連接可以是按需連接,調(diào)用結(jié)束后就斷掉,也可以是長連接,多個遠程過程調(diào)用共享同一個連接。
????????rpc在大多數(shù)情況下,是應(yīng)用于一個高并發(fā)的調(diào)用場景,根據(jù)系統(tǒng)內(nèi)核的支持、編程語言的支持以及IO模型本身的特點,在rpc框架的實現(xiàn)中,在網(wǎng)絡(luò)通信的處理上,大多數(shù)會選擇 IO多路復(fù)用的方式。

? ? ? ? 2、尋址問題:A服務(wù)器上的應(yīng)用需要告訴底層的rpc框架,要請求的B服務(wù)器的ip地址及端口號是多少,接口名稱是什么,rpc框架只有得到這些信息才能完成調(diào)用。

????????在本機的函數(shù)調(diào)用中,函數(shù)體是直接通過函數(shù)指針來指定的,當(dāng)函數(shù)調(diào)用時,編譯器會自動調(diào)用相應(yīng)的函數(shù)指針。但是在遠程調(diào)用中,因為是跨服務(wù)器的,兩個進程的地址空間是完全不一樣的。所以,在rpc中,所有的函數(shù)都必須有一個自己的Call id,這個Call id在所有的進程中都是唯一確定的,具有全局唯一性??蛻舳嗽谶h程調(diào)用時,需要帶上這個Call id。同時我們需要在客戶端和服務(wù)端分別維護一個{ 函數(shù) <-> Call id}的映射表。當(dāng)客戶端需要遠程調(diào)用的時候,就需要查一下此表,查詢出對應(yīng)的Call id , 將這個Call id帶在請求中,服務(wù)端在處理請求的時候,也先查詢映射表,來確定客戶端需要調(diào)用的函數(shù)是哪個,最終執(zhí)行相應(yīng)的函數(shù)代碼。

? ? ? ? 3、序列化和反序列化:網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)必須是二進制數(shù)據(jù),但是調(diào)用方的請求的參數(shù)都是對象,對象是不能直接在網(wǎng)絡(luò)中傳輸?shù)?,所以必須把它轉(zhuǎn)換成可傳輸?shù)亩M制數(shù)據(jù),這個過程就叫做序列化。服務(wù)端也要將收到的二進制數(shù)據(jù)還原為對象,這個過程叫做反序列化。在rpc調(diào)用中,對輸入?yún)?shù)對象與返回值對象進行的序列化和反序列化是一個必須的過程。

rpc架構(gòu)

一個基本的rpc架構(gòu)應(yīng)該至少包含以下 4 個組件
????????客戶端::服務(wù)調(diào)用方,即服務(wù)消費者;
????????客戶端存根:?存放服務(wù)端地址信息,將客戶端的請求參數(shù)數(shù)據(jù)打包成網(wǎng)絡(luò)消息,再通過網(wǎng)絡(luò)傳輸發(fā)送給服務(wù)端;
????????服務(wù)端存根:?接收客戶端發(fā)送過來的請求消息并進行解包,然后再調(diào)用本地服務(wù)進行處理;
????????服務(wù)端:?服務(wù)的真正提供者。

一次具體的rpc調(diào)用過程:

? ? ? ? 1、服務(wù)消費者通過調(diào)用本地服務(wù)的方式調(diào)用需要消費的服務(wù);
? ? ? ? 2、客戶端存根接收到調(diào)用請求后負責(zé)將方法Call id、入?yún)⒌刃畔⑿蛄谢?,組裝成能夠進行網(wǎng)絡(luò)傳輸?shù)南Ⅲw;
? ? ? ? 3、客戶端存根找到遠程的服務(wù)地址,并且將消息通過網(wǎng)絡(luò)發(fā)送給服務(wù)端;
? ? ? ? 4、服務(wù)端存根收到消息后進行解碼(反序列化操作),并根據(jù)解碼結(jié)果調(diào)用本地方法進行相關(guān)處理;
? ? ? ? 5、服務(wù)端方法執(zhí)行完畢后將處理結(jié)果返回給服務(wù)端存根;
? ? ? ? 6、服務(wù)端存根將相應(yīng)結(jié)果序列化,打包成消息并通過網(wǎng)絡(luò)發(fā)送至消費方;
? ? ? ? 7、客戶端存根接收到消息,并進行解碼(反序列化),將反序列化以后的結(jié)果返回給客戶端。

rpc框架

????????除了rpc的基本功能,一個成熟的rpc框架還應(yīng)該提供其他的用于治理服務(wù)的功能,如:服務(wù)的自動注冊與發(fā)現(xiàn)、負載均衡、集群容錯機制等等,下面簡單介紹一個經(jīng)典的rpc框架:Dubbo

Dubbo簡介

????????Dubbo是阿里巴巴開源的一款基于Java的高性能rpc分布式服務(wù)框架,致力于提供高性能和透明化的rpc遠程服務(wù)調(diào)用方案,以及soa服務(wù)治理方案。

為什么使用dubbo?

????????使用Dubbo可以將核心業(yè)務(wù)抽取出來,作為獨立的服務(wù),形成穩(wěn)定的服務(wù)中心,可提高業(yè)務(wù)復(fù)用性,使前端應(yīng)用能更快速的響應(yīng)多變的市場需求。并且rpc支持的分布式架構(gòu)可以承受更大規(guī)模的并發(fā)流量。

dubbo的核心功能包括三方面

????????1、遠程通訊:提供基于接口方法的透明化的遠程過程調(diào)用,包括多協(xié)議支持,dubbo內(nèi)部對多種基于長連接的NIO框架進行了封裝,包括多種線程模型,序列化,以及“請求-響應(yīng)”模式的信息交換方式。
????????2、負載均衡與集群容錯:提供了對于多種負載均衡策略及集群容錯策略的支持。
????????3、服務(wù)的自動注冊與發(fā)現(xiàn):基于注冊中心目錄服務(wù),使服務(wù)消費方能動態(tài)的查找服務(wù)提供方,使服務(wù)方地址透明,并支持服務(wù)提供方動態(tài)地增加或減少機器。

服務(wù)的發(fā)布-訂閱-調(diào)用過程:

????????1、服務(wù)容器在啟動時加載、啟動、運行服務(wù)提供者。
????????2、服務(wù)提供者在啟動時,向注冊中心注冊自己提供的服務(wù)并對外暴露自己的接口,接口的發(fā)布支持多協(xié)議。
????????3、服務(wù)消費者在啟動時,向注冊中心訂閱自己所需的服務(wù)。
????????4、注冊中心返回服務(wù)提供者地址列表給消費者,如果服務(wù)提供者列表有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者,服務(wù)消費者會將服務(wù)提供者地址列表保存在本地。
????????5、服務(wù)消費者,從本地保存的提供者地址列表中,基于軟負載均衡算法,選一臺提供者進行調(diào)用,如果調(diào)用失敗,會基于提供者設(shè)置的容錯策略去調(diào)用另外一臺服務(wù)或者直接返回。
????????6、服務(wù)消費者和提供者,在內(nèi)存中累計調(diào)用次數(shù)和調(diào)用時間,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心。

Dubbo的配置說明(以xml配置方式舉例)

服務(wù)提供者端的dubbo配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--當(dāng)前項目在整個分布式架構(gòu)里面的唯一名稱,計算依賴關(guān)系的標(biāo)簽-->
    <dubbo:application name="provider" owner="sihai">
        <dubbo:parameter key="qos.enable" value="true"/>
        <dubbo:parameter key="qos.accept.foreign.ip" value="false"/>
        <dubbo:parameter key="qos.port" value="55555"/>
    </dubbo:application>

    <dubbo:monitor protocol="registry"/>

    <!--dubbo這個服務(wù)所要暴露的服務(wù)地址所對應(yīng)的注冊中心-->
    <!--<dubbo:registry address="N/A"/>-->
    <dubbo:registry address="zookeeper://localhost:2181" check="false"/>

    <!--當(dāng)前服務(wù)發(fā)布所依賴的協(xié)議;webservice、Thrift、Hessain、http-->
    <dubbo:protocol name="dubbo" port="20880"/>

    <!--服務(wù)發(fā)布的配置,需要暴露的服務(wù)接口-->
    <dubbo:service
            interface="com.sihai.dubbo.provider.service.ProviderService"
            ref="providerService"/>

    <!--Bean bean定義-->
    <bean id="providerService" class="com.sihai.dubbo.provider.service.ProviderServiceImpl"/>

</beans>

配置說明:

????????1、dubbo是基于spring來開發(fā)的,使用類似于spring的配置文件進行配置;
????????2、節(jié)點:dubbo:application配置的是應(yīng)用在分布式架構(gòu)中的唯一名稱,可以在name屬性中配置,另外還可以配置owner字段,表示屬于誰。
????????3、節(jié)點:dubbo:monitor是監(jiān)控中心配置, 用于配置連接監(jiān)控中心相關(guān)信息,可以不配置,不是必須的參數(shù)。
????????4、節(jié)點:dubbo:registry配置注冊中心的信息,比如,這里我們可以配置 zookeeper 作為我們的注冊中心。address 是注冊中心的地址,dubbo支持使用zk集群作為注冊中心,當(dāng)注冊中心是zk集群時,要配置dubbo:registry節(jié)點的protocol屬性的值為zookeeper,address屬性的值為多個節(jié)點的地址,多個地址用英文逗號隔開。
????????5、節(jié)點:dubbo:protocol用于定義協(xié)議,dubbo可以依賴這些協(xié)議進行服務(wù)的發(fā)布,同一個接口也可以使用多個協(xié)議進行發(fā)布,在dubbo:service節(jié)點中可以用protocol屬性指向dubbo:protocol節(jié)點定義的某個協(xié)議,dubbo:protocol可配置的協(xié)議類型有dubbo、http、webservice。
????????6、節(jié)點:dubbo:service這個節(jié)點就是我們的重點了,我們就是通過這個配置將服務(wù)提供者的服務(wù)發(fā)布出去的。interface 是接口的包路徑,ref指向第 ⑦ 點配置的接口的 bean。
????????7、最后,我們需要像配置spring的接口一樣,配置接口的bean,也就是所發(fā)布服務(wù)的具體實現(xiàn)。

服務(wù)的接口的發(fā)布

? ? ? ? 服務(wù)的可以通過啟動spring容器將接口發(fā)布出去:

package com.sihai.dubbo.provider;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.alibaba.dubbo.container.Main;
import com.sihai.dubbo.provider.service.ProviderService;
import com.sihai.dubbo.provider.service.ProviderServiceImpl;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * xml方式啟動
 *
 */
public class App 
{
    public static void main( String[] args ) throws IOException {
        //加載xml配置文件啟動
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/spring/provider.xml");
        context.start();
        System.in.read(); // 按任意鍵退出
    }
}

? ? ? ? 因為dubbo底層就是依賴spring的,所以我們通過spring容器加載dubbo配置然后啟動spring容器就將服務(wù)發(fā)布出去了。

消費者端的dubbo配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo        http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--當(dāng)前項目在整個分布式架構(gòu)里面的唯一名稱,計算依賴關(guān)系的標(biāo)簽-->
    <dubbo:application name="consumer" owner="sihai"/>

    <!--dubbo這個服務(wù)所要暴露的服務(wù)地址所對應(yīng)的注冊中心-->
    <!--點對點的方式-->
    <!--<dubbo:registry address="N/A" />-->
    <dubbo:registry address="zookeeper://localhost:2181" check="false"/>

    <!--生成一個遠程服務(wù)的調(diào)用代理-->
    <!--點對點方式-->
    <!--<dubbo:reference id="providerService"
                     interface="com.sihai.dubbo.provider.service.ProviderService"
                     url="dubbo://192.168.234.1:20880/com.sihai.dubbo.provider.service.ProviderService"/>-->

    <dubbo:reference id="providerService"
                     interface="com.sihai.dubbo.provider.service.ProviderService"/>

</beans>

?配置說明:

? ? ? ? 與服務(wù)提供者端的dubbo配置主要就是dubbo:reference這個節(jié)點的不同,在消費端用dubbo:reference這個節(jié)點來配置消費端要調(diào)用的遠程接口信息,它的必填屬性interface要指向所要引用的接口類型。

遠程調(diào)用的發(fā)起方式

package com.sihai.dubbo.consumer;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.sihai.dubbo.provider.service.ProviderService;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.IOException;

/**
 * xml的方式調(diào)用
 *
 */
public class App 
{
    public static void main( String[] args ) throws IOException {

        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("consumer.xml");
        context.start();
        ProviderService providerService = (ProviderService) context.getBean("providerService");
        String str = providerService.SayHello("hello");
        System.out.println(str);
        System.in.read();

    }
}

? ? ? ? 通過spring容器的getBean方法,以調(diào)用本地bean的方式去調(diào)用遠程服務(wù)。

dubbo的多種配置方式

? ? ? ? dubbo支持多種配置方式:xml配置、api配置、注解配置。dubbo官方推薦的是xml方式,不過在spring的演進過程中一直在去xml化,所以注解配置也是常用的一種配置方式。

?注解配置方式:

? ? ? ? 主要就是服務(wù)端的@Service注解和消費端的@Reference注解,注解中都提供了與xml配置相對應(yīng)的各個配置屬性,只不過在使用注解方式時需要注意,要在配置類中用@EnableDubbo注解來開啟對于dubbo的支持,并且通過它的scanBasePackages屬性來配置容器掃描dubbo服務(wù)的包路徑,即@Service注解的類所在的包路徑。

api配置方式:

? ? ? ? api配置方式也是提供了與xml配置相對應(yīng)的各個api組件,包括與<dubbo:application>對應(yīng)的ApplicationConfig、與<dubbo:registry>對應(yīng)的RegistryConfig、與<dubbo:service>對應(yīng)的ServiceConfig、與<dubbo:reference>對應(yīng)的ReferenceConfig等等,調(diào)用這些api的方法可以對dubbo進行配置。

dubbo的集群容錯策略

集群模式 說明 使用方法
failover 失敗自動切換,當(dāng)出現(xiàn)失敗,重試其它服務(wù)器。通常用于讀操作,但重試會帶來更長延遲。可通過?retries="2"?來設(shè)置重試次數(shù)(不含第一次)。 cluster="xxx"?xxx:集群模式名稱 ,例如cluster="failover"
failfast 快速失敗,只發(fā)起一次調(diào)用,失敗立即報錯。通常用于非冪等性的寫操作,比如新增記錄。
failsafe 失敗安全,出現(xiàn)異常時,直接忽略。
failback 失敗自動恢復(fù),后臺記錄失敗請求,定時重發(fā)。通常用于消息通知操作。
forking 并行調(diào)用多個服務(wù)器,只要一個成功即返回。通常用于實時性要求較高的讀操作,但需要浪費更多服務(wù)資源??赏ㄟ^?forks="2"?來設(shè)置最大并行數(shù)。
broadcast 廣播調(diào)用所有提供者,逐個調(diào)用,任意一臺報錯則報錯。通常用于通知所有提供者更新緩存或日志等本地資源信息。

????????默認的方案是 failover,也就是重試機制。我們可以在發(fā)布服務(wù)或者引用服務(wù)的時候設(shè)置,也就是為<dubbo:service>或者<dubbo:reference>節(jié)點設(shè)置cluster屬性。

dubbo的負載均衡策略

負載均衡模式 說明 使用方法
random 隨機 按權(quán)重設(shè)置隨機概率 <dubbo:service loadbalance="xxx"/>?xxx:負載均衡方法
roundRobin 輪詢 按公約后的權(quán)重設(shè)置輪詢比率。
leastActive 最少活躍調(diào)用數(shù) 相同活躍數(shù)的隨機,活躍數(shù)指調(diào)用前后計數(shù)差。
consistentHash 一致性?Hash?相同參數(shù)的請求總是發(fā)到同一提供者。 當(dāng)某一臺提供者掛時,原本發(fā)往該提供者的請求,基于虛擬節(jié)點,平攤到其它提供者,不會引起劇烈變動。

dubbo的多協(xié)議支持

????????在前面我們使用的協(xié)議都是?dubbo?協(xié)議,但是?dubbo除了支持這種協(xié)議外還支持其他的協(xié)議,比如,http、rmi、hessian等,另外,還可以用多種協(xié)議同時暴露一種服務(wù)。?

先聲明多種協(xié)議:

 <!--當(dāng)前服務(wù)發(fā)布所依賴的協(xié)議;webserovice、Thrift、Hessain、http-->
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:protocol name="rmi" port="1099" />

在發(fā)布接口時,指定多個協(xié)議,多個協(xié)議之間用英文逗號隔開:

<!--服務(wù)發(fā)布的配置,需要暴露的服務(wù)接口-->
    <dubbo:service cluster="failover" retries="2"
            interface="com.sihai.dubbo.provider.service.ProviderService"
            ref="providerService"/>
    <dubbo:service cluster="failover" retries="2"
                   interface="com.sihai.dubbo.provider.service.ProviderService"
                   ref="providerService" protocol="rmi"/>

dubbo的多注冊中心支持

? ? ? ? dubbo支持同一服務(wù)向多注冊中心同時注冊,或者不同服務(wù)分別注冊到不同的注冊中心上去,甚至可以同時引用注冊在不同注冊中心上的同名服務(wù)。?

先聲明多個注冊中心

<!--多注冊中心-->
    <dubbo:registry protocol="zookeeper" id="reg1" timeout="10000" address="localhost:2181"/>
    <dubbo:registry protocol="zookeeper" id="reg2" timeout="10000" address="localhost:2182"/>
    <dubbo:registry protocol="zookeeper" id="reg3" timeout="10000" address="localhost:2183"/>

發(fā)布服務(wù):

<!--服務(wù)發(fā)布的配置,需要暴露的服務(wù)接口-->
    <dubbo:service cluster="failover" retries="2"
            interface="com.sihai.dubbo.provider.service.ProviderService"
            ref="providerService" registry="reg1"/>
    <dubbo:service cluster="failover" retries="2"
                   interface="com.sihai.dubbo.provider.service.ProviderService"
                   ref="providerService" protocol="rmi" registry="reg1,reg2"/>

????????對于dubbo的一些屬性配置,如負載均衡、容錯策略等,雖然在服務(wù)端和消費端都支持配置,但是dubbo的用戶手冊推薦的是,盡量在服務(wù)端多設(shè)置,因為服務(wù)端更了解自己所提供服務(wù)的特性。不過,如果我們在消費端進行了這些設(shè)置,那么在服務(wù)調(diào)用時,就以消費端的設(shè)置為準(zhǔn),即:消費端的設(shè)置具有更高優(yōu)先級。文章來源地址http://www.zghlxwxcb.cn/news/detail-785260.html

到了這里,關(guān)于應(yīng)用架構(gòu)演變過程、rpc及Dubbo簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 自定義Dubbo RPC通信協(xié)議

    Dubbo 協(xié)議層的核心SPI接口是 org.apache.dubbo.rpc.Protocol ,通過擴展該接口和圍繞的相關(guān)接口,就可以讓 Dubbo 使用我們自定義的協(xié)議來通信。默認的協(xié)議是 dubbo,本文提供一個 Grpc 協(xié)議的實現(xiàn)。 Google 提供了 Java 的 Grpc 實現(xiàn),所以我們站在巨人的肩膀上即可,就不用重復(fù)造輪子了。

    2024年01月19日
    瀏覽(27)
  • Dubbo之消費端服務(wù)RPC調(diào)用

    Dubbo之消費端服務(wù)RPC調(diào)用

    在消費端服務(wù)是基于接口調(diào)用Provider端提供的服務(wù),所以在消費端并沒有服務(wù)公共接口的實現(xiàn)類。 利用注解@DubboReference將目標(biāo)接口CountryService作為CountryController類的字段屬性,在解析類CountryController時獲取全部字段屬性并單獨關(guān)注解析存在注解@DubboReference的字段屬性。 通過步驟

    2024年03月12日
    瀏覽(23)
  • 分布式RPC框架Dubbo詳解

    分布式RPC框架Dubbo詳解

    目錄 ? 1.架構(gòu)演進 1.1 單體架構(gòu) 1.2? 垂直架構(gòu) 1.3 分布式架構(gòu) 1.4 SOA架構(gòu) 1.5 微服務(wù)架構(gòu) 2.RPC框架 2.1 RPC基本概念介紹 2.1.1 RPC協(xié)議 2.1.2 RPC框架 2.1.3 RPC與HTTP、TCP/ UDP、Socket的區(qū)別 2.1.4 RPC的運行流程 ?2.1.5 為什么需要RPC 2.2 Dubbo? 2.2.1 Dubbo 概述 2.2.2 Dubbo實戰(zhàn) ? 架構(gòu)演進如下圖: 這

    2024年02月07日
    瀏覽(38)
  • 用Netty自己實現(xiàn)Dubbo RPC

    用Netty自己實現(xiàn)Dubbo RPC

    1. RPC(Remote Procedure Call)— 遠程過程調(diào)用,是一個計算機通信協(xié)議. 該協(xié)議 允許運行在一臺計算機中的程序調(diào)用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程; 2. 兩個或多個應(yīng)用程序都分布在不同的服務(wù)器上,它們之間的調(diào)用都像是本地方法調(diào)用一樣 (如圖): 3.常

    2024年02月10日
    瀏覽(23)
  • 【Dubbo3云原生微服務(wù)開發(fā)實戰(zhàn)】「Dubbo前奏導(dǎo)學(xué)」 RPC服務(wù)的底層原理和實現(xiàn)

    【Dubbo3云原生微服務(wù)開發(fā)實戰(zhàn)】「Dubbo前奏導(dǎo)學(xué)」 RPC服務(wù)的底層原理和實現(xiàn)

    Dubbo是一款高效而強大的RPC服務(wù)框架,它旨在解決微服務(wù)架構(gòu)下的服務(wù)監(jiān)控和通信問題。該框架提供了Java、Golang等多語言的SDK,使得使用者可以輕松構(gòu)建和開發(fā)微服務(wù)。Dubbo具備遠程地址發(fā)現(xiàn)和通信能力,可通過Dubbo獨有的身臨其境的服務(wù)治理特驗為主導(dǎo),以提高開發(fā)人員的功

    2024年02月05日
    瀏覽(21)
  • 不滿足于RPC,詳解Dubbo的服務(wù)調(diào)用鏈路

    不滿足于RPC,詳解Dubbo的服務(wù)調(diào)用鏈路

    【收藏向】從用法到源碼,一篇文章讓你精通Dubbo的SPI機制 面試Dubbo ,卻問我和Springcloud有什么區(qū)別? 超簡單,手把手教你搭建Dubbo工程(內(nèi)附源碼) Dubbo最核心功能——服務(wù)暴露的配置、使用及原理 并不簡單的代理,Dubbo是如何做服務(wù)引用的 經(jīng)過前面一系列的鋪墊,今天終

    2024年02月16日
    瀏覽(26)
  • Java 【dubbo rpc改feign調(diào)用】controller注解處理

    【框架改造問題點記錄,dubbo改為spring cloud alibaba】 【第三篇】controller注解處理 【描述】項目之前用了jboss,引入了很多ws.rs包,controller參數(shù)注解使用QueryParam。改造時批量替換成了@RequestParam(代表必傳)。但是前端并不會傳全部參數(shù),會導(dǎo)致400,持續(xù)更新… 不加注解,表示

    2024年02月17日
    瀏覽(19)
  • 微服務(wù)學(xué)習(xí) | Springboot整合Dubbo+Nacos實現(xiàn)RPC調(diào)用

    微服務(wù)學(xué)習(xí) | Springboot整合Dubbo+Nacos實現(xiàn)RPC調(diào)用

    ??? 個人主頁 :鼠鼠我捏,要死了捏的主頁? ??? 系列專欄 :Golang全棧-專欄 ??? 個人學(xué)習(xí)筆記,若有缺誤,歡迎評論區(qū)指正 ? 前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點擊跳轉(zhuǎn)到網(wǎng)站AI學(xué)習(xí)網(wǎng)站。 目錄 前言 快速上手

    2024年02月19日
    瀏覽(22)
  • Dubbo源碼解析第一期:如何使用Netty4構(gòu)建RPC

    Dubbo源碼解析第一期:如何使用Netty4構(gòu)建RPC

    ????????早期學(xué)習(xí)和使用Dubbo的時候(那時候Dubbo還沒成為Apache頂級項目),寫過一些源碼解讀,但隨著Dubbo發(fā)生了翻天覆地的變化,那些文章早已過時,所以現(xiàn)在計劃針對最新的Apache Dubbo源碼來進行“閱讀理解”,希望和大家一起再探Dubbo的實現(xiàn)。由于能力有限,如果文章

    2024年01月21日
    瀏覽(21)
  • Netty核心技術(shù)十一--用Netty 自己 實現(xiàn) dubbo RPC

    Netty核心技術(shù)十一--用Netty 自己 實現(xiàn) dubbo RPC

    RPC(Remote Procedure Call) :遠程 過程調(diào)用,是一個計算機 通信協(xié)議。該協(xié)議允許運 行于一臺計算機的程序調(diào) 用另一臺計算機的子程序, 而程序員無需額外地為這 個交互作用編程 兩個或多個應(yīng)用程序都分 布在不同的服務(wù)器上,它 們之間的調(diào)用都像是本地 方法調(diào)用一樣(如圖

    2024年02月16日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包