zoukankan      html  css  js  c++  java
  • 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.结束语

  • 相关阅读:
    IT开发者对Mac钟爱
    POJ 3486 &amp; HDU 1913 Computers(dp)
    基础排序算法
    LeetCode 70:Climbing Stairs
    Qt自己定义事件实现及子线程向主线程传送事件消息
    maven自己主动编译,解决你每次代码改动须要又一次编译的繁琐
    Unity定制 Image、Text的对象生成
    iOS学习4_UITableView的使用
    GTK+重拾--09 GTK+中的组件(一)
    Architecting Android…The clean way?
  • 原文地址:https://www.cnblogs.com/wenxiangchen/p/11285736.html
Copyright © 2011-2022 走看看