Dubbo環境搭建

背景

隨着互聯網的發展,網站應用的規模不斷擴大,常規的垂直應用架構已無法應對,分佈式服務架構以及流動計算架構勢在必行,亟需一個治理系統確保架構有條不紊的演進。
在這裏插入圖片描述

單一應用架構
當網站流量很小時,只需一個應用,將所有功能都部署在一起,以減少部署節點和成本。此時,用於簡化增刪改查工作量的數據訪問框架(ORM)是關鍵。

垂直應用架構
當訪問量逐漸增大,單一應用增加機器帶來的加速度越來越小,提升效率的方法之一是將應用拆成互不相干的幾個應用,以提升效率。此時,用於加速前端頁面開發的Web框架(MVC)是關鍵。

分佈式服務架構
當垂直應用越來越多,應用之間交互不可避免,將核心業務抽取出來,作爲獨立的服務,逐漸形成穩定的服務中心,使前端應用能更快速的響應多變的市場需求。此時,用於提高業務複用及整合的分佈式服務框架(RPC)是關鍵。

流動計算架構
當服務越來越多,容量的評估,小服務資源的浪費等問題逐漸顯現,此時需增加一個調度中心基於訪問壓力實時管理集羣容量,提高集羣利用率。此時,用於提高機器利用率的資源調度和治理中心(SOA)是關鍵。

SOA:服務治理-- 最主要就是服務之間的治理(治理基本上要做成運行時治理)

dubbo架構

在這裏插入圖片描述
節點角色說明

節點 角色說明
Provider 暴露服務的服務提供方
Consumer 調用遠程服務的服務消費方
Registry 服務註冊與發現的註冊中心
Monitor 統計服務的調用次數和調用時間的監控中心
Container 服務運行容器

調用關係說明
0. 服務容器負責啓動,加載,運行服務提供者。
1.服務提供者在啓動時,向註冊中心註冊自己提供的服務。
2.服務消費者在啓動時,向註冊中心訂閱自己所需的服務。
3.註冊中心返回服務提供者地址列表給消費者,如果有變更,註冊中心將基於長連接推送變更數據給消費者
4.服務消費者,從提供者地址列表中,基於軟負載均衡算法,選一臺提供者進行調用,如果調用失敗,再選另一臺調用。
5.服務消費者和提供者,在內存中累計調用次數和調用時間,定時每分鐘發送一次統計數據到監控中心。

環境搭建

安裝單機版zk
windows
啓動 zkServer.cmd
zk客戶端查看:zkCli.cmd

linux
啓動zookeeper:bin/zkServer.sh start
關閉zookeeper:bin/zkServer.sh stop
查看zookeeper狀態:bin/zkServer.sh status
dubbo 服務端

dubbo相關依賴

 <!--dubbo start-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>dubbo</artifactId>
                <version>${dubbo.version}</version>
            </dependency>

            <!--我這裏使用zookeeper作爲dubbo的註冊中心-->
            <!--dubbo2.6以前的版本使用zkclient操作zookeeper-->
            <!--dubbo2.6及以後的版本使用curator操作zookeeper-->
            <!--根據dubbo的版本二選其一-->
            <dependency>
                <groupId>org.apache.curator</groupId>
                <artifactId>curator-framework</artifactId>
                <version>${curator.version}</version>
            </dependency>
            <!--<dependency>-->
            <!--<groupId>com.101tec</groupId>-->
            <!--<artifactId>zkclient</artifactId>-->
            <!--<version>0.11</version>-->
            <!--</dependency>-->
            <!--dubbo end-->

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">

    <!--1、指定當前服務/應用的名字(同樣的服務名字相同,不要和其它的服務同名)-->
    <dubbo:application name="user-provider"/>

    <!--2、指定註冊中心的位置(註冊中心不同,服務地址的寫法不同)-->
    <dubbo:registry address="zookeeper://127.0.0.1:2181"/>

    <!--3、指定通信規則(通信協議&通信端口)-->
    <dubbo:protocol name="dubbo" port="20880"/>

    <!--4、聲明需要暴露的服務接口,ref屬性要指向容器中的接口實現對象-->
    <dubbo:service ref="userService" interface="com.myke.consumer.api.UserService"/>

    <!--5.服務實現-->
    <bean id="userService" class="com.myke.provider.service.UserServiceImpl"/>
</beans>

服務端啓動

@Slf4j
public class ProviderApplication {
    static {
        //加載日載
        System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY, "logback-spring.xml");
    }

    public static void main(String[] args) throws IOException {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[]{
                        "dubbo-provider.xml"});
        log.info(context.getDisplayName() + ": here");
        context.start();
        log.info("userService beanName:[{}]", context.getBeanNamesForType(UserServiceImpl.class));

        log.info("ProviderApplication 服務已經啓動...");
        System.in.read();
    }
}

查看 dubbo 在zk上的註冊的服務

[zk: localhost:2181(CONNECTED) 1] ls /dubbo
[com.myke.consumer.api.UserService]

參考

Dubbo註冊中心Zookeeper安裝步驟
dubbo官網手冊

發佈了19 篇原創文章 · 獲贊 2 · 訪問量 1416
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章