分布式一致性软件-zookeeper

     在我们进行软件开发过程中,为了实现某个功能可能借助多个软件,如存储数据的数据库软件:MySQL,Redis;消息中间件:rocketMq,kafka等。那么在分布式系统中,如果想实现数据一致性,可以借助哪些软件呢?答:分布式一致性软件。

一、什么是分布式一致性?

      在了解分布式一致性软件前,我们需要明确下什么是“分布式一致性”?

      分布式一致性(Distributed Consistency)是指在分布式系统中,即使存在多个节点并且每个节点都可能独立处理请求和存储数据,也要保证所有节点对某个数据对象的视图在同一时刻是一致的。简单来说,当一个系统中的多个进程或者服务器上的数据副本发生变化时,能够确保所有副本最终达到一致的状态,并且对外表现得好像只有一个拷贝一样。

二、什么是分布式一致性软件?

     分布式一致性软件是指一类专门设计用于在分布式系统中实现数据一致性的服务或组件。这类软件通常基于某种一致性算法(如Raft、Paxos等),确保即使在存在网络延迟、节点故障或其他不确定因素的环境下,所有参与的节点对共享状态的变更都能达成一致,并最终达到全局的一致视图

三、什么时候适合使用分布式一致性软件?

1. 服务发现与配置管理:

     当系统由多个微服务或组件组成,需要一个中心化的、高可用的存储系统来维护服务注册信息和服务配置,并确保所有节点都能获取到最新且一致的数据时,比如ZooKeeper和Consul。

2. 分布式协调:

     例如,在实现分布式锁、领导选举(Leader Election)、队列操作等场景下,需要保证多节点间的操作顺序性和互斥性,防止并发冲突。

3. 数据复制与分区:

     在分布式数据库或者文件系统中,为了提高系统的容错性和读写性能,数据会分布在多个节点上。这时就需要使用分布式一致性技术来保证各个副本之间的一致性。

     这里注意:我们常用的MySQL本身不是分布式数据库软件。在使用MySQL过程中,我们通过一些策略和技术手段基于MySQL实现了分布式数据库系统,如:分片,主从复制,中间件方案(ProxyMysql等);MySQL 5.7及更高版本提供了组复制功能,允许在一组MySQL服务器之间保持数据的一致性,从而实现高可用性和数据分布。

4. 分布式事务处理:

    当跨多个数据库或服务的事务执行时,需要一种机制来保证事务的原子性和一致性,如Google Spanner提供的分布式事务支持。

5. 消息队列与流处理:

   在消息中间件中,需要确保消息按顺序可靠地传递并被消费,如Kafka通过其分区和副本机制提供了一种分布式一致性模型。

6. 云原生架构:

   在容器化和微服务架构中,应用和服务实例可能动态地创建和销毁,此时就需要一致的方式来管理和调度这些资源。

7. 全局唯一ID生成器:

    在大型分布式系统中,需要生成全局唯一的序列号或ID时,分布式一致性软件可以提供有序且不重复的ID生成服务

     总的来说,只要涉及到了分布式环境下的共享状态管理,尤其是需要确保多个节点对同一份数据的操作能够达成一致性的场合,就有可能需要依赖分布式一致性软件。

四、实现一个分布式一致性软件需要考虑哪些问题-结合zookeeper?

1. 共识算法:

     为了确保分布式环境下的数据一致性,通常会采用某种形式的一致性协议或共识算法,例如ZooKeeper使用的是ZooKeeper Atomic Broadcast (ZAB)协议,Raft或Paxos等也是常用的分布式一致性算法。

可参考:ZooKeeper-集群-ZAB协议与数据同步_zk主从节点数据同步延迟-CSDN博客

2. 数据复制与同步:

    在多节点间进行数据复制以提高可用性和容错性,同时要确保数据更新能够快速且正确地传播到所有副本。

3. 故障恢复机制:

   设计一套能处理节点失效、网络分区等问题的机制,包括领导者选举(Leader Election)、心跳检测以及崩溃恢复流程。

4. 顺序保证:

   在分布式系统中,操作的全局有序性是至关重要的。ZooKeeper通过ZAB协议提供了严格的顺序保证,即客户端发起的更新请求将按照它们到达Leader节点的顺序被应用。

5. 原子广播:

   保证一条消息要么被集群中的所有正常节点接收并执行,要么都不执行,这是达成分布式一致性的基础。

在ZAB协议中,超过半数的follower节点成功接受并确认了某个提议(proposal,Leader就认为该提议proposal达成了一致)

6. 安全性与权限管理:

    对于涉及关键服务状态变更的服务而言,还需要有完善的安全控制和访问权限管理机制。

    zookeeper中,通过访问控制列表ACL,保证了安全性和权限管理

7. 性能优化:

   在满足一致性需求的同时,还要尽可能地减少延迟,提高系统的吞吐量,比如通过批量处理请求、缓存优化等方式来提升效率。

8. API 设计与使用场景支持:

   提供易用且能满足各类分布式协调问题的API,如创建临时/持久节点、监控节点变化、实现分布式锁等功能。

     总之,构建分布式一致性软件不仅要求底层数据模型和算法的强大支撑,还需要考虑到实际应用场景的各种复杂情况,从而确保在各种异常情况下都能保持数据的一致性和系统的高可用性。


zookeeper在性能优化方面的体现:

1)读写优化:
   ZooKeeper的读操作是非事务性的,通常情况下是直接从内存中读取数据,因此读性能非常高。
   写操作是事务性的,并且要求在集群中的大多数节点(法定数量)上完成持久化和复制。尽管写操作涉及到多个节点,但ZooKeeper通过高效的协议设计来减少网络通信和磁盘IO。

2)批量处理:
   ZooKeeper支持客户端进行批量请求,将多个更新操作打包在一起提交,从而减少了网络交互次数,提高了吞吐量。

3)快照与事务日志机制:
   ZooKeeper采用定期快照(Snapshot)的方式记录数据树的状态,同时维护一个事务日志(Transaction Log),用于记录每次数据变更的详细信息。
   当需要恢复数据时,首先加载最新的快照,然后重播事务日志中的所有变更操作,这样可以快速恢复到任意时间点的数据状态,同时也确保了对写入性能的影响最小。

4)FIFO有序性:
   ZooKeeper保证客户端的所有更新请求按照FIFO(先进先出)顺序执行,这简化了客户端的实现,并使得系统内部能高效地处理请求。

5)异步刷盘:
   ZooKeeper使用异步刷盘策略,即Leader节点接收到事务请求后,会在内存中先记录并转发给Follower,然后异步地将这些事务信息刷到磁盘,以减少同步IO带来的延迟。

6)数据压缩与存储优化:
   ZooKeeper针对其特定的数据结构进行了优化,比如每个节点的数据存储都是紧凑的,并可能支持数据压缩等技术来进一步降低存储空间需求和提高I/O效率。

7)连接管理与心跳机制:
   ZooKeeper通过心跳检测机制保持与客户端和服务端之间的连接,及时发现并处理失效节点,从而避免无效的等待和资源浪费。

综上所述,ZooKeeper通过一系列的设计和优化措施,在保证数据一致性和高可用的同时,也尽可能地提升了系统的整体性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/702613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[git] 根据master更新本地分支

git 当前分支 t1 拉取远程master分支, 并更新将master分支合并到当前分支t1 git fetch origin master git merge origin/master t1第一行命令 git fetch origin master 会从远程仓库中获取最新的 master 分支代码,将其保存到本地的 origin/master 分支。 第二行命…

数据库原理及应用(MySQL版在线实训版)

学习视频:学生学习页面 (xueyinonline.com) 头歌实验:虚拟教研室-数据库原理及应用 (educoder.net) 习题答案:数据库原理及应用(MySQL版在线实训版)-习题答案 陈业斌 - 道客巴巴 (doc88.com)

[C++]虚函数用法

讲虚函数之前先讲讲面向对象的三大特性:封装、继承、多态。 1、封装 封装是指将数据(属性)和操作数据的方法(函数)封装在一个单元中,这个单元就是类。封装的主要目的是隐藏类的内部实现细节,只…

Java内部类的使用与应用

内部类的使用与应用 1. 内部类用法 普通内部类: 实例化内部类对象需要先实例化外部类对象,然后再通过OuterClassName.new InnerClassName()方式实例化内部类。内部类对象在创建后会与外部类对象秘密链接,因此无法独立于外部类创建内部类对象…

JWT学习笔记

了解 JWT Token 释义及使用 | Authing 文档 JSON Web Token Introduction - jwt.io JSON Web Token (JWT,RFC 7519 (opens new window)),是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC 7519)。该 token 被设计为紧凑…

微服务-微服务Spring Security OAuth 2实战

1. Spring Authorization Server 是什么 Spring Authorization Server 是一个框架,它提供了 OAuth 2.1 和 OpenID Connect 1.0 规范以及其他相关规范的实现。它建立在 Spring Security 之上,为构建 OpenID Connect 1.0 身份提供者和 OAuth2 授权服务器产…

高等数学(极限)

目录 一、数列 二、极限 2.1 讲解 2.2 例题 一、数列 按照一定次数排列的一列数: 其中 叫做通项。 对于数列,如果当n无限增大时,其通项无限接近于一个常数A,则称该数列以A为极限或称数列收敛于A,否则称数列为发散…

C语言所有标准头文件汇总及功能说明

文章目录 #include <assert.h>#include <ctype.h>#include <errno.h>#include <float.h>#include <fenv.h>#include <inttypes.h>#include <limits.h>#include <locale.h>#include <math.h>#include <process.h>#…

OpenCV(2)

1.OpenCV的模块 其中core、highgui、imgproc是最基础的模块&#xff0c;该课程主要是围绕这几个模块展开的&#xff0c;分别介绍如下&#xff1a; core模块实现了最核心的数据结构及其基本运算&#xff0c;如绘图函数、数组操作相关函数等。highgui模块实现了视频与图像的读取…

【JVM】计数器引用和可达性分析

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;JVM ⛺️稳中求进&#xff0c;晒太阳 C/C的内存管理 在C/C这类没有自动垃圾回收机制的语言中&#xff0c;一个对象如果不再使用&#xff0c;需要手动释放&#xff0c;否则就会出现内存泄漏…

一文get,最容易碰上的接口自动化测试问题汇总

本篇文章分享几个接口自动化用例编写过程遇到的问题总结&#xff0c;希望能对初次探索接口自动化测试的小伙伴们解决问题上提供一小部分思路。 sql语句内容出现错误 空格&#xff1a;由于有些字段判断是变量&#xff0c;需要将sql拼接起来&#xff0c;但是在拼接字符串时没有…

对象池模板

概述 对象池的引入也是嵌入式开发的常用方法&#xff0c;也是内存预分配的一种&#xff0c;主要是用来隐藏全局对象的跟踪&#xff0c;通常预内存分配是通过数组来实现。 CMake配置 cmake_minimum_required(VERSION 3.5.1)project(objpool)add_executable(objpool objpool.cp…

C语言《数据结构与算法》安排教学计划课设

背景&#xff1a; 10、安排教学计划 (1) 问题描述。 学校每学期开设的课程是有先后顺序的&#xff0c;如计算机专业&#xff1a;开设《数据结构》课程之前&#xff0c;必须先开设《C语言程序设计》和《离散数学》课程&#xff0c;这种课程开设的先后顺序称为先行、后继课程关…

在使用nginx的时候快速测试配置文件,并重新启动

小技巧 Nginx修改配置文件后需要重新启动&#xff0c;常规操作是启动在任务管理器中关闭程序然后再次双击nginx.exe启动&#xff0c;但是使用命令行就可以快速的完成操作。 将cmd路径切换到nginx的安装路径 修改完成配置文件后 使用 nginx -t校验nginx 的配置文件是否出错 …

【Swift学习路线讲解】

Swift学习路线讲解 Swift学习路线 Swift学习路线 Swift 是 Apple 开发的一种强大的编程语言&#xff0c;专门为 iOS、macOS、watchOS 和 tvOS 应用程序设计&#xff0c;如果你想成为一名 Swift 开发者&#xff0c;以下是一个推荐的学习路线&#xff1a; 基础概念&#xff1a; …

海豚调度DolphinScheduler入门学习

DS简介&#xff1a; DolphinScheduler 是一款分布式的、易扩展的、高可用的数据处理平台&#xff0c;主要包含调度中心、元数据管理、任务编排、任务调度、任务执行和告警等模块。其技术架构基于 Spring Boot 和 Spring Cloud 技术栈&#xff0c;采用了分布式锁、分布式任务队列…

vue3 实现 el-pagination页面分页组件的封装以及调用

示例图 一、组件代码 <template><el-config-provider :locale"zhCn"><el-pagination background class"lj-paging" layout"prev, pager, next, jumper" :pager-count"5" :total"total":current-page"p…

深度学习基础(四)医疗影像分析实战

之前的章节我们初步介绍了卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;&#xff1a; 深度学习基础&#xff08;三&#xff09;循环神经网络&#xff08;RNN&#xff09;-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞17次&#xff0c;收…

机器学习基础(六)TensorFlow与PyTorch

导语&#xff1a;上一节我们详细探索了监督与非监督学习的结合使用。&#xff0c;详情可见&#xff1a; 机器学习基础&#xff08;五&#xff09;监督与非监督学习的结合-CSDN博客文章浏览阅读4次。将监督学习和非监督学习结合起来&#xff0c;就像将两种不同的艺术形式融合&a…

1298 - 摘花生问题

题目描述 Hello Kitty 想摘点花生送给她喜欢的米老鼠。她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上面有若干颗花生&#xff0c;经过一株花生苗就能摘走该它上面所有…