文档章节

dubbo源代码解析之-集群容错

yiduwangkai
 yiduwangkai
发布于 2017/05/16 18:18
字数 539
阅读 63
收藏 0

Failover Cluster:失败自动切换,当出现失败,重试其它服务器,通常用于读操作(推荐使用)

可通过retries="2"来设置重试次数(不含第一次)

Failfast Cluster:快速失败,只发起一次调用,失败立即报错,通常用于非幂等性的写操作

Failsafe Cluster:失败安全,出现异常时,直接忽略,通常用于写入审计日志等操作

Failback Cluster:失败自动恢复,后台记录失败请求,定时重发,通常用于消息通知操作

Forking Cluster:并行调用多个服务器,只要一个成功即返回,通常用于实时性要求较高的读操作

可通过forks="2"来设置最大并行数。

Broadcast Cluster:广播调用所有提供者,逐个调用,任意一台报错则报错,通常用于更新提供方本地状态

下面我们来看一下UML图

                                                   图1

                                                   图2

图1和图2的关系,在这里可以理解为是使用了装饰器模式,根据配置,通过cluster接口找对应的实现,在具体的实现中,在将任务分配给收下的小弟,这里的小弟就是具体的各个Invoker

下面先来看下官方文档给出的调用流程图

                                            图3

该图可以这样理解是MockClusterInvoker-->FailoverInvoker/FailfastInvoker/FailsafeInvoker/FailbackInvoker/ForkingInvoker-->Directory-->Router--->loadBalance-->InvokerWrapper---->FutureFilter

下面先以Dubbo默认的FailoverInvoker,失败切换的策略进行详细讲解

从代码可以看出来,其实是循环一个可调用的列表,当一次调用失败后,就切换到下一个

下面来看下快速失败FailfastInvoker和失败安全failsafeInvoker

快速失败会直接抛出异常,代码如下

失败安全,在失败后只是进行了简单的日志记录,但是会返回一个空的结果集

在来看下失败恢复,失败后会进行记录,然后通过定时任务进行调用,重试间隔时间是5秒,不可配置

© 著作权归作者所有

yiduwangkai
粉丝 4
博文 66
码字总数 71307
作品 0
私信 提问
大牛解析让你不在犯错——dubbo源码集群容错架构设计

本来是想把整个dubbo源码解析一次性弄完,再做成一个系列来发布的,但是正巧最近有位好朋友要去杭州面试,就和我交流了一下.本着对dubbo源码略有心得的心态,在交流过程中也发表了个人的一些粗劣...

java知识分子
2018/10/12
21
0
Dubbo (二) ——- 项目结构解析

本文主要说明点 概述 背景 需求 架构 Dubbo源代码项目结构 概述 分享 Dubbo 的项目结构 ,通过本文可以大致了解到Dubbo整个项目的结构 背景 将一个项目进行拆分, 进行分布式架构。 需要解决...

小刀爱编程
2018/10/16
722
0
dubbo源码解析-集群容错架构设计

前言 本来是想把整个dubbo源码解析一次性弄完,再做成一个系列来发布的,但是正巧最近有位好朋友要去杭州面试,就和我交流了一下。本着对dubbo源码略有心得的心态,在交流过程中也发表了个人...

微笑向暖wx
2018/11/16
10
0
使用指定IP调用Dubbo服务

一、前言 前面我们探讨了如何获取某一个Dubbo的服务的提供者列表,本节我们探讨如何使用Dubbo的扩展,实现指定IP调用。 二、实现 在Dubbo中集群容错策略Cluster是SPI扩展接口,DUbbo框架提供...

01/12
0
0
分布式框架dubbo原理解析

dubbo原理解析 互联网架构演化 单一应用架构:网站初期,访问量小,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 分布式服务架构:当网站访问量越来越多,系统升级越来越频...

jonathan_loda
2016/06/17
3.1K
4

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部