Dubbo的基本介绍和搭建一个Dubbo环境

本文深入解析Dubbo分布式服务框架,介绍其核心组件、架构特点及如何搭建简易Dubbo服务。涵盖服务提供者与消费者的配置流程,以及Zookeeper在服务注册与发现中的应用。
什么是Dubbo

Dubbo是一个分布式服务框架,提供了高性能以及透明化的RPC远程服务调用解决方法,以及SOA服务治理方案。

Dubbo的核心部分:
远程通信:提供了高性能以及透明化的RPC远程服务调用。
服务治理:提供了包括集群容错、服务自动发现、负载均衡等服务治理方案。

Dubbo的架构:

在这里插入图片描述
上图是dubbo的架构图,有三种连接线,绿色实线代表同步操作,绿色虚线代表异步操作,蓝色虚线代表初始化操作。

由图可知:共有5种角色:
Provider:暴露服务的服务提供方。
Consumer:调用(消费)服务的服务消费方。
Registry:服务注册与发现的服务注册中心。
Monitor:统计服务调用次数和调用时间的监控中心。
Container:服务提供方的服务运行容器,可以是spring容器、jetty容器等。

启动调用步骤(对着图):

  1. 服务容器负责启动、加载、运行服务提供者,服务提供者是运行在服务容器中的。
  2. 服务提供者在启动时,向注册中心注册(发布)自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,因为消费者与注册中心使用的是长连接,并且消费者订阅了对应的数据,所以当注册中心被订阅的数据(主题)变更时,消费者会收到通知,做出相应反应(比如把变更后的数据拉取到本地进行更新)。
  5. 服务消费者调用服务提供者,从服务提供者的地址列表中,基于软负载均衡算法,选择一台提供者进行调用。如果调用失败,再选择另一台提供者进行调用。
  6. 服务消费者和提供者,在内存中的累计调用次数和调用时间,定时每分钟发送一次数据给监控中心。
Dubbo架构的特点:
  • 连通性:
  • 注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。
  • 监控中心负责统计各服务调用次数,调用时间等,统计先在内存汇总后每分钟一次发送到监控中心服务器,并以报表展示。
  • 服务提供者向注册中心注册所提供的服务,并汇报调用时间到监控中心,此时间不包含网络开销,也就是只包含服务提供方接收到消费端的请求后开始,直到执行完逻辑返回响应给消费端时的时间。
  • 服务消费端向注册中心获取所需的服务地址列表,并根据负载均衡算法直接调用提供者,汇报调用时间到监控中心,此时间包含网络开销,也就是记录请求发起开始,直到接收到响应之间的时间。
  • 注册中心、服务提供者、服务消费者三者之间的连接都是长连接,与监控中心的连接时短连接。
  • 注册中心通过长连接感知服务提供者的状态,服务提供者发生宕机,注册中心立刻发送事件给消费者。
  • 注册中心和监控中心全部宕机也不会影响已运行的服务提供者和服务消费者,因为消费者在本地缓存了服务提供者的服务地址列表。并通过订阅进行地址列表及时更新。
  • 注册中心和监控中心都是可选的,也就是可以基于dubbo的分布式服务系统可以不需要注册中心和监控中心,消费端和服务端可以直连,并且不对服务进行监控。只是没有注册中心将难以维护复杂的地址列表和服务之间的依赖关系。
  1. 健壮性:
  • 监控中心宕机后不会影响服务的使用,只是会丢失部分的采样数据。
  • 注册中心对等集群,任意一台宕机后,自动切换另一台。
  • 注册中心全部宕机后,服务提供者和消费者仍能通过本地缓存的地址列表进行通信。
  • 服务提供者是无状态的,也就是不会保存服务状态,也就是说我们不应该在服务提供方的进程(JVM)里缓存任意数据,导致同一提供者的不同实例状态不一样。任意一台宕机不影响使用。
  • 服务提供者全部宕机后,服务消费者应用将无法使用,并无限次重连等待服务提供者恢复。
  1. 伸缩性:
  • 服务提供者无状态,可动态增加、缩减机器部署实例,注册中心将会把增加、减少后的地址信息推送给消费者。
  1. 升级性:
    当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。额 这个 我还没到达那个层面。
搭建一个简易的Dubbo服务
首先搭建一个服务提供者工程:

Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可。

需要依赖:

            <!-- dubbo依赖 2.7以后 maven仓库 变成了apache的  之前的是com.alibaba的 -->
            <dependency>
                <groupId>org.apache.dubbo</groupId>
                <artifactId>dubbo</artifactId>
                <version>2.7.2</version>
                <exclusions>
                    <!-- 排除dubbo默认的spring依赖 -->
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-context</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-beans</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-aop</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-core</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework</groupId>
                        <artifactId>spring-expression</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>

            <!-- spring依赖 -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>5.1.9.RELEASE</version>
            </dependency>
            <dependency>
                <groupId>org.springframew
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值