Dubbo学习知识要点

97 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1. 分布式发展演变

在这里插入图片描述 单一应用架构→垂直应用架构→分布式服务架构→流动计算架构

2. RPC

  • 定义:RPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式,他是一种技术的思想,而不是规范。它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
  • 核心模块:通讯,序列化
  • 基本原理在这里插入图片描述 在这里插入图片描述

3. Dubbo

  • 核心能力:面向接口远程调用、智能容错和负载均衡、服务注册和发现 在这里插入图片描述 服务提供者:暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。 服务消费者:基于软负载均衡算法,选一台提供者进行调用,调用失败,再选另一台调用 监控中心:提供者和消费者定时每分钟发送一次数据到监控中心 注册中心:返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。

  • 工作原理 在这里插入图片描述

安装zookeeper

  • 下载地址archive.apache.org/dist/zookee…
  • 修改zoo.cfg配置文件:将conf下的zoo_sample.cfg复制一份改名为zoo.cfg dataDir=./ 临时数据存储的目录(可写相对路径) clientPort=2181 zookeeper的端口号
  • 运行:zkServer.cmd

安装dubbo管理控制台

  • 下载地址github.com/apache/dubb…
  • maven安装:进入dubbo-admin目录,cmd下输入mvn clean package
  • 启动:在生成的target目录下cmd,输入java -jar dubbo-admin-0.0.1-SNAPSHOT.jar
  • 验证:浏览器输入localhost:7001,账号密码默认都为root(可在application.properties查看端口号和密码)

dubbo配置

  1. 配置原则:JVM启动 -D > XML配置 > properties
  2. 重试次数reties:一般与timeout配合使用,当调用服务失败时,再接着调用,不包含第一次(设置为2,一共执行3次)
  3. 超时时间timeout:设置调用服务端响应的超时时间 / 连接zookeeper的响应时间
  4. 配置覆盖原则:方法级别>引用级别>统一配置,消费者>提供者
  5. 多版本version:在低压力时间段,先升级一半提供者为新版本,再将所有消费者升级为新版本,然后将剩下的一半提供者升级为新版本

4. 高可用

zookeeper注册中心宕机,还可以消费dubbo暴露的服务

  • 数据库宕掉hou,注册中心仍然能通过缓存提供服务列表查询,但不能注册新服务
  • 注册中心对等集群,任何一台宕掉后,将自动切换到另一台
  • 注册中心全部宕掉后,提供者和消费者仍能通过本地缓存进行通讯
  • 服务提供者无状态,任意一台宕掉后,不影响使用
  • 服务提供者全部宕掉后,服务消费者无法使用,并无限次重连等待服务提供者恢复

5. 负载均衡(Load Balance)

  • 负载均衡策略: 随机(默认) 轮询 最少活跃调用数:慢的提供者接收更少的请求 一致性hash:相同参数的请求总是发到同一个提供者

6. 服务降级

  • 定义:当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。
  • 向注册中心写入动态配置覆盖策略
RegistryFactory registryFactory = ExtensionLoader.getExtensionLoader(RegistryFactory.class).getAdaptiveExtension();
Registry registry = registryFactory.getRegistry(URL.valueOf("zookeeper://10.20.153.10:2181"));
registry.register(URL.valueOf("override://0.0.0.0/com.foo.BarService?category=configurators&dynamic=false&application=foo&mock=force:return+null"));
  • 应用: 1.消费者调用提供者的方法都直接返回null值,不发起远程调用 2.满足某个条件下,调用失败后返回null

7. 集群容错

  • 定义:当集群调用失败时,dubbo提供了多种容错方式
  • Failover Cluster 失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries="2" 来设置重试次数(不含第一次)。
  • Failfast Cluster 快速失败,只发起一次调用,失败立即报错。通常用于非幂等性的写操作,比如新增记录。
  • Failsafe Cluster 失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。
  • Failback Cluster 失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。
  • Forking Cluster 并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。可通过 forks="2" 来设置最大并行数。
  • Broadcast Cluster 广播调用所有提供者,逐个调用,任意一台报错则报错 [2]。通常用于通知所有提供者更新缓存或日志等本地资源信息。
  • 集群模式配置 按照以下示例在服务提供方和消费方配置集群模式 <dubbo:service cluster="failsafe" />或<dubbo:reference cluster="failsafe" />