分布式技术导论 — 探索分析从起源到现今的巅峰之旅(分布式协议)

news2024/10/7 3:14:42

探索分析从起源到现今的巅峰之旅2

  • 前提回顾
    • 最终一致性
      • Clock时钟机制
        • 局限性
    • CAP协议
      • CAP理论的三要素
      • A和C机制的保障
      • P分区容错性
        • AP机制的保障
        • CP机制的保障
      • 分布式系统方向
  • 分布式系统之Zookeeper
    • ZK的作用和职责
      • 协调服务
      • 命名服务
      • 构建高可靠服务
    • ZK的常见用法
    • ZK基本原理
    • ZK的顺序一致性
      • ZK的选举原则
    • ZK的数据安全性
      • 数据的持久化保存


前提回顾

在上一篇文章,我们已经探讨了在处理数据一致性问题中的角色。当面对数据时序的挑战时,这意味着我们已主动放弃了对强一致性(Strong Consistency)的坚守,转而追求最终一致性(Eventually Consistency)这一更为宽松的标准。

最终一致性

最终一致性并非承诺任何时候、任何节点的数据状态皆完全一致,而是保证在数据更新停止后,所有节点最终将达成一种协调一致的状态。这一概念乍一听似乎充满了不确定性,让人不禁产生疑虑。

Clock时钟机制

解决执行顺序的难题,诸多系统采用了Clock时钟技术,通过消息传递机制来梳理和推断事件发生的先后次序,时钟机制依赖于节点间逻辑时间戳的交换来构建时序关系。
在这里插入图片描述

局限性

如果节点与其他节点通信不畅,或者时钟不同步,孤立运行或消息交换频率极低,那么由此得出的时序信息便会失准

Clock并不承诺能够完美重建全局的全序关系(total order),而仅能确保部分有序关系(partial order)。它可能仅能告诉我们诸如“A事件早于D事件发生”、“B事件早于D事件发生”、“C事件早于D事件发生”这类相对顺序信息,而对于A、B、C三者之间的直接时序关系,则因缺乏全序信息而无法确定。
在这里插入图片描述
最终一致性及其依赖的“Clock时钟机制”在确保数据时序准确性方面的确存在局限性。那么,为何我们仍会选择使用这种看似不可靠的机制呢?在于权衡与取舍。在特定场景下,我们愿意牺牲强一致性,以换取其他关键特性,如更高的系统可用性、更低的延迟或更易于扩展的架构。

CAP协议

接下来,我们将进一步探讨CAP定理,这一理论揭示了在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容忍性(Partition Tolerance)三个重要属性无法同时完美满足,系统设计者必须在三者间做出抉择,最多只能实现其中任意两个属性的理想状态。

CAP理论的三要素

在构建分布式系统时,我们通常要求系统必须具备分区容忍性P。这意味着即使在网络分区或节点故障的情况下,系统仍能保持一定的可用性和功能。这也意味着我们需要在强一致性C和可用性A之间做出权衡和取舍,以找到最适合系统需求的平衡点。
在这里插入图片描述

  • **C(强一致性):**在任何时刻,无论我们从集群中的哪两个节点获取状态信息,得到的结果都应是完全一致的。
    • 确保了数据的高度一致性和准确性,使得集群中的各个节点始终保持在同步状态。
  • **A(可用性):**只要集群中的某个节点没有出现故障或损坏,它就必须能够正常提供服务。
    • 确保了系统的高可用性,即使面临部分节点故障或负载不均的情况,也能保证用户请求得到及时处理。
  • **P(分区容忍性):**当集群由于网络问题或节点故障等原因被分割成两个或更多不完整的子集群时,整个系统仍能够保持正常运作。
    • 分区容忍性使得系统能够在复杂和不确定的网络环境下保持稳定性和可靠性,从而为用户提供持续的服务。

A和C机制的保障

在分布式系统中,通常存在一种权衡:这三个关键特性(强一致性C、可用性A和分区容忍性P)最多只能同时满足两个

假设,我们有两台位于不同机器上的节点,并采用2PC(两阶段提交)机制来存储数据,即只有当所有节点都同意后,数据才会被存入。

  • A:多个机器上存储数据,能保证可用性
  • C:2PC机制,保证每个节点的数据都一致

但是,一旦系统发生分区或者任何一个节点出现故障,整个系统就会陷入无法运作的状态。在这种情况下,虽然强一致性C和可用性A得到了保障,但分区容忍性P却无法实现。

P分区容错性

假设我们有两台节点部署在不同的机器上,并且这些节点必须能够容忍网络分区的情况。那么,当分区真的发生时,我们应该如何应对呢?
在这里插入图片描述

AP机制的保障

选择保持系统的可用性。即使两个节点之间无法相互通信,只要它们都还在运行,就可以让它们继续提供正常服务

这样的做法会导致一个问题:其中一个节点上的变化无法传递到另一个节点,因此两边的数据可能会变得不一致。更糟糕的是,可能会出现裂脑的情况,即两边都认为自己是主节点并尝试写入数据,这就会引发我们之前讨论过的实践顺序问题。我们牺牲了数据的一致性来换取系统的可用性。(无一致性——A和P)

CP机制的保障

选择是保持数据的一致性。为了避免之前提到的不一致问题,我们必须在分区发生时停掉其中一个节点

这样做可以确保数据在任何时候都是一致的,但代价是牺牲了系统的可用性。因为在停掉节点的期间,系统无法处理任何请求或提供服务。(无可用性——C和P)

分布式系统方向

在分布式系统中,当面对网络分区的情况时,我们需要在可用性和一致性之间做出权衡。根据系统的具体需求和业务场景,我们可以选择牺牲其中一个特性来换取另一个特性的保障。
在这里插入图片描述
在实际应用中,我们很难完全避免网络分区或节点故障的发生。如果我们将请求分散到所有机器上执行,一旦某个节点出现故障或网络分区,整个系统就可能受到影响。


分布式系统之Zookeeper

Zookeeper在分布式系统中扮演着举足轻重的角色。无论是用于维护元数据、实现分布式锁,还是作为命名服务和高可用性的保障,

ZK的作用和职责

在当前众多的分布式系统中,Zookeeper被广泛应用,其强大而灵活的功能为系统提供了坚实的支撑,Zookeeper可用于维护分区元数据。
在这里插入图片描述

协调服务

Zookeeper帮助系统实现各种分布式协调功能。例如,它可以用来管理分布式应用程序中的元数据,确保数据的一致性和准确性。此外,还可以用来实现分布式锁,帮助多个进程或线程在访问共享资源时避免冲突。

命名服务

Zookeeper还可以作为命名服务,为分布式系统中的各个节点提供统一的命名和寻址机制。通过Zookeeper,我们可以轻松地定位和管理分布式系统中的各个组件,实现服务的动态发现和注册。

构建高可靠服务

能够在部分节点故障或网络分区的情况下保持系统的正常运行。这使得Zookeeper在构建高可靠性的分布式系统时具有得天独厚的优势。

ZK的常见用法

  • 共享元数据:实现元数据的共享,确保在分布式系统中,各个节点能够访问和更新统一、一致的元数据信息。

  • 监控成员节点状态:实时监控集群中各个成员节点的健康状况,包括节点的在线状态、负载情况等。

  • 维护集群成员列表:动态维护集群的成员列表,一旦有节点出现故障或离线,能够迅速感知并做出相应的调整,确保集群的稳定性和可用性。

  • 选举Leader节点:利用分布式协调机制,能够高效地协助完成Leader节点的选举工作。一旦选举完成,Leader节点将承担起管理集群、协调各个节点工作的重任,确保整个系统的正常运行。

ZK基本原理

ZK的数据以树状结构进行组织,其节点称为znode,可用于存放数据。
在这里插入图片描述
由于znode中的数据对于众多元素而言至关重要,ZK设计了一套通知机制。当znode中的数据发生更新时,ZK能够及时向那些事先对特定znode注册了watcher的进程发送通知。
在这里插入图片描述
临时节点:临时节点是一种特殊的znode称为ephemeral node,它主要用于监控集群成员的状态。这种znode与创建它的成员的session状态紧密关联。如果成员的session进行销毁,那么相应的ephemeral node将被自动删除。

因此,其他成员若在此ephemeral node上设置了watcher,便能在检测到节点挂掉(即session失效)时收到通知。
在这里插入图片描述
为了确保系统的稳定性和高可用性,所有成员都会对与master关联的ephemeral node注册watcher。一旦master失效,能够侦测到这一变化的成员将触发leader election过程,从而确保集群能够迅速恢复并继续提供服务。

ZK的顺序一致性

ZK的设计确保了全局顺序的一致性,其核心在于仅由Leader处理写入请求。即便在发生网络分区的情况下,依然能够维持服务的可用性,这得益于之前提到的Quorum算法(达到最低投票门槛的成员集合),ZK是一个偏向于一致性(C)和可用性(A)的分布式系统。

ZK的成员角色分为Leader和Follower两种(学习者不参与投票,暂时忽略不计)。在一个Quorum中,最多只能有一个Leader,其余均为Followers。

ZK的选举原则

Leader选举的目的便是为了从Quorum中选出一位Leader。一个Quorum的成员数需达到最低投票门槛,这通常意味着成员数应大于ZK节点总数的一半。

例如,若共有5个ZooKeeper节点,则Quorum中至少应有三个成员(3>2.5),这样的设计确保了即使集群被分割成两部分,其中一个分区的节点数也不足以形成Quorum。当不足以形成Quorum时,该分区将不允许对外提供服务。

ZK的数据安全性

ZK将硬盘视为磁带般的存储介质,而将数据主要存放在DRAM(或暂时不考虑的Flash)中。然而,单机DRAM的容量终究有限,因此我们需要借助一系列技术手段,如数据压缩、分布式系统等,来应对这一挑战。

数据的持久化保存

DRAM具有易失性,一旦机器断电,存储其中的数据便会消失无踪。如何确保数据在断电后不会丢失呢?这里有两个可行的选项:

  • 采用持久化策略,即在硬盘上记录变化日志。这样,即使DRAM中的数据丢失,我们也可以通过读取这些日志来恢复数据。
  • 采用复制策略,在其他机器上创建数据的副本。这样,即使某一台机器的DRAM数据丢失,其他机器上的副本仍然可用。

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

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

相关文章

将粘贴文本进输入框中时不带有任何格式(包括背景颜色和字体)解决办法

只需要四行代码解决&#xff0c;这里用到vue3里面的事件 paste"" 代码块&#xff1a; <div paste"handlePaste"></div>//粘贴文本时不带有任何格式&#xff08;包括背景颜色和字体&#xff09;function handlePaste(event) {event.preventDef…

【计算机毕业设计】234基于微信小程序的中国各地美食推荐平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【数据分析】用Python做事件抽取任务-快速上手方案

目录 方法一&#xff1a;使用OmniEvent库安装OmniEvent使用OmniEvent进行事件抽取OmniEvent优点缺点 方法二&#xff1a;使用大模型使用GPT网页版进行事件抽取事件类型列表 大模型优点缺点 总结 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;事件抽取是一项关键任…

多组学双疾病串扰怎么做?PAN-AD九个机器学习+MR+单细胞,工作量不少

说在前面 “串扰”这个名词听起来高级了一个level&#xff0c;其实就是MR-通路的双疾病联合分析。虽然是筛选标志物的思路&#xff0c;但是工作量不小&#xff0c;作者还收集了13个不同AD自身免疫疾病数据集用于验证自己的机器学习模型&#xff0c;分析就是一些常规的WGCNA、P…

基于sass模式Java语言+MySQL + MyCat开发的his系统源码 HIS系统住院业务流程 HIS系统住院流程化管理

基于sass模式Java语言MySQL MyCat开发的his系统源码 HIS系统住院业务流程 HIS系统住院流程化管理 HIS系统住院业务&#xff0c;该系统为医院提供了一套完整的住院业务流程解决方案&#xff0c;旨在提高住院管理的效率和精确度。通过HIS系统&#xff0c;医院工作人员可以某轻理…

DzzOffice集成功能最丰富的开源PHP+MySQL办公系统套件

DzzOffice是一套开源办公套件&#xff0c;旨在为企业和团队提供类似“Google企业应用套件”和“微软Office365”的协同办公平台。以下是对DzzOffice的详细介绍&#xff1a; 主要功能和应用&#xff1a; 网盘&#xff1a;支持企业、团队文件的集中管理&#xff0c;提供文件标签…

Oracle 是否扼杀了开源 MySQL

Oracle 是否无意中扼杀了开源 MySQL Peter Zaitsev是一位俄罗斯软件工程师和企业家&#xff0c;曾在MySQL公司担任性能工程师。大约15年前&#xff0c;当甲骨文收购Sun公司并随后收购MySQL时&#xff0c;有很多关于甲骨文何时“杀死MySQL”的讨论。他曾为甲骨文进行辩护&#…

攻防演练“轻装上阵” | 亚信安全信舱ForCloud 打造全栈防护新策略

网络世界攻防实战中&#xff0c;攻击风险已经从代码到云横跨全栈技术点&#xff0c;你准备好了吗 云服务器&#xff0c;攻击众矢之的 2022年超过38万个Kubernetes API服务器暴露公网&#xff0c;成为攻击者目标。云服务器&#xff0c;尤其是开源设施&#xff0c;一直以来不仅是…

物理隔离后数据怎么导入和导出?安全U盘一键解决

政府单位、军工和科研所、航空航天企业、金融机构、医疗单位、电力企业、生物制药实验室等企业及单位&#xff0c;因研发和生产过程、或日常经营中涉及大量敏感信息和技术&#xff0c;需要通过物理隔离来确保网络的安全性。因此&#xff0c;多采用物理隔离的方式进行网络建设。…

【Unity实战篇】| 快速制作一个简易时钟,包括2D和3D时钟

前言 【Unity实战篇】| 快速制作一个时钟&#xff0c;包括2D和3D时钟一、2D时钟制作1.1 钟表盘制作1.2 指针制作1.3 钟表搭建1.4 设置时钟的中心点1.5 时钟旋转逻辑 二、3D时钟制作2.1 搭建表盘和指针2.2 调整指针的位置和节点2.3 时钟旋转逻辑 总结 前言 时钟 这个东西想必不…

租房项目之并发缺失数据问题

前奏&#xff1a;本项目是一个基于django的租房信息获取项目。本次博客牵扯到两个版本&#xff0c;集中式分布以及分布式部署&#xff08;两个版本的ui不同&#xff0c;集中式用的是老版ui&#xff0c;分布式使用的是新版ui&#xff09;&#xff1b; 项目链接&#xff1a;http…

Peewee,一个既小巧又强大的 Python 库-轻松实现数据库的增删改查

目录 01初识 Peewee 为什么选择 Peewee? 02安装与配置 安装 Peewee 配置 Peewee 03定义模型 定义简单模型 定义复杂模型 04基本操作 创建记录 查询记录 更新记录 删除记录 05高级操作 复杂查询 事务处理 使用信号 模型迁移 06实战案例 简单博客系统 任务管…

2024年金地杯山西省大学生数学建模竞赛B题D题论文代码分析

2024金地杯数学建模B题和金地杯数学建模D题32页论文和代码已完成&#xff0c;代码为B题D题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求…

elasticsearch过滤器filter:原理及使用

码到三十五 &#xff1a; 个人主页 目录 一、引言二、Elasticsearch的过滤器概述三、使用DSL进行过滤操作术语过滤范围过滤复合过滤 四、优化策略五、结语 一、引言 Elasticsearch是一个功能强大的开源搜索引擎&#xff0c;广泛应用于各种数据检索和处理场景。在Elasticsearch…

C++ | Python气泡表面张力和预期形态及上升速度数值模型

&#x1f4dc;模型-用例 &#x1f4dc;流体力学&#xff1a;C风流和MATLAB | Python | CUDA 库埃特流泊肃叶流薄膜流体 | &#x1f4dc;神经网络&#xff1a;Python捕捉重叠气泡单体运动&#xff0c;算法测速 ✒️C风成和风蚀建模 风成过程是指由风在地表或近地表引起的侵蚀…

大跨度气膜综合馆有哪些应用场景—轻空间

1. 体育场馆 气膜综合馆广泛应用于各类体育场馆&#xff0c;如足球场、篮球场、网球场、游泳馆等&#xff0c;满足不同体育项目的需求。 2. 大型展览 气膜馆的宽敞空间和灵活布局&#xff0c;非常适合举办各类大型展览、交易会和博览会&#xff0c;提供充足的展示和活动空间。…

深入剖析 Laravel 框架:构建高效PHP应用的最佳实践

引言 随着互联网的高速发展&#xff0c;PHP 作为一门广泛使用的服务器端脚本语言&#xff0c;始终备受开发者青睐。而在众多 PHP 框架中&#xff0c;Laravel 凭借其优雅的设计和高效率&#xff0c;成为了构建现代 Web 应用的热门选择。本文将从零开始&#xff0c;探讨如何使用 …

聊聊redis中的字典的实现

写在文章开头 redis作为非关系数据库&#xff0c;其底层采用了字典(也称为映射)保存键值对。本文会基于源码分析的方式带你了解redis中这一常见数据结构的精巧设计&#xff0c;希望对你有帮助。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java c…

需求虽小但是问题很多,浅谈JavaScript导出excel文件

最近我在进行一些前端小开发&#xff0c;遇到了一个小需求&#xff1a;我想要将数据导出到 Excel 文件&#xff0c;并希望能够封装成一个函数来实现。这个函数需要接收一个二维数组作为参数&#xff0c;数组的第一行是表头。在导出的过程中&#xff0c;要能够确保避免出现中文乱…

【单片机】DS2431芯片,读写128个字节,程序

ds2431pt&r stm32读写程序&#xff1a; 部分程序&#xff1a; #include "sys.h" #include "delay.h" #include "usart.h"#include <stdio.h> #include <stdlib.h> #include <string.h>#include "sys.h" #incl…