Dubbo

一、Dubbo基础

1.分布式介绍

1)分布式的定义

2)应用架构的演变

ORM(单一应用)->MVC(垂直应用架构)->RPC(远程过程调用)->SOA(面向服务)->微服务

分布式系统组合:1.zookeeper+dubbo组合 2.springboot+springcloud组合

注册中心:zookeeper

RPC框架(远程调用框架):dubbo,ali开源的分布式服务框架。

2.远程调用方式

2.1RPC(长连接:性能好):dubbo

  跨操作系统在同一编程语言内使用

2.2http(三次握手):httpClient

  跨系统跨编程语言的远程调用框架

二、dubbo介绍

1 是一款高性能的Java RPC框架。核心功能:面向接口的远程方法调用、智能容错和负载均衡、服务自动注册和发现。

2 设计架构

节点角色说明:

  Provider: 暴露服务的服务提供方。
  Consumer: 调用远程服务的服务消费方。
  Registry: 服务注册与发现的注册中心。
  Monitor: 统计服务的调用次调和调用时间的监控中心。
  Container: 服务运行容器。
调用关系说明:

  0) 服务容器负责启动,加载,运行服务提供者。
  1) 服务提供者在启动时,向注册中心注册自己提供的服务。
  2) 服务消费者在启动时,向注册中心订阅自己所需的服务。
  3) 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  4)服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  5) 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

3 zookeeper注册中心

4 管理控制台(监控中心)

dubbo-admin:dubbo控制台。图形化服务管理页面,安装时需要指定注册中心地址,即可从注册中心获取到所有的提供者/消费者进行配置管理。

5 创建提供者消费者工程

6 创建提供者配置和测试

7 创建消费者配置和测试

 

8 监控中心

dubbo-monitor-simple:简单的监控中心。

三、dubbo与spring-boot整合

1.整合步骤

1)dubbo-spring-boot-starter

2)application.properties配置相关配置

服务提供者配置:

3)@EnableDubbo:开启基于注解的dubbo功能

@Service:dubbo service,提供者, 暴露接口

@Reference:消费者

 2. dubbo.properties

-D(虚拟机参数) > xml > properties

3.启动检查

check="false"

<dubbo:consumer check="false" />

4.超时配置和覆盖关系配置

timeout

1)精确优先:方法>接口>全局配置

2)消费者优先:消费方>提供方

5.重试次数

6 多版本

7.本地存根

8.dubbo与springboot整合的三种方式

8.1 常用

1)dubbo-spring-boot-starter

2)application.properties配置相关配置

3)@EnableDubbo:开启基于注解的dubbo功能

@Service:dubbo service,提供者, 暴露接口

@Reference:消费者

8.2 dubbo.xml配置文件

 1)dubbo-spring-boot-starter

 2)使用ImportResource导入dubbo.xml配置文件

8.3 使用注解API的方式

四、dubbo高可用

1.zookeeper宕机与dubbo直连

通过本地缓存通讯

2.负载均衡机制 

 1)轮询(可加权重)

 2)随机(可加权重)

 3)最小连接数

 4)一致性hash

3.服务降级

1)mock=force:return+null。直接返回null

2)mock=fail:return+null。调用失败返回null

4.集群容错和整合Hystrix

 4.1集群容错模式

1) failover cluster:失败自动切换 默认

2) failfast:快速失败,非幂等性

3) failsafe:失败安全

4) failback:失败自动恢复

5) forking:并行调用多个服务器

6) broadcast:广播调用所有提供者

 4.2集群容错配置

1)消费者或提供者配置

<dubbo:service cluster="failsafe" />或

<dubbo:reference cluster="failsafe" />

4.3整合Hystrix 默认

1) 导入hystrix的依赖

spring-cloud-starter-netflix-hystrix

2)@EnableHystrix:启用

五、Dubbo原理

1.RPC和Netty原理

 1.1 RPC原理

 1)RPC调用流程图:

 2)rpc实现技术:

2.1)动态代理 
生成 rpc-client和rpc-server 需要用到 Java 动态代理技术 ,我们可以使用JDK原生的动态代理机制,可以使用一些开源字节码工具框架 如:CgLib、Javassist等。

2.2)序列化 
为了能在网络上传输和接收 Java对象,我们需要对它进行 序列化和反序列化操作。 
* 序列化:将Java对象转换成byte[]的过程,也就是编码的过程; 
* 反序列化:将byte[]转换成Java对象的过程;

可以使用Java原生的序列化机制,但是效率非常低,推荐使用一些开源的、成熟的序列化技术,例如:protobuf、Thrift、hessian、Kryo、Msgpack

关于序列化工具性能比较可以参考:jvm-serializers

2.3)NIO 
当前很多RPC框架都直接基于netty这一IO通信框架,比如阿里巴巴的HSF、dubbo,Hadoop Avro,推荐使用Netty 作为底层通信框架。

2.4)服务注册中心 
可选技术: 
* Redis 
* Zookeeper 
* Consul 
* Etcd

1.2 Netty通信原理 NIO

dubbo通信是通过netty框架。

NIO:同步非阻塞,多个通道,可以多路复用。

2.架构设计

3.标签解析

4.服务暴露流程

5.服务应用流程

6.服务调用流程

7.结束语

原文地址:https://www.cnblogs.com/wenxiangchen/p/11285736.html