Dubbo分布式服务框架

Dubbo分布式服务框架

 

 

1    Dubbo 介绍

 

Dubbo 是阿里巴巴公司开源的一个高性能优秀的分布式服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring 框架无缝集成。Dubbo 框架,是基于Spring容器运行的

Dubbo是一款高性能、轻量级的开源Java RPC(Java远程过程调用协议)框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现

 

官方网站 : http://dubbo.apache.org/

 

阿里巴巴已经将 dubbo 框架捐献给了 Apache 软件基金会

 

 

  1. 单体架构

 

单体架构也称之为单体系统或者是单体应用。就是一种把系统中所有的功能、模块耦合在一个应用中的架构方式。其优点为:项目易于管理、部署简单。缺点:测试成本高、可伸缩性差、可靠性差、迭代困难、跨语言程度差、团队协作难

 

3    SOA 架构即面向服务架构(Service-Oriented Architecture)

 

面向服务的架构(SOA)是一个组件模型,它将应用程序拆分成不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。

 

4    RPC 远程过程调用协议 (Remote Procedure Call Protocol)

 

远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务(云服务),而不需要了解底层网络技术的协议。RPC 协议假定某些传输协议的存在,如 TCP 或 UDP,为通信程序之间携带信息数据。在 OSI 网络通信模型中,RPC 跨越了传输层和应用层。RPC 使得开发包括网络分布式多程序在内的应用程序更加容易。

 

二、    Dubbo 框架结构

 

 

1    Dubbo 角色介绍

 

Dubbo分布式服务框架

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1Provider:暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方

2Registry:服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心。

3Container: 服务运行容器

 

Dubbo的调用关系

  1、服务容器负责启动,加载,运行服务提供者。 
  2、服务提供者在启动时,向注册中心注册(上传)自己提供的服务。 
  3、服务消费者在启动时,向注册中心订阅(获取)自己所需的服务。

4、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。 
  5、服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。 
  6、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Dubbo 架构图的执行流程

 

 

Dubbo分布式服务框架

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.1 Dubbo 执行流程

 

0 start: 启动 Spring 容器时,自动启动 Dubbo 的 Provider

 

  1. register: Dubbo 的 Provider 在启动后自动会去注册中心注册内容.注册的内容包括: 1.1 Provider 的 IP

 

1.2 Provider 的端口.

 

1.3 Provider 对外提供的接口列表(哪些方法.哪些接口类)

 

1.4 Dubbo 的版本.

 

1.5 访问 Provider 的协议.

 

2 subscribe: 订阅.当 Consumer 启动时,自动去 Registry 获取到所已注册的服务的信息.

 

3 notify: 通知.当 Provider 的信息发生变化时, 自动由 Registry 向 Consumer 推送通知.

 

4 invoke: 调用. Consumer 调用 Provider 中方法

 

4.1  同步请求.消耗一定性能.但是必须是同步请求,因为需要接收调用方法后的结

 

果.

 

5 count:次数. 每隔 1 分钟,provoider 和 consumer 自动向 Monitor 发送访问次数.Monitor进行统计.

 

3    Dubbo 支持的协议

 

 

3.1 Dubbo 协议(官方推荐协议)

 

优点:

 

采用 NIO 复用单一长连接,并使用线程池并发处理请求,减少握手和加大并发效率,性能较好(推荐使用)

 

缺点:

 

大文件上传时,可能出现问题(不使用 Dubbo 文件上传)

 

3.2 RMI(Remote Method Invocation)远程方法调用协议

 

  1. 优点:

 

JDK 自带的能力。可与原生 RMI 互操作,基于 TCP 协议

 

  1. 缺点:

 

偶尔连接失败.

 

3.3 Hessian 协议

 

  1. 优点:

 

可与原生 Hessian 互操作,基于 HTTP 协议

 

  1. 缺点:

 

    • hessian.jar 支持,http 短连接的开销大

 

  1. Dubbo 支持的注册中心

 

 

4.1 Zookeeper(官方推荐)

 

    1. 优点:

 

支持分布式.很多周边产品.

 

    1. 缺点:

 

受限于 Zookeeper 软件的稳定性.Zookeeper 专门分布式辅助软件,稳定较优

 

4.2 Multicast(组播)注册中心

 

 

  1. 优点:

去中心化,不需要单独安装软件.

 

  1. 缺点:

 

2.2.1 Provider 和 Consumer 和 Registry 不能跨机房(路由)

 

4.3 Redis(全称:Remote Dictionary Server 远程字典服务)

 

  1. 优点:

 

支持集群,性能高

 

  1. 缺点:

 

要求服务器时间同步.否则可能出现集群失败问题.

 

4.4 Simple

 

  1. 优点:

 

标准 RPC 服务.没有兼容问题

 

  1. 缺点:

 

不支持集群.

 

三、    Dubbo 入门案例

 

 

1    安装 Zookeeper

 

2    创建 Provider

 

 

2.1 创建工程

 

图解:Dubbo分布式服务框架

 

 

 

四、    Dubbo 实战案例

 

  1. 案例介绍

 

 

1.1 需求:完成对用户表的 CRUD 操作

 

 

1.2 项目架构方式:SOA 面向服务架构

 

 

1.3 技术选型:MavenSpringMVCSpringMybatisDubboZookeeperMySQL

 

 

 

spring:

  profiles:

    active: mapper

dubbo:

  application:

    name: mymaven_provider

  registry:

    address: zookeeper://192.168.159.162:2181?backup=192.168.159.162:2182,192.168.159.162:2183 #zookeeper集群

#    address: zookeeper://192.168.159.162:2181  #单机

    protocol:

      name: dubbo

      port: '20882' #设置访问dubbo的端口,默认的20880有可能被占用