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.结束语

  • 相关阅读:
    C# 不用添加WebService引用,调用WebService方法
    贪心 & 动态规划
    trie树 讲解 (转载)
    poj 2151 Check the difficulty of problems (检查问题的难度)
    poj 2513 Colored Sticks 彩色棒
    poj1442 Black Box 栈和优先队列
    啦啦啦
    poj 1265 Area(pick定理)
    poj 2418 Hardwood Species (trie树)
    poj 1836 Alignment 排队
  • 原文地址:https://www.cnblogs.com/wenxiangchen/p/11285736.html
Copyright © 2011-2022 走看看