dubbo源码分析14 -- 集群容错之Directory

在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引入的分布式与集群概念。

分布式:一个业务分拆多个子业务,部署在不同的服务器上
集群:同一个业务,部署在多个服务器上

1、 dubbo 服务治理

当请求来临时,如何从多个服务器中,选择一个有效、合适的服务器,这个集群所需要面对一问题。所以在集群里面就引申出负载均衡(LoadBalance),高可用(HA),路由(Route)等概念。我们来看一下 dubbo 在进行服务调用的时候是如何处理的。

cluster.jpg

这张集群容错包含以下几个角色:

  • Invoker:对 Provider (服务提供者) 的一个可调用 Service 接口的抽象,Invoker 封装了 Provider 地址及 Service 接口信息。
  • ClusterDirectory 中的多个 Invoker 伪装成一个 Invoker,对上层透明,伪装过程包含了容错逻辑,调用失败后,重试另一个
  • Directory:代表多个 Invoker,可以把它看成 List<Invoker> ,但与 List 不同的是,它的值可能是动态变化的,比如注册中心推送变更
  • Router : 负责从多个Invoker 中按路由规则选出子集,比如读写分离,应用隔离等
  • LoadBalanceLoadBalance 负责从多个 Invoker 中选出具体的一个用于本次调用,选的过程包含了负载均衡算法,调用失败后,需要重选.

2、 目录服务

下面我们来分析一下 Directory, 也就是目录服务。我们可以来看一下 维基百科, 对于目录服务的描述。
在计算中,目录服务或名称服务将网络资源的名称映射到它们各自的网络地址。它是一个共享的信息基础设施,用于定位、管理、管理和组织日常项目和网络资源,这些资源包括卷、文件夹、文件、打印机、用户、组、设备、电话号码和其他对象。目录服务是网络操作系统的关键组件。目录服务器是提供此类服务的服务器。网络上的每个资源都被目录服务器视为对象。关于特定资源的信息存储为与该资源或对象相关联的属性集合。

目录服务为网络定义一个名称空间。名称空间用于为每个对象分配名称(惟一标识符)。目录通常有一组规则来决定如何命名和识别网络资源,这通常包括一个要求,标识符是唯一的和明确的。在使用目录服务时,用户不需要记住网络资源的物理地址;提供一个名称来定位资源。有些目录服务包括访问控制条款,限制了对授权用户的目录信息的可用性。

3、Directory

下面我们来看一下 Directory 接口的定义:

public interface Directory<T> extends Node {

    /**
     * get service type.
     *
     * @return service type.
     */
    Class<T> getInterface();

    /**
     * list invokers.
     *
     * @return invokers
     */
    List<Invoker<T>> list(Invocation invocation) throws RpcException;

}

集群调用的时候可以通过目录服务的list 方法获取到 Invoker 列表,它有两种具体的实现:

Directory.png

3.1、StaticDirectory

StaticDirectory :静态目录,它的 Invoke 列表是通过构造器传入。服务消费方在引用服务的时候把多注册中心暴露的 Invoke 以构造器的形式传入到 StaticDirectory,然后再由 Cluster 伪装为一个 Invoke 提供给服务消费方调用。

ReferenceConfig.png

StaticDirectory 的 list 方法直接返回所有 invoker 集合。

3.2、RegistryDirectory

RegistryDirectory:注册目录服务,实现 NotifyListener 接口。当有服务注册到注册中心上面,会动态更新到注册目录服务里面。

消费方调用某个远程服务,会向注册中心订阅这个服务的所有服务提供方。当服务提供方的数据有变动时就会回调消费方RegistryDirectory#notify把传入的所有服务提供方的 URL 地址转换为 Invoker 列表。

RegistryDirectory.png

这样就起到了服务治理中的服务自动发现。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 流程图 这个流程对应我们这次源码分析主要内容,不得不说dubbo的文档写的太好了 时序图 引用服务两种方式 直连引...
    土豆肉丝盖浇饭阅读 602评论 0 1
  • 在集中式环境中服务的机器台只有一台,这样对于服务不仅存在服务单点故障问题而且还存在流量问题。为了解决这个问题,就引...
    carl_zhao阅读 265评论 0 0
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,847评论 0 5
  • 好舒服的一堂阴瑜伽
    云朵的小窝阅读 256评论 0 0