真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

2023-01-16Dubbo+Zookeeper集成-創(chuàng)新互聯(lián)

Dubbo+Zookeeper

創(chuàng)新互聯(lián)建站專注于中大型企業(yè)的成都做網(wǎng)站、成都網(wǎng)站設(shè)計和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶上千余家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!文章目錄
  • Dubbo+Zookeeper
    • 1. Dubbo作用
      • 連通性
      • 健壯性
      • 伸縮性
      • dubbo支持的協(xié)議
        • dubbo協(xié)議(默認(rèn))
      • 注冊中心
      • Dubbo支持的注冊中心
      • Zookeeper注冊中心(推薦)
    • 2. Dubbo服務(wù)治理
        • Dubbo啟動檢查
    • 3. Dubbo架構(gòu)
    • 4. Dubbo集群容錯方案
    • 5. Zookeeper安裝
      • 1.安裝
      • 2.集群搭建
    • 6. Spring整合Dubbo
        • 6.1 Provider生產(chǎn)者
        • 6.2 Consumer消費者
    • 7. SpringBoot整合Dubbo
        • 7.1 Provider生產(chǎn)者
        • 7.2 Consumer消費者
    • 8.Dubbo的Spi機(jī)制的過濾器擴(kuò)展

? Dubbo是一個分布式服務(wù)框架,致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案,以及SOA服務(wù)治理方案

1. Dubbo作用

1.透明化的遠(yuǎn)程方法調(diào)用,就像調(diào)用本地方法一樣調(diào)用遠(yuǎn)程方法,只需簡單配置,沒有任何API侵入。

2.軟負(fù)載均衡及容錯機(jī)制,可在內(nèi)網(wǎng)替代F5等硬件負(fù)載均衡器,降低成本,減少單點。

3.服務(wù)自動注冊與發(fā)現(xiàn),不再需要寫死服務(wù)提供方地址,注冊中心基于接口名查詢服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。

節(jié)點角色說明
Provider暴露服務(wù)的服務(wù)提供方
Consumer調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費方
Registry服務(wù)注冊與發(fā)現(xiàn)的注冊中心
Monitor統(tǒng)計服務(wù)的調(diào)用次數(shù)和調(diào)用時間的監(jiān)控中心
Container服務(wù)運行容器
  1. 服務(wù)容器負(fù)責(zé)啟動,加載,運行服務(wù)提供者。
  2. 服務(wù)提供者在啟動時,向注冊中心注冊自己提供的服務(wù)。
  3. 服務(wù)消費者在啟動時,向注冊中心訂閱自己所需的服務(wù)。
  4. 注冊中心返回服務(wù)提供者地址列表給消費者,如果有變更,注冊中心將基于長連接推送變更數(shù)據(jù)給消費者。
  5. 服務(wù)消費者,從提供者地址列表中,基于軟負(fù)載均衡算法,選一臺提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺調(diào)用。
  6. 服務(wù)消費者和提供者,在內(nèi)存中累計調(diào)用次數(shù)和調(diào)用時間,定時每分鐘發(fā)送一次統(tǒng)計數(shù)據(jù)到監(jiān)控中心。

dubbo默認(rèn)服務(wù)間調(diào)用使用的是同步方式調(diào)用

連通性
  • 注冊中心負(fù)責(zé)服務(wù)地址的注冊與查找,相當(dāng)于目錄服務(wù),服務(wù)提供者和消費者只在啟動時與注冊中心交互,注冊中心不轉(zhuǎn)發(fā)請求,壓力較小
  • 監(jiān)控中心負(fù)責(zé)統(tǒng)計各服務(wù)調(diào)用次數(shù),調(diào)用時間等,統(tǒng)計先在內(nèi)存匯總后每分鐘一次發(fā)送到監(jiān)控中心服務(wù)器,并以報表展示
  • 服務(wù)提供者向注冊中心注冊其提供的服務(wù),并匯報調(diào)用時間到監(jiān)控中心,此時間不包含網(wǎng)絡(luò)開銷
  • 服務(wù)消費者向注冊中心獲取服務(wù)提供者地址列表,并根據(jù)負(fù)載算法直接調(diào)用提供者,同時匯報調(diào)用時間到監(jiān)控中心,此時間包含網(wǎng)絡(luò)開銷
  • 注冊中心,服務(wù)提供者,服務(wù)消費者三者之間均為長連接,監(jiān)控中心除外
  • 注冊中心通過長連接感知服務(wù)提供者的存在,服務(wù)提供者宕機(jī),注冊中心將立即推送事件通知消費者
  • 注冊中心和監(jiān)控中心全部宕機(jī),不影響已運行的提供者和消費者,消費者在本地緩存了提供者列表
  • 注冊中心和監(jiān)控中心都是可選的,服務(wù)消費者可以直連服務(wù)提供者
健壯性
  • 監(jiān)控中心宕掉不影響使用,只是丟失部分采樣數(shù)據(jù)
  • 數(shù)據(jù)庫宕掉后,注冊中心仍能通過緩存提供服務(wù)列表查詢,但不能注冊新服務(wù)
  • 注冊中心對等集群,任意一臺宕掉后,將自動切換到另一臺
  • 注冊中心全部宕掉后,服務(wù)提供者和服務(wù)消費者仍能通過本地緩存通訊
  • 服務(wù)提供者無狀態(tài),任意一臺宕掉后,不影響使用
  • 服務(wù)提供者全部宕掉后,服務(wù)消費者應(yīng)用將無法使用,并無限次重連等待服務(wù)提供者恢復(fù)
伸縮性
  • 注冊中心為對等集群,可動態(tài)增加機(jī)器部署實例,所有客戶端將自動發(fā)現(xiàn)新的注冊中心
  • 服務(wù)提供者無狀態(tài),可動態(tài)增加機(jī)器部署實例,注冊中心將推送新的服務(wù)提供者信息給消費者
dubbo支持的協(xié)議

? 協(xié)議是兩個網(wǎng)絡(luò)實體進(jìn)行通信的基礎(chǔ),數(shù)據(jù)在網(wǎng)絡(luò)上從一個實體傳輸?shù)搅硪粋€實體,以字節(jié)流的形式傳遞到對端。在這個字節(jié)流的世界里,如果沒有協(xié)議,就無法將這個一維的字節(jié)流重塑成為二維或者多維的數(shù)據(jù)結(jié)構(gòu)以及領(lǐng)域?qū)ο?

序列化方式將對象數(shù)據(jù)進(jìn)行轉(zhuǎn)換

Dubbo對于數(shù)據(jù)之間傳輸?shù)男蛄谢仓С侄喾N形式:

JDk方式序列化

hessian方式序列化 (dubbo 默認(rèn))

Json方式序列化

協(xié)議名稱
dubbo協(xié)議(默認(rèn))
rest協(xié)議
HTTP協(xié)議
Hessian協(xié)議
Redis協(xié)議
Thrift協(xié)議
gRpc協(xié)議
memcached協(xié)議
RMI協(xié)議
WebService協(xié)議
dubbo協(xié)議(默認(rèn))

? Dubbo 缺省協(xié)議采用單一長連接和 NIO 異步通訊,適合于小數(shù)據(jù)量大并發(fā)的服務(wù)調(diào)用,以及服務(wù)消費者機(jī)器數(shù)遠(yuǎn)大于服務(wù)提供者機(jī)器數(shù)的情況。反之,Dubbo 缺省協(xié)議不適合傳送大數(shù)據(jù)量的服務(wù),比如傳文件,傳視頻等,除非請求量很低。

特性:

缺省協(xié)議,使用基于 mina1.1.7和 hessian3.2.1的 tbremoting 交互。

  • 連接個數(shù):單連接
  • 連接方式:長連接
  • 傳輸協(xié)議:TCP
  • 傳輸方式:NIO 異步傳輸
  • 序列化:Hessian 二進(jìn)制序列化
  • 適用范圍:傳入傳出參數(shù)數(shù)據(jù)包較?。ńㄗh小于100K),消費者比提供者個數(shù)多,單一消費者無法壓滿提供者,盡量不要用 dubbo 協(xié)議傳輸大文件或超大字符串。
  • 適用場景:常規(guī)遠(yuǎn)程服務(wù)方法調(diào)用

約束:

  • 參數(shù)及返回值需實現(xiàn)Serializable接口
  • 參數(shù)及返回值不能自定義實現(xiàn)List,Map,Number,Date,Calendar等接口,只能用 JDK 自帶的實現(xiàn),因為 hessian 會做特殊處理,自定義實現(xiàn)類中的屬性值都會丟失。
  • Hessian 序列化,只傳成員屬性值和值的類型,不傳方法或靜態(tài)變量
注冊中心

? 對于服務(wù)提供方,它需要發(fā)布服務(wù),而且由于應(yīng)用系統(tǒng)的復(fù)雜性,服務(wù)的數(shù)量、類型也不斷膨脹,對于服務(wù)消費方,它最關(guān)心如何獲取到它所需要的服務(wù),而面對復(fù)雜的應(yīng)用系統(tǒng),需要管理大量的服務(wù)調(diào)用。而且,對于服務(wù)提供方和服務(wù)消費方來說,他們還有可能兼具這兩種角色,即既需要提供服務(wù),有需要消費服務(wù)。
通過將服務(wù)統(tǒng)一管理起來,可以有效地優(yōu)化內(nèi)部應(yīng)用對服務(wù)發(fā)布/使用的流程和管理。服務(wù)注冊中心可以通過特定協(xié)議來完成服務(wù)對外的統(tǒng)一.

Dubbo支持的注冊中心

在dubbo2.7版本中支持5種注冊中心

注冊中心名稱
Nacos注冊中心(新dubbo之后) alibaba cloud 的 官方 注冊和配置中心 eureka(可用性)
Zookeeper注冊中心(推薦) 分布式一致性協(xié)調(diào)服務(wù)器系統(tǒng) (一致性)
Multicast 注冊中心
Redis 注冊中心
Simple 注冊中心
Zookeeper注冊中心(推薦)

? Zookeeper 是 Apache Hadoop 的子項目,是一個樹型的目錄服務(wù),支持變更推送,適合作為 Dubbo 服務(wù)的注冊中心,工業(yè)強(qiáng)度較高,可用于生產(chǎn)環(huán)境,并推薦使用

2. Dubbo服務(wù)治理 Dubbo啟動檢查

? Dubbo 缺省會在啟動時檢查依賴的服務(wù)是否可用,不可用時會拋出異常,阻止 Spring 初始化完成,以便上線時,能及早發(fā)現(xiàn)問題,默認(rèn)check="true"。

可以通過check="false"關(guān)閉檢查,比如,測試時,有些服務(wù)不關(guān)心,或者出現(xiàn)了循環(huán)依賴,必須有一方先啟動。

另外,如果你的 Spring 容器是懶加載的,或者通過 API 編程延遲引用服務(wù),請關(guān)閉 check,否則服務(wù)臨時不可用時,會拋出異常,拿到 null 引用,如果check="false",總是會返回引用,當(dāng)服務(wù)恢復(fù)時,能自動連上。

3. Dubbo架構(gòu)
  1. 服務(wù)接口層(Service):該層是與實際業(yè)務(wù)邏輯相關(guān)的,根據(jù)服務(wù)提供方和服務(wù)消費方的業(yè)務(wù)設(shè)計對應(yīng)的接口和實現(xiàn)。
  2. 配置層(Config):對外配置接口,以ServiceConfig和ReferenceConfig為中心,可以直接new配置類,也可以通過spring解析配置生成配置類。
  3. 服務(wù)代理層(Proxy):服務(wù)接口透明代理,生成服務(wù)的客戶端Stub和服務(wù)器端Skeleton,以ServiceProxy為中心,擴(kuò)展接口為ProxyFactory。
  4. 服務(wù)注冊層(Registry):封裝服務(wù)地址的注冊與發(fā)現(xiàn),以服務(wù)URL為中心,擴(kuò)展接口為RegistryFactory、Registry和RegistryService??赡軟]有服務(wù)注冊中心,此時服務(wù)提供方直接暴露服務(wù)。
  5. 集群層(Cluster):封裝多個提供者的路由及負(fù)載均衡,并橋接注冊中心,以Invoker為中心,擴(kuò)展接口為Cluster、Directory、Router和LoadBalance。將多個服務(wù)提供方組合為一個服務(wù)提供方,實現(xiàn)對服務(wù)消費方來透明,只需要與一個服務(wù)提供方進(jìn)行交互。
  6. 監(jiān)控層(Monitor):RPC調(diào)用次數(shù)和調(diào)用時間監(jiān)控,以Statistics為中心,擴(kuò)展接口為MonitorFactory、Monitor和MonitorService。
  7. 遠(yuǎn)程調(diào)用層(Protocol):封將RPC調(diào)用,以Invocation和Result為中心,擴(kuò)展接口為Protocol、Invoker和Exporter。Protocol是服務(wù)域,它是Invoker暴露和引用的主功能入口,它負(fù)責(zé)Invoker的生命周期管理。Invoker是實體域,它是Dubbo的核心模型,其它模型都向它靠擾,或轉(zhuǎn)換成它,它代表一個可執(zhí)行體,可向它發(fā)起invoke調(diào)用,它有可能是一個本地的實現(xiàn),也可能是一個遠(yuǎn)程的實現(xiàn),也可能一個集群實現(xiàn)。
  8. 信息交換層(Exchange):封裝請求響應(yīng)模式,同步轉(zhuǎn)異步,以Request和Response為中心,擴(kuò)展接口為Exchanger、ExchangeChannel、ExchangeClient和ExchangeServer。
  9. 網(wǎng)絡(luò)傳輸層(Transport):抽象mina和netty為統(tǒng)一接口,以Message為中心,擴(kuò)展接口為Channel、Transporter、Client、Server和Codec。
  10. 數(shù)據(jù)序列化層(Serialize):可復(fù)用的一些工具,擴(kuò)展接口為`、 ObjectInput、ObjectOutput和ThreadPool。
4. Dubbo集群容錯方案

? 在微服務(wù)應(yīng)用中都是多實例部署,也就是說同一份代碼部署多臺機(jī)器或容器中,這樣做的好處是提高服務(wù)處理能力。同時由于集群部署,所以整個集群也有容錯的能力。當(dāng)我們在調(diào)用集群中一個實例時出錯,我們可以重試另外一個實例這樣大大提高了應(yīng)用的可靠性。假設(shè)系統(tǒng)沒有容錯處理能力那么即使有集群的部署在調(diào)用應(yīng)用失敗情況下不能重試其他實例,這樣可靠性大大降低,并極大的浪費系統(tǒng)資源.

在Dubbo中有6種容錯模式分別是:

Failover Cluster

失敗自動切換:當(dāng)我們在調(diào)用Dubbo服務(wù)時出現(xiàn)失敗,容錯策略會重試其它服務(wù)器 。

使用場景:對于一些必達(dá)性要求高的服務(wù)調(diào)用,但是服務(wù)提供方要求做冪等處理 。

Failfast Cluster

快速失敗:只發(fā)起一次調(diào)用,如果調(diào)用Dubbo服務(wù)失敗立即報錯。

使用場景:通常用于非冪等性的寫操作,比如新增記錄。

Failsafe Cluster

失敗安全:當(dāng)調(diào)用Dubbo服務(wù)出現(xiàn)異常時,直接忽略。

使用場景:通常用于運行數(shù)據(jù)丟失常見,例如:日志記錄等操作。

Failback Cluster

失敗自動恢復(fù):當(dāng)調(diào)用Dubbo服務(wù)失敗,后臺記錄失敗請求并定時重發(fā)。

使用場景:通常用于必達(dá)通知場景,例如:消息通知操作。

Forking Cluster

集群并行:并行調(diào)用多個Dubbo服務(wù),只要其中有一個成功即返回。

使用場景:通常用于從多個源獲取相同數(shù)據(jù),以獲取最快的響應(yīng)速度,例如:同時從多個備庫查詢數(shù)據(jù)。

Broadcast Cluster

集群廣播:循環(huán)調(diào)用所有Dubbo服務(wù)提供者,任意一臺報錯則報錯。

使用場景:通用用于向多個實例通知消息,例如:更新集群中所有應(yīng)用緩存或日志。

5. Zookeeper安裝 1.安裝

1.在local下創(chuàng)建zookeeper文件夾

2.上傳zookeeper文件到創(chuàng)建的文件夾

3.使用 tar -xzvf解壓zookeeper

4.進(jìn)入zookeeper的conf文件夾,復(fù)制zoo_sample.cfg為zoo.cfg,因為啟動時默認(rèn)會去找這個文件名

5.在解壓后的目錄中創(chuàng)建data文件夾

6.設(shè)置zoo.cfg文件,設(shè)置dataDir為創(chuàng)建的data文件夾路徑

7.進(jìn)入bin目錄,使用./zkServer.sh start啟動zookeeper服務(wù)

2.集群搭建

修改各個linux下的zoo.cfg配置文件,向文件中添加

server.1=192.168.25.100:2888:3888
server.2=192.168.25.101:2888:3888
server.3=192.168.25.102:2888:3888

其中1,2,3為各集群節(jié)點的id,需要在data目錄下創(chuàng)建myid文件并設(shè)置文件里面內(nèi)容為各個節(jié)點的id。

6. Spring整合Dubbo 6.1 Provider生產(chǎn)者

1.pom依賴

com.alibabadubbo2.6.0com.cauchohessian4.0.38org.apache.zookeeperzookeeper3.4.6com.github.sgroschupfzkclient0.1

2.spring整合dubbo配置文件

服務(wù)接口暴露注冊時,可采用dubbo的**@Service**注解進(jìn)行服務(wù)接口注冊

6.2 Consumer消費者

1.pom依賴

org.exampledubbo-provider1.0-SNAPSHOT  com.alibaba * com.alibabadubbo2.6.0com.cauchohessian4.0.38org.apache.zookeeperzookeeper3.4.6com.github.sgroschupfzkclient0.1

2.spring整合dubbo消費端配置文件

7. SpringBoot整合Dubbo 7.1 Provider生產(chǎn)者

1.pom依賴

4.0.0org.examplespringboot-dubbo-provider1.0-SNAPSHOTorg.springframework.bootspring-boot-starter-parent2.1.8.RELEASEorg.springframework.bootspring-boot-starter-webcom.alibaba.bootdubbo-spring-boot-starter0.2.1.RELEASEcom.alibabadubbo2.6.5com.cauchohessian4.0.38org.apache.zookeeperzookeeper3.4.6com.github.sgroschupfzkclient0.1org.apache.curatorcurator-framework4.1.0

2.yml核心配置文件

dubbo:
  application:
    name: dubbo_provider
  protocol:
    name: dubbo
    port: 20880
  registry:
    address: zookeeper://192.168.25.100:2181
    protocol: zookeeper
  scan:
    base-packages: com.li.service
spring:
  application:
    name: dubbo_provider

server:
  port: 8084

3.服務(wù)暴露注冊

package com.li.service.impl;


import com.alibaba.dubbo.config.annotation.Service;
import com.li.pojo.Goods;
import com.li.service.GoodsService;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;

@Service
@Component
public class GoodsServiceImpl implements GoodsService {@Override
    public void save() {System.out.println("save方法被遠(yuǎn)程調(diào)用了");
    }

    @Override
    public String get() {return "遠(yuǎn)程調(diào)用get方法";
    }

    @Override
    public Goods findGoods() {Goods goods = new Goods(1,"小米2",new BigDecimal(2333));
        return goods;
    }
}
7.2 Consumer消費者

1.pom依賴

4.0.0org.examplespringboot-dubbo-consumer1.0-SNAPSHOTorg.springframework.bootspring-boot-starter-parent2.1.8.RELEASEorg.springframework.bootspring-boot-starter-webcom.alibaba.bootdubbo-spring-boot-starter0.2.1.RELEASEcom.alibabadubbo2.6.5com.cauchohessian4.0.38org.apache.zookeeperzookeeper3.4.6com.github.sgroschupfzkclient0.1org.apache.curatorcurator-framework4.1.0

2.yml核心配置文件

dubbo:
  application:
    name: dubbo_consumer
  protocol:
    name: dubbo
    port: 20881
  registry:
    address: zookeeper://192.168.25.100:2181
    protocol: zookeeper
spring:
  application:
    name: dubbo_consumer

server:
  port: 8083

3.服務(wù)消費

package com.li.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.li.service.GoodsService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
public class TestController {@Reference
    private GoodsService goodsService;


    @RequestMapping("/aaa")
    public void test01(){String s = goodsService.get();
        System.out.println(s);
    }
}
8.Dubbo的Spi機(jī)制的過濾器擴(kuò)展

應(yīng)用:系統(tǒng)參數(shù)的過濾器校驗

1.方法調(diào)用時添加對應(yīng)的接口驗證參數(shù)

@Override
    public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {if(servletContext!=null&&contextRefreshedEvent.getApplicationContext().getParent()==null){servletContext.setAttribute("root",servletContext.getContextPath());
            //由于系統(tǒng)參數(shù)需要防止惡意調(diào)用修改,所以需要存一個令牌來進(jìn)行進(jìn)行驗證,當(dāng)調(diào)用放調(diào)用接口時,
            // 通過dubbo過濾器來驗證是否正確,正確則調(diào)用,否則拋出異常
            //獲取RPC上下文對象
            RpcContext context = RpcContext.getContext();
            context.setAttachment("systemConfigToken","dugasud78dt67q6d");
            //獲取數(shù)據(jù)庫系統(tǒng)參數(shù)賦值給配置文件
            ListconfigList = systemConfigService.findAllConfig();
            for (ConfigVo config : configList) {PropertiesUtils.setProp(config.getConfigname(),config.getConfigvalue().toString());
            }

        }
    }

2.被調(diào)用接口的接口攔截驗證

//dubbo過濾器,需要手動在xml中添加,不能使用@Component注解交給Spring,不生效,且不寫全包名
@Activate(group = "provider")
public class RequestAuthFilter implements Filter {@Override
    public Result invoke(Invokerinvoker, Invocation invocation) throws RpcException {//獲取上下文對象,判斷傳過來的令牌是否正確
        RpcContext context = RpcContext.getContext();
        String tokenValue = context.getAttachment("systemConfigToken");
        if(!"dugasud78dt67q6d".equals(tokenValue)){//不相等拋異常
            throw new RpcException("非法調(diào)用請求");
        }
        //調(diào)用
        return invoker.invoke(invocation);
    }
}

3.驗證接口的配置

/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter

requestAuthFilter=com.li.config.service.impl.RequestAuthFilter

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前文章:2023-01-16Dubbo+Zookeeper集成-創(chuàng)新互聯(lián)
文章源于:http://weahome.cn/article/ihgih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部