自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2021-05-11 13:48:46 1528 3

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

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

2021-05-11 12:21:24 732

原创 【Dubbo】过滤器及实现

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

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

原创 【Dubbo】Cluster 层 LoadBalance

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

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

原创 【Dubbo】Cluster 层集群容错

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

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

原创 【Dubbo】Cluster 层 Directory、Router

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

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

原创 【Dubbo】ChannelHandler 完整实现

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

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

原创 【Dubbo】Transport 层实现

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

2021-05-10 23:58:16 324

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

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

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

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

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

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

原创 【Dubbo】启停原理解析

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

2021-05-10 23:49:58 304

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

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

2021-05-10 23:38:27 548 2

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

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

2021-05-10 23:36:05 348

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

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

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

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

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

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

原创 【ZooKeeper】请求处理

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

2021-05-04 00:06:57 560

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

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

2021-05-04 00:06:40 297

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

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

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

原创 【ZooKeeper】Leader 选举

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

2021-05-03 18:28:01 270

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

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

2021-05-03 18:26:04 743

原创 【ZooKeeper】服务器启动

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

2021-05-03 18:23:43 319

原创 【ZooKeeper】会话机制原理

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

2021-05-03 18:22:40 708

原创 【ZooKeeper】数据与存储

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

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

原创 【ZooKeeper】Watcher 原理

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

2021-05-03 18:08:50 637

原创 【ZooKeeper】序列化与协议

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

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

原创 【ZooKeeper】客户端实现

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

2021-05-03 18:07:09 453

原创 【ZooKeeper】ZooKeeper 系统模型

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

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

原创 【ZooKeeper】总体概述

ZooKeeper 介绍ZooKeeper 是什么ZooKeeper 是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实 现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、 Master 选举、分布式锁和分布式队列等功能。ZooKeeper 可以保证如下分布式一致性特性顺序一致性从同一个客户端发起的事务请求,最终将会严格地按照其发起顺序被应用到 ZooKeeper 中去。原子性所有事务请求的处理结果在整个集群中所有机器上的应用情况是一致的,也就是说

2021-04-28 12:50:41 146

原创 Paxos 实现之 Chubby

ChubbyChubby是一个面向松耦合分布式系统的锁服务,GFS(Google File System)和Big Table等大型系统都是用它来解决分布式协作、元数据存储和Master选举等一些列与分布式锁服务相关的问题。Chubby的底层一致性实现就是以Paxos算法为基础,Chubby提供了粗粒度的分布式锁服务,开发人员直接调用Chubby的锁服务接口即可实现分布式系统中多个进程之间粗粒度的同控制,从而保证分布式数据的一致性。1 设计目标Chubby被设计成为一个需要访问中心化的分布式锁服务。

2021-04-28 12:50:22 1102

转载 Raft 与 Zab 对比

0 一致性问题一致性算法在实现状态机这种应用时,有哪些常见的问题:1 leader选举1.1 一般的leader选举过程选举的轮次选举出来的leader要包含更多的日志1.2 leader选举的效率会不会出现split vote?以及各自的特点是?1.3 加入一个已经完成选举的集群怎么发现已完成选举的leader?加入过程是否对leader处理请求的过程造成阻塞?1.4 leader选举的触发谁在负责检测需要进入leader选举?2 上一轮次

2021-04-27 17:46:35 1065

原创 分布式一致性算法(三):ZAB

1 ZAB介绍ZAB协议全称就是ZooKeeper Atomic Broadcast protocol,是ZooKeeper用来实现一致性的算法,分成如下4个阶段。先来解释下部分名词electionEpoch:每执行一次leader选举,electionEpoch就会自增,用来标记leader选举的轮次peerEpoch:每次leader选举完成之后,都会选举出一个新的peerEpoch,用来标记事务请求所属的轮次zxid:事务请求的唯一标记,由leader服务器负责进行分配。由2部分构成,高32

2021-04-27 17:45:26 488

转载 实例详解 ZooKeeper ZAB 协议

ZooKeeper是什么ZooKeeper是一个分布式协调服务,可用于服务发现、分布式锁、分布式领导选举、配置管理等。这一切的基础,都是ZooKeeper提供了一个类似于Linux文件系统的树形结构(可认为是轻量级的内存文件系统,但只适合存少量信息,完全不适合存储大量文件或者大文件),同时提供了对于每个节点的监控与通知机制。既然是一个文件系统,就不得不提ZooKeeper是如何保证数据的一致性的。本节将将介绍ZooKeeper如何保证数据一致性,如何进行领导选举,以及数据监控/通知机制的语义保证。Z

2021-04-27 17:44:35 342

原创 分布式一致性算法(二):Raft

1 leader选举1.1 刚开始所有server启动都是follower状态然后等待leader或者candidate的RPC请求、或者超时。上述3种情况处理如下:leader的AppendEntries RPC请求:更新term和leader信息,当前follower再重新重置到follower状态candidate的RequestVote RPC请求:为candidate进行投票,如果candidate的term比自己的大,则当前follower再重新重置到follower状态超时:转

2021-04-27 14:47:45 157

转载 一文搞懂 Raft 算法

一文搞懂Raft算法正文raft是工程上使用较为广泛的强一致性、去中心化、高可用的分布式协议。在这里强调了是在工程上,因为在学术理论界,最耀眼的还是大名鼎鼎的Paxos。但Paxos是:少数真正理解的人觉得简单,尚未理解的人觉得很难,大多数人都是一知半解。本人也花了很多时间、看了很多材料也没有真正理解。直到看到raft的论文,两位研究者也提到,他们也花了很长的时间来理解Paxos,他们也觉得很难理解,于是研究出了raft算法。raft是一个共识算法(consensus algorithm),所谓共识,

2021-04-27 14:46:38 513

原创 分布式一致性算法(一):Paxos

Paxos 算法Paxos 算法是莱斯利·兰伯特于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。问题分布式系统中的节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。基于消息传递通信模型的分布式系统,不可避免的会发生以下错误:进程可能会慢、被杀死或者重启,消息可能会延迟、丢失、重复,在基础 Paxos 场景中,先不考虑可能出现消息篡改即拜占庭错误的情况。Paxos 算法解决的问题是在一个可能发生上述异常的分布式系统中如何就某

2021-04-27 14:45:37 419 2

转载 Paxos算法原理与推导

分布式系列文章——Paxos算法原理与推导Paxos算法在分布式领域具有非常重要的地位。但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难。网上有很多讲解Paxos算法的文章,但是质量参差不齐。看了很多关于Paxos的资料后发现,学习Paxos最好的资料是论文《Paxos Made Simple》,其次是中、英文版维基百科对Paxos的介绍。本文试图带大家一步步揭开Paxos神秘的面纱。Paxos是什么Paxos算法是基于消息传递且具有高度容错特性的一致性算法,是目前公认的解决

2021-04-27 14:14:10 174

原创 分布式事务的解决方案

两阶段提交/XA2PC, 是 Two-Phase Commit 的缩写,即二阶段提交,是计算机网络尤其是在数据库领域 内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。通常,二阶段提交协议也被认为是一种一致性协议,用来保 证分布式系统数据的一致性。目前,绝大部分的关系型数据库都是采用二阶段提交协议 来完成分布式事务处理的,利用该协议能够非常方便地完成所有分布式事务参与者的协 调,统一决定事务的提交或回滚,从而能够有效地保证分布式数据一致性,因此二阶段 提

2021-04-27 13:57:11 98

原创 从 ACID 到 CAP/BASE

ACID事务 (Transaction) 是由一系列对系统中数据进行访问与更新的操作所组成的一个程序 执行逻辑单元(Unit), 狭义上的事务特指数据库事务。一方面,当多个应用程序并发访 问数据库时,事务可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相 干扰。另一方面,事务为数据库操作序列提了一个从失败中恢复到正常状态的方法, 同时提供了数据库即使在异常状态下仍能保持数据一致性的方法。 事务具有四个特征,分别是原子性( Atomicity) 、一致性( Consistency) 、隔离性 (I

2021-04-27 13:56:58 118 2

原创 分布式系统的特点及问题

分布式的特点在《分布式系统概念与设计》注’一书中,对分布式系统做了如下定义:分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。上面这个简单的定义涵盖了几乎所有有效地部署了网络化计算机的系统。严格地讲,同 一个分布式系统中的计算机在空间部署上是可以随意分布的,这些计算机可能被放在不同的机柜上,也可能在不同的机房中,甚至分布在不同的城市。无论如何,一个标准的 分布式系统在没有任何特定业务逻辑约束的情况下,都会有如下几个特征。分布性分布式系统中的多

2021-04-27 13:56:39 743

原创 分布式锁与技术选型

分布式锁1 为何需要分布式锁Martin Kleppmann是英国剑桥大学的分布式系统的研究员,之前和Redis之父Antirez进行过关于RedLock(红锁,后续有讲到)是否安全的激烈讨论。Martin认为一般我们使用分布式锁有两个场景:效率:使用分布式锁可以避免不同节点重复相同的工作,这些工作会浪费资源。比如用户付了钱之后有可能不同节点会发出多封短信。正确性:加分布式锁同样可以避免破坏正确性的发生,如果两个节点在同一条数据上面操作,比如多个节点机器对同一个订单操作不同的流程有可能会导致该笔订

2021-04-18 15:24:14 264

空空如也

空空如也

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

TA关注的人

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