不理解Zookeeper一致性原理,谈何异地多活改造

100Wqps异地多活,得物是怎么架构的? 尼恩站在 得物 异地多活架构的基础上, 给大家对异地多活,做一个起底式的 、系统化、穿透式的介绍。并且,把此文的异地多活架构,和尼恩其他的架构文章一起,组成一个架构知识系统,帮助大家实现你的 架构自由。 阅读详情

2017 年在饿了么做异地多活建设之时,我的团队承担了 Zookeeper 的异地多活改造。

在这里插入图片描述

在此期间,我听到了关于 Zookeeper 一致性的两种不同说法:

Zookeeper 是最终一致性的,由于多副本,以及保证大多数成功的 Zab 协议,当一个客户端进程写入一个新值,另一个客户端进程不能保证马上就会读到,但能保证最终会读到这个值。
Zookeeper 的 Zab 协议类似于 Paxos 协议,并且提供了强一致性。

每当听到这两种说法,我都想纠正一下。Zookeeper 是顺序一致性(Sequential Consistency)的,但解释起来比较复杂,下面和大家一起讨论下我的看法。

什么是 Sequetial Consistency

从 Zookeeper 的文档中我们可以看到,里面明确写出它的一致性是 Sequential Consistency。

那么,什么是 Sequential Consistency 呢?

Sequential Consistency 是 Lamport 在 1979 年首次提出的。论文中定义,当满足下面这个条件时就是 Sequential Consistency:

the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program.

这段英文定义很晦涩,这是 Lamport 大神的一贯风格,严谨但晦涩,Paxos 协议也是如此。

我第一次看到时的感觉是:“这是什么鬼?”为啥每个英文单词我都认识,但就是不知道他在说什么?

我们先看看这篇论文的标题和定义中出现的一个关键词,来说明一下 Sequential Consistency 的应用范围。

论文的标题和定义中包含“multiprocessor”这个词,multiprocessor 是多核处理器的意思。

从这个关键字来看,Sequential Consistency 是用来定义多核处理器和跑在多核处理器上的程序的一个特性。

Lamport 这篇论文的标题可以翻译成:“如何让具有多核处理器的计算机正确执行多进程程序”。

也就是说如果一个多核处理器具有 Sequential Consistency 的特性,这个多核处理器就可以正确运行,后面我会解释这个正确运行是什么意思(也就是本文后面讲到的 Sequential Consistency 的作用)。

从这个标题我们还可以看出,Sequential Consistency 应该是个并发编程(Concurrent Programming)领域的概念。

但我们现在常常在分布式系统领域讨论 Sequential Consistency,比如本文主要讨论的 Zookeeper(Zookeeper 很明显是一个分布式系统)的一致性。

实际上,多核处理器上运行的多个程序,其实也是一种分布式系统(Lamport在他的这篇 Time,Clocks,and the Ordering of Events in a Distributed System 分布式系统的开山之作中也阐述了这个观点)。

所以虽然 Sequential Consistency 最早在并发编程中提出,但是它可以应用在分布式系统中,比如本文讨论的 Zookeeper 这种分布式存储系统。

另外一个比较重要的 Linearizability(线性一致性),也是在并发编程中最早提出的,目前也被广泛应用在分布式系统领域中。

接下来我们尝试翻译一下上文那段晦涩的定义,做这段翻译让我找到了上学时做阅读理解的感觉。

我先不直接翻译,因为就算我把它翻译成中文,估计很多人还是会有“为啥每个中文字我都懂,还是不知道在说什么”的感觉。

首先,我来解释一下个别的词。首先,“any execution”是什么意思?你有多个程序(Program)在多核处理器上运行,例如你有两个程序。

第一个程序叫 P1,它的代码如下:

P1_write(x);

P1_read(y);

第二个程序叫 P2,代码如下:

P2_write(u);

告别QT WebEngine:用Electron + QWebChannel + Vue 3重构你的C++桌面应用界面 本文探讨了如何利用Electron和QWebChannel结合Vue 3重构C++桌面应用界面,提升开发效率和用户体验。通过对比QT WebEngine的局限性,展示了Electron方案在开发效率、技术生态和内存占用方面的优势,并提供了详细的架构设计、通信模型和实战迁移策略。 阅读详情

相关推荐

Hadoop心跳机制:原理、优化与故障排查实战

分布式系统中的心跳机制是维持集群健康状态的核心技术,通过周期性的状态汇报实现节点存活检测。其底层基于TCP长连接实现主从通信,DataNode定期向NameNode发送包含存储容量、数据块列表等元数据的心跳包。这种设计不仅降低了NameNode的内存开销,还能灵活应对网络波动。在HDFS等分布式存储系统中,合理配置心跳间隔和超时阈值至关重要,例如默认的3秒心跳间隔与10分钟超时阈值需要保持200倍的比例关系。实际生产环境中,跨机房部署和大型集群场景需要特别关注心跳风暴问题,可通过分级心跳策略和动态超时计算进

weixin_42531710的博客 277

Java架构设计:从单体到微服务的演进路径与核心模式解析

在软件工程领域,架构设计是构建复杂系统的核心思维模式,它关注如何将技术组件组合成稳固、可扩展的系统。其基本原理围绕经典的权衡三角展开,即性能、可用性与扩展性之间的平衡。性能优化涉及吞吐量、延迟和资源利用率的度量,常用缓存、异步处理等技术提升效率;高可用性通过冗余设计、故障转移和熔断降级等机制保障系统韧性;扩展性则通过水平扩展、微服务拆分和数据分区来应对业务增长。这些技术价值最终服务于分布式系统的构建,尤其在Java技术栈中,从单体分层架构到数据库读写分离,再到服务化拆分与分布式治理,形成了清晰的演进路径。本

aibiba0894的博客 400

【717】CAP定理:分布式系统的不可能三角

摘要(150字): CAP定理揭示了分布式系统的核心限制:在网络分区不可避免的前提下,一致性(C)、可用性(A)和分区容错性(P)无法同时满足。实际开发中需在CP(如金融系统)和AP(如社交应用)间权衡。BASE理论提供了折中方案,通过最终一致性实现灵活设计。理解CAP有助于根据业务需求选择合适策略——核心数据保障强一致,非核心场景允许短暂不一致。分布式架构的本质是业务场景驱动的取舍艺术,而非追求理论完美。

通俗易懂学IT 34

高可用集群部署方案

作者:禅与计算机程序设计艺术 1.简介 对于企业而言,需要保证应用服务的高可用、可靠运行,是成功保障其业务持续运营的关键。云计算时代,通过弹性伸缩、负载均衡等方式实现应用服务的高可用架构,已经成为云服务商的共识。但是如何将云服务部署到私有数据中心内部,并保证其高度可用性,一直是企业面临的难题。 近年来,

AI天才研究院 1781

蚂蚁金服异地多活的微服务体系

蚂蚁金服异地多活的微服务体系--从挖光缆到剪网线。 蚂蚁金服(当时还是支付宝)从 2013 年起就运行在单元化架构上,除了具备异地容灾能力外,还能做到异地多活,可随时在多城市、多数据中心调配流量。基于单元流量调配机制,可实现大规模集群的蓝绿发布、灰度仿真环境,为充分验证业务正确性、降低故障提供了基础条件。相应地,微服务体系也必须具备单元内收敛、单元间可控路由等能力,来支撑单元化技术架构的落地。本文根据玄霄 2018 年上海 QCon 演讲内容整理。

LibTV保姆级教程:从提示词到AI视频成片全流程

AI视频生成技术正以前所未有的速度重塑内容创作行业,过去需要编剧、摄影、剪辑等多角色协作的复杂流程,如今借助AI绘画与图生视频等核心能力,一个人也能完成高质量短视频制作。理解提示词工程是掌控AI视频创作的关键,通过精准描述主体、环境、光线与运镜,可以显著提升生成画面的稳定性与专业度。而图生视频技术则让静态分镜自然流动,有效解决角色一致性与场景漂移等常见问题。这类工具已广泛应用于产品宣传、剧情短片、社交媒体内容生产等场景,大幅降低了视频创作门槛。本文以LibTV一站式AI视频创作平台为例,从核心概念到完整实操

weixin_29046035的博客 989

汇川AM402、H3U和上位机C#ModebusTcp通讯

目录一、测试任务二、测试环境三、PLC工程1、组态配置2、ip地址、端口号 3、全局变量定义四、C#端Winform程序创建1创建主界面 2、创建子窗口 3、运行生成,界面效果4、Modebus协议说明5、Modebus操作说明六、测试1、寄存器读测试 2、MW1300寄存器的BIT位3、写寄存器测试4、PLC断电或者断网 七、工程下载连接1、PLC作为ModebusTCP端,端口号都是502,PC端上位机软件作为TcpClient去连接多台PLC。PC端读写PLC寄存器。2、PC端在有的PLC断电、断网的

panjinliang066333的博客 2万+

python爬虫自动下载网页链接

需求分析 今天遇到一个简单的需求,需要下载澳大利亚电力市场NEM日前市场的发电商报价数据(http://nemweb.com.au/Reports/Current/Next_Day_Offer_Energy/),页面观感是这样的: Ctrl + F 一下,看到一共有395个zip链接。于是就想着用python爬虫自动下载。这个网页很简单,没有验证码,甚至不需要登录,因此自动下载的pytho...

da_kao_la的博客 1万+

手把手教你用SIMCOM A7670C_FASL模组实现双路MQTT连接阿里云(附完整源码)

本文详细介绍了如何使用SIMCOM A7670C_FASL 4G模组实现双路MQTT连接阿里云,包括硬件配置、开发环境搭建、双路MQTT架构设计及实现细节。通过完整的源码示例和实战指南,帮助开发者快速掌握物联网设备开发中的多路MQTT连接技术,提升工业级应用的开发效率。

weixin_33696822的博客 227

RK3588部署YOLO模型 包含模型量化+npu轻量化+ubuntu+RGA图像加速和多线程模型加速 包源码

本专栏为深度学习部署全栈学习体系,包含68篇由浅入深的教程,专为零基础学习者设计。内容涵盖TensorRT与RK3588平台部署技术,包含Jetson系列和RK系列硬件部署实战,采用"理论+源码+实战"三位一体的教学模式。学习路径从基础环境搭建到模型优化、容器化部署、多硬件平台适配,最终掌握工业级AI部署能力。特色包括C++基础教学、Docker容器化、INT8量化、多线程优化等核心技术,并附带YOLOv5、人脸检测、车牌识别等多个实战项目源码。适合算法工程师转部署方向、嵌入式开发者及对

FJN110的博客 3732

2024年03月CCF-GESP编程能力等级认证Python编程五级真题解析

下面流程图在yr输入2024时,可以判定yr代表闰年,并输出 2月是29天 ,则图中菱形框中应该填入( )。 A. (yr % 400 == 0) or (yr % 4 == 0) B. ( yr % 400 == 0) or (yr % 4 == 0 and yr %100 != 0) C. ( yr % 400 == 0) and ( yr % 4 == 0) D. (yr % 400 == 0) and (yr % 4 == 0 and yr % 100 != 0)

人生就是一个不断学习的过程 748

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

如何使用freesurfer对T1w结构像进行分区指标的提取?——皮层面积,灰质体积,平均厚度,厚度标准差,平均曲率、高斯曲率、曲率指数、折叠指数

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 3788

SAP UI5 主题设置全解析:从启动参数到运行时切换、跨域白名单与事件监听

SAP UI5主题体系深度解析:从配置到切换的完整指南 摘要:SAP UI5主题机制远不止CSS换肤,其工程化实践涵盖启动配置、运行时API切换、跨库路径映射及安全管控等关键环节。通过bootstrap标签或URL参数设置初始主题,运行时可用Theming.setTheme无刷新切换。自定义主题需配置theme-roots路径,跨域加载需声明sap-allowed-theme-origins白名单。主题切换完成后会触发applied事件,适合执行视觉同步操作。该体系支持多品牌适配、集中式主题管理,在Fior

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 328

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 从传统外企到阿里 P9,这位 Java 工程师经历了什么?
下一篇: JavaSE官方团队成员为何“抛弃”Java,成JavaScript和Node死忠?
java1856905
博客等级 码龄8年 100粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值