美文网首页
分布式构架之Dubbo

分布式构架之Dubbo

作者: Demon先生 | 来源:发表于2020-05-08 10:18 被阅读0次

1. 什么是Dubbo

Dubbo是一款开源的高性能、轻量级的服务框架,主要提供三大核心能力:远程接口调用的方法、智能容错和负载均衡以及服务的自动化注册和调用。

随着互联网的发展,网站应用的使用量和访问量不断增大,需求量的不断增加,而面向网站应用的各类构架也再不断更新迭代,下图是目前主流构架的迭代图:


image.png
  • 单一应用架构 -------- 数据访问框架(ORM)

    当网站流量很小时,往往只需一个应用,就可以将所有功能都部署在一起,这种模式被称为ORM框架。

  • 垂直应用架构 -------- Web****框架(MVC)

    当访问量逐渐增大时,单一应用已经无法满足当前需求,此时则需要将一个应用拆分成互不相关的几个应用,以提升服务器效率,此种模式被称之为Web框架(MVC)。

  • 分布式服务架构 -------- 分布式服务框架(RPC)

    当垂直应用越来越多时,应用之间的交互也愈发增多,此时则需要把核心的业务逻辑抽取出来,作为独立的服务,形成一套稳定的服务中心,是前端访问的效率变得更快更高,而这种框架被称为RPC框架。

  • 流动计算架构 --------- 资源调度和治理中心(SOA)

    当独立的服务越来越多时,小服务的资源浪费问题逐渐出现,此时则需要增加一个服务调度中心来实时管理服务集群,提高集群的使用效率,此时,这种构架被称为SOA。

在上面的四种构架模式中,其中Dubbo就是属于资源调度和治理中心的管理工具,可以统计和管理服务之间相互调用情况,比如调用频次、调用对象、调用时间等。

2. Dubbo的架构

image.png
  • Provider: 服务提供方暴露服务接口。
  • Consumer: 服务消费方调用远程服务接口。
  • Registry: 服务接口的注册中心与发现中心。
  • Monitor: 服务接口调用的监控中心。
  • Container: 服务运行容器。

3. Dubbo配置操作

Dubbo的配置操作可结合Spring的配置文件进行配置,针对于服务接口的暴露,在Spring中以供有三种配置模式,第一种未使用到Dubbo,直接通过Spring的方式进行服务暴露;第二种使用到Dubbo,但未使用到注册中心,服务提供者和服务消费者在同一服务器中运行,进行配置;第三种使用到Dubbo,同时也使用到注册中心。

3.1. 单一工程配置

在单一工程中spring的配置文件中添加类似于下面的语句,语句表示为配置服务bean,并开放接口。

<bean id="xxxService" class="com.xxx.XxxServiceImpl" />
<bean id="xxxAction" class="com.xxx.XxxAction">
    <property name="xxxService" ref="xxxService" />
</bean>

3.2. 多个工程服务配置

将上面的配置内容进行拆分,将服务定义部分放在服务提供方,将服务引用部分放在服务消费方。并在提供方增加暴露服务配置<dubbo:service>,在消费方增加引用服务配置<dubbo:reference>,在不使用注册中心的情况下,配置如下。

服务层发布服务:

<dubbo:application name="xxx "/>
<!-- 下面的配置就是取消使用注册中心 -->
<dubbo:registry address="N/A"/>
<!--<dubbo:protocol name="dubbo" port="20880" ,不使用注册中心后需要在配置中加入host />-->
<dubbo:protocol port="20880" name="dubbo" host="127.0.0.1" />
<!-- 增加暴露远程服务配置 -->
<dubbo:service interface="com.xxx.XxxService" ref="xxxServiceImpl" />

表现层调用服务:

<dubbo:application name="xxx "/>
<!-- 下面的配置就是取消使用注册中心 -->
<dubbo:registry address="N/A"/>
<!-- 不使用注册中心的时候一定配置url,不然找不到的 -->
<dubbo:reference id="xxxService" interface="com.xxx.XxxService" timeout="300000" url="dubbo://127.0.0.1:20880"/>

3.3. 通过注册中心服务配置

3.3.1 注册中心zookeeper介绍

注册中心主要负责服务地址的注册与查找,服务提供者和服务消费者只会在启动时与注册中心进行交互,注册中心不转发请求,只发送服务对应调用地址。而dubbo-2.3.3以上的版本,官方建议使用zookeeper作为注册中心,具有工业强度较高、稳定性好等特点,可用于广泛的生产环境。

3.3.2 zookeeper的安装

第一步:在linux环境下,安装jdk

第二步:下载zookeeper压缩包,解压

第三步:将conf文件夹下zoo_sample.cfg复制一份,改名为zoo.cfg

第四步:修改配置dataDir属性,指定一个真实目录(进入zookeeper解压目录,创建data目录:mkdir data)

image.png

第五步:执行zookeeper相关命令,此时如果显示mode: standalone,则表明启动成功。

启动zookeeper:./zkServer.sh start

 关闭zookeeper:./zkServer.sh stop

查看zookeeper状态:./zkServer.sh status
image.png

注意:在启动前后,需关闭防火墙,以免禁止访问。可以通过命令:

chkconfig iptables off 永久关闭防火墙。

3.3.3 配置Dubbo

启动zookeeper后,需要在spring配置文件中,进行Dubbo配置,首先在服务层中Dubbo进行远程注册访问地址并暴露接口,然后再在表现层中也注册访问地址并进行接口调用。

服务层发布服务:

<!—配置服务实体类扫描包 -->
<context:component-scan base-package="com.xx.service.impl"/>
<dubbo:protocol name="dubbo" port="20886"/>
<dubbo:application name="xxx "/>
<!-- 注册远程zookeeper管理接口 -->
<dubbo:registry protocol="zookeeper" address="192.168.25.128:2181" />
<!-- 增加暴露远程服务配置 -->
<dubbo:service interface="com.xxx.XxxService" ref="xxxServiceImpl" />

表现层调用服务:

<!—配置Controller扫描包 -->
<context:component-scan base-package="com.xx.controller"/>
<dubbo:application name="xxx "/>
<!-- 增加引用远程服务配置 -->
<dubbo:reference id="xxxService" interface="com.xxx.XxxService" timeout="300000"/>
<!-- 注册远程zookeeper管理接口 -->
<dubbo:registry protocol="zookeeper" address="192.168.25.128:2181" />

3.3.4 批量注册和调用服务

该部分主要说明,如何批量注册服务和消费者调用服务。需要注意的是,实现批量注册需要在服务实现类上添加dubbo的@Service注解,而不是spring框架的。而在消费者调用服务,则需要使用dubbo的@Reference注解,引用服务。

服务层发布服务:

<dubbo:protocol name="dubbo" port="20886"/>
<dubbo:application name="xxx "/>
<!-- 注册远程zookeeper管理接口 -->
<dubbo:registry protocol="zookeeper" address="192.168.25.128:2181" />
<!—设置远程调用的服务实现类包 -->
<dubbo:annotation package="com.pinyougou.sellergoods.service.impl" />  

表现层调用服务:

<!-- 引用dubbo 服务 -->
<dubbo:application name="xxxx" />
<dubbo:registry protocol="zookeeper" address="192.168.25.128:2181" />
<!—设置调用服务的contoller包-->
<dubbo:annotation package="com.pinyougou.manager.controller" />

4. 使用Maven开发添加依赖

4.1. Dubbo相关依赖

在pom.xml文件中加入dubbo相关的jar包依赖,注意在添加的时候需排除spring的部分依赖,以免产生jar冲突而导致编译失败。

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.5.3</version>
            <!-- 排除依赖 -->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.jboss.netty</groupId>
                    <artifactId>netty</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

4.2. zookeeper相关依赖

在pom.xml文件中加入zookeeper相关的jar包依赖。

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.7</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>

5. Dubbo监控中心

5.1. 安装并配置

第一步:下载dubbo-admin的包

第二步:编译dubbo-admin工程,打成war包

第三步:把编译后的war包放入tomcat的webapps目录下

第四步:如果监控中心和注册中心在同一台服务器上,可以不需要任何配置。如果不在同一台服务器,需要修改配置文件,进入 WEB-INF 目录查看或修改文件 dubbo.properties
apache-tomcat-7.0.47/webapps/dubbo-admin/WEB-INF/dubbo.properties

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

5.2. 启动并访问

进入tomcat目录下的bin目录下启动tomcat,sh startup.sh

启动成功之后在浏览器中访问ip:8080/dubbo-admin

注意:如果要运行监控中心,必须先启动zookeeper. 监控中心,对于dubbo的服务调用来说不是必须的,不安装监控中心也可以运行。而安装的目的是为了更好对服务的调用的次数进行统计,方便开发者进行管理。

文档下载地址:

https://wenku.baidu.com/view/3edd5f3e03d276a20029bd64783e0912a3167cfc

相关文章

网友评论

      本文标题:分布式构架之Dubbo

      本文链接:https://www.haomeiwen.com/subject/ypmxnhtx.html