分布式一致性软件-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通过一系列的设计和优化措施,在保证数据一致性和高可用的同时,也尽可能地提升了系统的整体性能。
相关文章:
分布式一致性软件-zookeeper
在我们进行软件开发过程中,为了实现某个功能可能借助多个软件,如存储数据的数据库软件:MySQL,Redis;消息中间件:rocketMq,kafka等。那么在分布式系统中,如果想实现数据一致性&#x…...
企业计算机服务器中了babyk勒索病毒怎么办?Babyk勒索病毒解密数据恢复
随着网络技术的应用与普及,越来越多的企业采用了数字化办公模式,数字化办公模式可以为企业提供强有力的数据支撑,可以为企业的发展方向与产品业务调整做好基础工作。但网络是一把双刃剑,在为企业提供便利的同时,也为企…...
板块一 Servlet编程:第五节 Cookie对象全解 来自【汤米尼克的JAVAEE全套教程专栏】
板块一 Servlet编程:第五节 Cookie对象全解 一、什么是CookieCookie的源码 二、Cookie的具体操作(1)创建Cookie(2)获取Cookie(3)设置Cookie的到期时间(4)设置Cookie的路径…...
自动驾驶---Motion Planning之Path Boundary
1 背景 在上文《自动驾驶---Motion Planning之LaneChange》中,笔者提到过两种LaneChange的思路,这里再简单回顾一下:(1)利用Routing和周围环境的信息,决定是否进行换道的决策;(2)采用的博弈思想(蒙特卡洛树搜索---MCTS)决定是否进行换道的决策。不管是变道,避让还是…...
Leetcode 3048. Earliest Second to Mark Indices I
Leetcode 3048. Earliest Second to Mark Indices I 1. 解题思路2. 代码实现 题目链接:3048. Earliest Second to Mark Indices I 1. 解题思路 这一题的话基础的思路就是二分法查找最小的可以将所有的数字都mark上的最小位置。 因此,这里的问题就会变…...
从源码学习单例模式
单例模式 单例模式是一种设计模式,常用于确保一个类只有一个实例,并提供一个全局访问点。这意味着无论在程序的哪个地方,只能创建一个该类的实例,而不会出现多个相同实例的情况。 在单例模式中,常用的实现方式包括懒汉…...
axios介绍和使用
1. Axios是什么 Axios框架全称(ajax – I/O – system) Axios是一个基于Promise的JavaScript HTTP客户端,用于浏览器和Node.js环境。它可以发送HTTP请求并支持诸如请求和响应拦截、转换数据、取消请求以及自动转换JSON数据等功能。 Axios提…...
redis雪崩问题
Redis雪崩问题是指在Redis缓存系统中,由于某些原因导致大量缓存数据同时失效或过期,导致所有请求都直接访问数据库,从而引发数据库性能问题甚至宕机的情况。 造成Redis雪崩问题的原因主要有以下几个: 缓存数据同时失效ÿ…...
[SUCTF 2019]EasySQL1 题目分析与详解
一、题目介绍 1、题目来源: BUUCTF网站,网址:https://buuoj.cn/challenges 2、题目描述: 通过以上信息,拿到flag。 二、解题思路 首先打开靶机,尝试输入1查看回显,回显如图所示:…...
TestNG与ExtentReport单元测试导出报告文档
TestNG与ExtentReport集成 目录 1 通过实现ITestListener的方法添加Reporter log 1.1 MyTestListener设置 1.2 输出结果 2 TestNG与ExtentReporter集成 2.1 项目结构 2.2 MyExtentReportListener设置 2.3 单多Suite、Test组合测试 2.3.1 单Suite单Test 2.3…...
【JavaEE】_form表单构造HTTP请求
目录 1. form表单的格式 1.1 form表单的常用属性 1.2 form表单的常用搭配标签:input 2. form表单构造GET请求实例 3. form表单构造POST请求实例 4. form表单构造法的缺陷 对于客户端浏览器,以下操作即构造了HTTP请求: 1. 直接在浏览器…...
Mysql中INFORMATION_SCHEMA虚拟库使用
虚拟库字段讲解 #查看INFORMATION_SCHEMA的表信息 DESC information_schema.tables; 重要列: TABLE_SCHEMA #表所在的库 TABLE_NAME #表名 ENGINE #表的存储引擎 TABLE_ROWS #表的行数 DATA_LENGTH #表数据行占用的字节数 AVG_ROW_LENGTH #平均行长度 INDEX_LENGTH…...
【《高性能 MySQL》摘录】第 2 章 MySQL 基准测试
文章目录 2.1 为什么需要基准测试2.2 基准测试的策略2.2.1 测试何种指标 2.3 基准测试方法2.3.1 设计和规划基准测试2.3.2 基准测试应该运行多长时间2.3.3 获取系统性能和状态2.3.4 获得准确的测试结果2.3.5 运行基准测试并分析结果2.3.6 绘图的重要性 2.4 基准测试工具…...
常用的Web应用程序的自动测试工具有哪些
在Web应用程序的自动化测试领域,有许多流行的工具可供选择。以下是一些常用的Web自动化测试工具: 1. Selenium - Selenium是最流行的开源Web应用程序自动化测试套件之一。 - 它支持多种编程语言,如Java、C#、Python、Ruby等。 …...
人工智能与开源机器学习框架
链接:华为机考原题 TensorFlow是一个开源的机器学习框架,由Google开发和维护。它提供了一个针对神经网络和深度学习的强大工具集,能够帮助开发人员构建和训练各种机器学习模型。 TensorFlow的基本概念包括: 张量(Ten…...
高通XBL阶段读取分区
【需求】: 在某些场景下,需要在XBL阶段读取分区数据,需要验证xbl阶段方案 这里主要以裸分区为例,比如oem分区。 1、创建一个1MB大小的oem.img,写入内容“test oem partition” 创建方式: dd if/dev/null …...
[极客大挑战2019]upload
该题考点:后缀黑名单文件内容过滤php木马的几种书写方法 phtml可以解析php代码;<script language"php">eval($_POST[cmd]);</script> 犯蠢的点儿:利用html、php空格和php.不解析<script language"php"&…...
[FastDDS] 基于eProsima FastDDS的移动机器人数据中间件
[FastDDS] 基于eProsima FastDDS的移动机器人数据中间件 注明:无 本栏目主要讲述,基于eProsima FastDDS的移动机器人数据中间件的实现、使用、性能测试。 What is [ FastDDS ]: eProsima Fast DDS是DDS(数据分发服务)规范的C实现…...
实现外网手机或者电脑随时随地远程访问家里的电脑主机(linux为例)
文章目录 一、背景概要二、安装配置花生壳软件(linux版本)三、手机端(外网)验证连接四、安装ubuntu20server版系统遇到的问题记录 一、背景概要 由于经常在遇到某些问题的时候,针对某一个场景的理解,需要借助于自己的电脑去编译(aosp/linux/qemu)代码查…...
spring boot集成redis
引入依赖 <!-- redis依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- 连接池依赖 --><dependency><groupId>org.ap…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...
脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)
一、OpenBCI_GUI 项目概述 (一)项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台,其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言,首次接触 OpenBCI 设备时,往…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...
C++实现分布式网络通信框架RPC(2)——rpc发布端
有了上篇文章的项目的基本知识的了解,现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
GAN模式奔溃的探讨论文综述(一)
简介 简介:今天带来一篇关于GAN的,对于模式奔溃的一个探讨的一个问题,帮助大家更好的解决训练中遇到的一个难题。 论文题目:An in-depth review and analysis of mode collapse in GAN 期刊:Machine Learning 链接:...
