自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 【Dubbo】扩展 etcd 注册中心

主要内容 :• etcd 数据结构设计 ;• 构建可运行的注册中心 ;• 搭建 etcd 集群并在 Dubbo 中运行 。着重从扩展 Dubbo 新注册中心方面入手 , 重点说明深入开发 Dubbo 注册中心需要关注的点 。 首先讲解 etcd 数据结构要如何设计 , 然后讲解构建可运行的 etcd 注册中心扩展的接口的实现步骤 , 最后把实现的扩展注册中心在 Dubbo 中运行11.1 etcd 背景介绍etcd 是一种分布式键值存储系统 , 它提供了可靠的集群存储数据的途径 。 它是开源

2021-05-11 13:48:46 46 2

原创 【Dubbo】高级特性及原理

主要内容 :• Dubbo 高级特性概述 ;• Dubbo 高级特性原理 。首先对 Dubbo 支持的高级特性进行介绍 , 然后给出使用这些高级特性的示例 , 帮助读者更好地理解高级特性 , 最后对常用的高级特性的原理进行深入的分析 , 帮助读者更好地理解和掌握 Dubbo 框架 。 当发现 Dubbo 无法满足业务诉求时 , 也能进行深入的定制或扩展 。9.1 Dubbo 高级特性概述Dubbo 解决了分布式场景 RPC 通信调用的问题 , 但是要满足各种业务场景还是不够的 。 举个例子

2021-05-11 12:21:24 34

原创 【Dubbo】过滤器及实现

主要内容 :, Dubbo 过滤器概述 ;• 过滤器链初始化的实现原理 ;• 服务提供者过滤器的实现 ;• 消费者过滤器的实现 。首先介绍 Dubbo 过滤器的总体概况 , 包括如何配置和使用一些框架自定义的规则约束,整个过滤器接口的总体结构 , Dubbo 框架中内置过滤器的不同用途 ; 然后介绍众多的过滤器是如何初始化成一个过滤器链的 ; 最后 , 由于有的过滤器会在服务提供者端生效 , 有的会在消费者端生效 , 因此我们会分为服务提供者和消费者两端来分别介绍各端的过滤器的实现原理 。

2021-05-11 01:03:05 109 1

原创 【Dubbo】Cluster 层 LoadBalance

主要内容LoadBalance 的实现原理讲解 LoadBalance 及实现原理负载均衡的实现在整个集群容错流程中 , 首先经过 Directory 获取所有 Invoker 列表 , 然后经过 Router 根据路由规则过滤 Invoker, 最后幸存下来的 Invoker 还需要经过负载均衡这一关 , 选出最终要调用的 Invoker1 包装后的负载均衡2 节介绍了 7 种容错策略 , 发现在很多容错策略中都会使用负载均衡方法 , 并且所有的容错策略中的负载均衡都使用了抽象父类 Abs

2021-05-11 00:57:43 22 1

原创 【Dubbo】Cluster 层集群容错

主要内容 :• 集群容错总体实现 ;• 普通容错策略的实现 ;• Directory 的实现原理 ;• Router 的实现原理 ;• LoadBalance 的实现原理 ;• Merger 的实现原理 ;• Mock 的实现原理 。首先介绍整个集群容错层的总体结构与实现 , 让读者对集群容错层有一个整体的了解 。然后讲解该层中的每个重要组件 , 包括普通容错策略的实现原理 , 如 Failover> Failfast 等策略 ;整个集群容错过程都会使用的 Directory &g

2021-05-11 00:57:27 82 2

原创 【Dubbo】Cluster 层 Directory、Router

主要内容 :集群容错总体实现 ;Directory 的实现原理 ;Router 的实现原理 ;首先介绍整个集群容错层的总体结构与实现 , 让读者对集群容错层有一个整体的了解 。然后讲解 Directory 、 Router 原理1 Cluster 层概述在微服务环境中 , 为了保证服务的高可用 , 很少会有单点服务出现 , 服务通常都是以集群的形式出现的 。 我们己经了解了远程调用的实现细节 。 然而 , 被调用的远程服务并不是每时每刻都保持良好状况 , 当某个服务调用出现异常时 , 如网络

2021-05-11 00:56:50 43 1

原创 【Dubbo】ChannelHandler 完整实现

主要内容 :讲解 ChannelHandler,及其如何贯穿 Protocol -> Exchange -> Transport 层ChannelHandler如果读者熟悉 Netty 框架 , 那么很容易理解 Dubbo 内部使用的 ChannlHandler 组件的原理,Dubbo 框架内部使用大量 Handler 组成类似链表 , 依次处理具体逻辑 , 比如编解码 、 心跳时间戳和方法调用 Handler 等 。 因为 Netty 每次创建 Handler 都会经过 Channe

2021-05-11 00:31:23 24 1

原创 【Dubbo】Transport 层实现

主要内容 :• Dubbo 核心调用流程 ;• Dubbo 协议详解 ;• Dubbo 编解码器原理 ;• Telnet 调用原理 ;• Dubbo 线程模型 。首先介绍 Dubbo 的核心调用流程 , 接下来讲解 Dubbo 内部协议的设计和实现 , 通过对具体协议细节的理解 , 我们可以更好地掌握 RPC 通信的核心原理 。 在理解现有 RPC 协议的基础上 , 我们会对编解码器实现展开深入解析 , 同时对本地 Telnet 调用展开分析 , 最后对 Dubbo线程模型进行深入探讨 。

2021-05-10 23:58:16 22

原创 【Dubbo】注册中心及原理

1 注册中心概述在 Dubbo 微服务体系中 , 注册中心是其核心组件之一 。 Dubbo 通过注册中心实现了分布式环境中各服务之间的注册与发现 , 是各个分布式节点之间的纽带 。 其主要作用如下 :• 动态加入 。 一个服务提供者通过注册中心可以动态地把自己暴露给其他消费者 , 无须消费者逐个去更新配置文件• 动态发现 。 一个消费者可以动态地感知新的配置 、 路由规则和新的服务提供者 , 无须重启服务使之生效 。• 动态调整 。 注册中心支持参数的动态调整 , 新参数自动更新到所有相关服务

2021-05-10 23:51:52 57 3

原创 【Dubbo】服务暴露与消费原理

主要内容 :Dubbo 服务暴露原理 ;Dubbo 服务消费原理 ;探讨服务暴露和服务消费的细节1 服务暴露的实现原理前面主要探讨了 Dubbo 中 schema 、 XML 和注解相关原理 , 这些内容对理解框架整体至关重要 , 在此基础上我们继续探讨服务是如何依靠前面的配置进行服务暴露的 。1.1 配置承载初始化不管在服务暴露还是服务消费场景下 , Dubbo 框架都会根据优先级对配置信息做聚合处理,目前默认覆盖策略主要遵循以下几点规则 :(1) -D 传递给 JVM 参数优先级最

2021-05-10 23:50:39 32 2

原创 【Dubbo】启停原理解析

主要内容 :• Dubbo 配置解析 ;• Dubbo 服务暴露原理 ;• Dubbo 服务消费原理 ;• Dubbo 优雅停机解析 。将详细探讨 Dubbo 配置的设计模型 、 服务暴露的原理 、 服务消费的原理和优雅停机的原理 。 首先 , 学习优雅的分层配置设计 , 能够帮助我们更好地理解框架的启动配置逻辑 , 不管是注解还是 XML 配置都需要配置对象来承载 。 然后探讨服务暴露和服务消费的细节 。 最后研究优雅停机特性 , 能够保证线上服务和消费方平滑地退出5.1 配置解析目前

2021-05-10 23:49:58 16

原创 【Dubbo】分层及其拓展点

主要内容 :• 核心扩展点概述 ;• RPC 层扩展点 ;• Remote 层扩展点 ;• 其他扩展点 。己经了解了 Dubbo 的 SPI 扩展机制 , 本章主要介绍在整个框架中有哪些已有的接口是可以扩展的 , 主要涉及扩展接口的作用 , 原理性的内容相对较少 。 首先介绍整个框架中核心扩展点的总体大图 , 让读者对这些扩展点有一个总体的了解 。 其次从上到下介绍整个 RPC层的扩展点 。 然后介绍 Remote 层的扩展点 。 最后会把其他一些零散的扩展点也简单介绍一下 。8.1 Du

2021-05-10 23:38:27 25

原创 【Dubbo】扩展点实现原理

接上一篇 【Dubbo】Dubbo 扩展点加载机制3 ExtensionLoader 的工作原理ExtensionLoader 是整个扩展机制的主要逻辑类 , 在这个类里面卖现了配置的加载 、 扩展类缓存 、 自适应对象生成等所有工作 。 本节将结合核心源码讲解整个 ExtensionLoader 的工作流程3.1 工作流程ExtensionLoader 的逻辑入口可以分为 getExtension 、 getAdaptiveExtension 、getActivateExtension 三个 ,

2021-05-10 23:36:05 16

原创 【Dubbo】扩展点加载机制

主要内容 :• 加载机制概述 ;• 扩展点注解 ;• ExtensionLoader 的工作原理 ;• 扩展点动态编译的实现原理 。首先介绍现有 Dubbo 加载机制的概况 , 包括 Dubbo 所做的改进及部分特性 。 其次介绍加载机制中已经存在的一些关键注解 , 如 @SPI 、 ©Adaptive > ©Activate o 然后介绍整个加载机制中最核心的 ExtensionLoader 的工作流程及实现原理 。 最后介绍扩展中使用的类动态编译的实现原理 。 通过本章的阅读 ,

2021-05-10 23:35:42 40 3

原创 【Dubbo】高性能 RPC 通信框架

主要内容 :• Dubbo 简介 ;• Dubbo 总体大图 。主要是对 Dubbo 总体的介绍 , 让读者对 Dubbo 有一个总体的认识 。 首先介绍后台应用架构的演进过程 , 从最初的 JEE 到现在的微服务架构都会介绍 ; 然后简单介绍一下 Dubbo, 包括它的发展历史 、 未来方向等 ; 最后讲解 Dubbo 的总体大图 , 通过分层的方式讲解 Dubb 。 的总体架构 , 并介绍 Dubbo 的核心组件及总体流程1.2 Dubbo 简介假设你正在参与公司一项非常重要的项目开发

2021-05-10 23:18:44 21 1

原创 【ZooKeeper】请求处理

1 会话创建请求ZooKeeper 服务端对于会话创建的处理,大体可以分为请求接收、会话创建、预处理、 事务处理、事务应用和会话响应 6 大环节,其大体流程如图 7-39 所示。请求接收I/O 层接收来自客户端的请求。在 ZooKeeper 中, NIOServerCnxn 实例维护每一个客户端连接,客户端与服务 端的所有通信都是由 NIOServerCnxn 负责的——其负责统一接收来自客户端的 所有请求,并将请求内容从底层网络 I/O 中完整地读取出来。判断是否是客户端“会话创建”

2021-05-04 00:06:57 28

原创 【ZooKeeper】各服务器角色处理链

1 LeaderLeader 服务器是整个 ZooKeeper 集群工作机制中的核心,其主要工作有以下两个。事务请求的唯一调度和处理者,保证集群事务处理的顺序性。集群内部各服务器的调度者。请求处理链使用责任链模式来处理每一个客户端请求是 ZooKeeper 的一大特色。在服务 器启动过程讲解中,我们已经提到,在每一个服务器启动的时候,都会进行请求处理链 的初始化, Leader服务器的请求处理链如图所示。从图中可以看到,从 PrepRequestProcessor 到 FinalRe

2021-05-04 00:06:40 17

原创 【ZooKeeper】Leader 选举实现细节

Leader 选举的实现细节我们介绍了整个 Leader 选举的算法设计。从算法复杂度来说, FastLeaderElection算法的设计并不复杂,但在真正的实现过程中,对于一个需要应用在 生产环境的产品来说,还是有很多实际问题需要解决。在本节中,我们就来看看 ZooKeeper 中对 FastLeaderElection 的实现。服务器状态为了能够清楚地对 ZooKeeper 集群中每台机器的状态进行标识,在 org.apache, zookeeper. server.quorum.Qu

2021-05-03 18:29:05 29 1

原创 【ZooKeeper】Leader 选举

1 Leader 选举概述Leader 选举是 ZooKeeper 中最重要的技术之一,也是保证分布式数据一致性的关键所在。 在本节中,我们将先从整体上来对 ZooKeeper 的 Leader 选举进行介绍。服务器启动时期的 Leader 选举在我们讲解 Leader 选举的时候,需要注意的一点是,隐式条件便是 ZooKeeper 的集群规 模至少是2 台机器,这里我们以 3 台机器组成的服务器集群为例。在服务器集群初始化 阶段,当有一台服务器(我们假设这台机器的 myid 为 1, 因此称其为 S

2021-05-03 18:28:01 33

原创 【ZooKeeper】数据初始化及同步

数据初始化在 ZooKeeper 服务器启动期间,首先会进行数据初始化工作,用于将存储在磁盘上的数 据文件加载到 ZooKeeper 服务器内中。初始化流程首先我们先从整体上来看 ZooKeeper 的数据初始化过程,图 7-48 展示了数据的初始化 流程。数据的初始化工作,其实就是从磁盘中加载数据的过程,主要包括了从快照文件中加载 快照数据和根据事务日志进行数据订正两个过程。初始化 FileTxnSnapLog 。FileTxnSnapLog 是 ZooKeeper 事务日志和快照数据

2021-05-03 18:26:04 17

原创 【ZooKeeper】服务器启动

本节将向读者介绍 ZooKeeper 服务器的启动过程,下面先从单机版的服务器开始介绍。1 单机版服务器启动ZooKeeper 服务器的启动,大体可以分为以下五个主要步骤:配置文件解析、初始化数 据管理器、初始化网络 I/O 管理器、数据恢复和对外服务。图所示是单机版 ZooKeeper 服务器的启动流程图。预启动预启动的步骤如下。统一由 QuorumPeerMain 作为启动类。无论是单机版还是集群模式启动 ZooKeeper 服务器,在 zArServercmc/ 和 zkServe

2021-05-03 18:23:43 15

原创 【ZooKeeper】会话机制原理

会话 (Session) 是 ZooKeeper 中最重要的概念之一,客户端与服务端之间的任何交互操 作都与会话息息相关,这其中就包括临时节点的生命周期、客户端请求的顺序执行以及 Watcher 通知机制等。我们已经讲解了 ZooKeeper 客户端与服务端之间一次会话创建的大体过 程。以Java 语言为例,简单地说, ZooKeeper 的连接与会话就是客户端通过实例化 ZooKeeper 对象来实现客户端与服务器创建并保持 TCP 连接的过程。在本节中,我们将 从会话状态、会话创建和会话管理等方

2021-05-03 18:22:40 22

原创 【ZooKeeper】数据与存储

在 ZooKeeper 中,数据存储分为两部分: 内存数据存储与磁盘数据存储。内存数据我们已经提到, ZooKeeper 的数据模型是一棵树,而从使用角度看, ZooKeeper就像一个内存数据库一样。在这个内存数据库中,存储了整棵树的内容,包 括所有的节点路径、节点数据及其 ACL 信息等, ZooKeeper 会定时将这个数据存储到磁 盘上。接下来我们就一起来看看这棵“树”的数据结构DataTreeDateTree 是 ZooKeeper 内存数据存储的核心,是一个“树”的数据结构,代表了内存

2021-05-03 18:21:21 34 1

原创 【ZooKeeper】Watcher 原理

Watcher ----- 数据变更的通知ZooKeeper 提供了分布式数据的发布/订阅功能。一个典 型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一 个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使它们能够做出相 应的处理。在 ZooKeeper中,引入了 Watcher 机制来实现这种分布式的通知功能。 ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发 了这个 Watcher, 那么就会向指定客户端发送

2021-05-03 18:08:50 10

原创 【ZooKeeper】序列化与协议

ZooKeeper 的客户端和服务端之间会进行一系列的 网络通信以实现数据的传输。对于一个网络通信,首先需要解决的就是对数据的序列化 和反序列化处理,在 ZooKeeper 中,使用了 Jute 这一序列化组件来进行数据的序列化和 反序列化操作。同时,为了实现一个高效的网络通信程序,良好的通信协议设计也是至 关重要的。1 Jute 介绍Jute 是 ZooKeeper 中的序列化组件,最初也是 Hadoop 中的默认序列化组件,其前身是 Hadoop Record IO 中的序列化组件,后来由于

2021-05-03 18:07:45 16 1

原创 【ZooKeeper】客户端实现

客户端是开发人员使用 ZooKeeper 最主要的途径,因此我们有必要对 ZooKeeper 客户端 的内部原理进行详细讲解。 ZooKeeper 的客户端主要由以下几个核心组件组成。ZooKeeper 实例:客户端的入口。ClientWatchManager :客户端 Watcher 管理器。HostProvider :客户端地址列表管理器。ClientCnxn :客户端核心线程,其内部又包含两个线程,即 SendThread 和 EventThread 。前者是一个 I/O 线程,主要负

2021-05-03 18:07:09 44

原创 【ZooKeeper】ZooKeeper 系统模型

1 数据模型ZooKeeper 的视图结构和标准的 Unix 文件系统非常类似,但没有引入传统文件系统中目 录和文件等相关概念,而是使用了其特有的“数据节点”概念,我们称之为 ZNode o ZNode 是 ZooKeeper 中数据的最小单元,每个 ZNode 上都可以保存数据,同时还可以挂载子节 点,因此构成了一个层次化的命名空间,我们称之为树。树首先我们来看下图所示的 ZooKeeper 数据节点示意图,从而对 ZooKeeper 上的数据节 点有一个大体上的认识。在 ZooKeeper 中,

2021-05-03 18:05:04 15 1

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除