绯闻女孩不只会八卦:从“验明正身”到“抓内鬼”,Gossip的进阶玩法

news/2025/9/20 2:13:40/文章来源:https://www.cnblogs.com/poemyang/p/19101931

绯闻女孩不只会八卦:从“验明正身”到“抓内鬼”,Gossip的进阶玩法

默克尔树
默克尔树(Merkle Tree)是由计算机科学家Ralph Merkle多年前提出,并以他本人的名字来命名,也叫哈希树。默克尔树是一种树形数据结构,通常是二叉树,其中每个叶子节点是数据块的哈希值,而每个非叶子节点是其所有子节点哈希值的哈希。树根的哈希值(Merkle Root)代表了整个数据集的摘要。

image

比如想验证Y这个值是否被包含在某个区间上,那么只需要验证H(Z)、H(WX)的哈希值,构成默克尔树路径就可以证明。
1)获取Y的哈希值H(Y);
2)通过H(Z)的哈希值,计算得到H(YZ);
3)通过H(WX)+H(YZ)得到哈希值H(WXYZ);
4)将哈希值H(WXYZ)与根节点哈希值对比,完成验证。
默克尔树和反熵可以结合使用。例如,当一个节点需要与另一个节点同步数据时,可以先比较两个节点的默克尔树。如果默克尔树不一致,就说明两个节点的数据可能不一致。然后,可以通过比较默克尔树的不同部分,找出数据不一致的具体位置,从而只同步不一致的数据,而不是全部数据。这样可以大大提高数据同步的效率。

基于Gossip实现节点的故障检测

单点视角检测
集群中的每个节点, 定期向集群中的其它节点发送消息,用于检测对方是否在线。如果接收消息的节点没有在规定的时间内返回消息,那么,发送消息的节点就会将接收消息的节点标注为疑似下线状态(Probable Fail,Pfail)。

检测信息传播
集群中的各个节点会通过相互发送消息的方式来交换自己掌握的集群中各个节点的状态信息,如在线(Success)、疑似下线(Pfail)、下线(Fail)。例如,当节点C通过消息得知节点 A认为节点B疑似下线时,节点C会更新自己保存的集群状态信息,将从A获得的下线报告保存起来。

基于检测信息作下线判决
如果在一个集群里,超过半数的节点都将某个主节点 X 报告为疑似下线,那么,节点 X 将被标记为下线(Fail),并广播出去,所有收到这条 Fail 消息的节点都会立即将主节点 X 标记为 Fail。至此,故障检测完成。

image

总结:没有银弹,只有权衡
分布式系统是由多个通过网络互连、协同工作的独立计算节点组成的复杂系统,旨在共同完成大规模的存储和计算任务。在其设计与实现过程中,必须面对各种潜在的故障模式,主要包括崩溃故障(节点无响应)和更具挑战性的拜占庭故障(节点行为不可预测甚至恶意)。
为了高效管理海量数据,数据分布策略不可或缺,常见的有哈希分布(均匀但节点变更敏感)、范围分布(利于范围查询但易热点)和一致性哈希(优化节点增删时的数据迁移量)。
为确保数据的持久性和服务的高可用性,副本机制被广泛采用。主流模式包括领导者-追随者模式(强一致性易实现,Leader为瓶颈)和多主复制模式(高写可用性,冲突解决复杂)。选择何种模式取决于对一致性、可用性、写吞吐的具体需求。
在协调节点行为、维护系统状态一致性方面,Lease机制通过有时限的授权来避免“脑裂”等问题,是实现领导者选举和资源互斥的关键。Quorum机制则通过多数派投票原则,为读写操作和共识达成提供了强一致性的数学保障(当W+R > N时)。逻辑时钟,特别是向量时钟,为追踪事件因果关系、检测并发操作和数据冲突提供了有力工具。
Gossip协议作为一种轻量级、去中心化的信息传播方式,在集群成员管理、故障检测和元数据同步等场景中表现出色,尤其适合大规模动态变化的系统。结合默克尔树等技术,可以进一步优化其数据同步效率。
分布式系统的设计本质上是一场复杂的工程权衡。没有万能的“银弹”,主从架构追求强一致性,往往以牺牲部分写性能或增加系统复杂度为代价;而去中心化的多活架构则可能优先保证可用性和分区容忍性,但一致性模型更为宽松(通常是最终一致性),且冲突解决更具挑战。
深刻理解并熟练运用数据分片、副本同步、状态协调以及容错处理这些核心机制,是在性能、可靠性、成本和开发维护复杂度之间找到最佳平衡点,从而构建出卓越分布式系统的关键所在。

很高兴与你相遇!如果你喜欢本文内容,记得关注哦!!!

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

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

相关文章

reLeetCode 热题 100- 15. 三数之和 - MKT

reLeetCode 热题 100- 15. 三数之和1 排序 2 双指针 位置卡死逐步对着移动 左右2个指针 3 while 跳过重复的数 双指针class Solution { public:vector<vector<int>> my_test1(vector<int>& nums…

US$94 T300 Key Programmer Spanish Blue 2016 V16.8 Full

T300 Key Programmer Spanish 2016 V16.8 Full BlueNotice: 1. It Cant Do Ford, GM and Holden2. In order to make the pacakge easy to pass through customs, we dont take the case into the package to make the…

US$99 VVDI MB NEC Key Adaptor

VVDI MB NEC Key AdaptorNEC Key Adaptor Support Versions:(Without soldering/ Without wire jumper/ Not need other adaptor)Updating support more versionsSupport v51 v57 get password directlySupport normal…

testuserpython

import json import boto3 import flask import psycopg2 from flask import request app = flask.Flask(name) @app.route(/) def route_root(): return flask.jsonify(OK) dynamodb = boto3.client(dynamodb) @app.r…

Python-Pathlib库

Pathlib 是 Python 3.4+ 中引入的面向对象的文件系统路径处理库,提供了比传统 os.path 更直观、更 Pythonic 的方式来处理文件路径和文件系统操作。Python Pathlib 库指南 Pathlib 是 Python 3.4+ 中引入的面向对象的…

反省

我大抵是废了、累了。

US$34 Bluetooth Adapter for Yanhua Mini ACDP

Bluetooth Adapter for Yanhua Mini ACDPPackage List:1pc x Bluetooth Adapter for Yanhua Mini ACDP Pictures of Bluetooth Adapter for Yanhua Mini ACDPBluetooth Adapter for Yanhua Mini ACDP, now only need U…

global 设置内核源码在线浏览

global 设置内核源码在线浏览获取内核源码放到http家目录 /var/www/html/linux-5.10.0-136.12.0.86.x86_64 下载编译global wget https://ftp.gnu.org/gnu/global/global-6.6.tar.gz tar xf global-6.6.tar.gz cd glob…

[Nacos/Docker/MCP] Nacos 3.x : 为 AI MCP 而生

0 序言 : Nacos 3.x 的发布2025年4月28日,Nacos 3.0 正式发布:MCP Registry、安全零信任、链接更多生态升级 MCP Registry,围绕着 MCP 服务管理,MCP 多种类型注册,包含 MCP Server 注册、编排、动态调试和管理,…

牛客周赛 Round 108 CDEF题解

C、小苯的数字合并 题意: 小苯有一个长度为 $ n $ 的数组 $ a_1, a_2, \ldots, a_n $,他可以对 $ a $ 进行任意次“数字合并”操作,具体地,一次数字合并操作描述为:选择一个下标 $ i $ ($ 1 \leq i < |a| $),…

[LeetCode] 3484. Design Spreadsheet

A spreadsheet is a grid with 26 columns (labeled from A to Z) and a given number of rows. Each cell in the spreadsheet can hold an integer value between 0 and 105. Implement the Spreadsheet class: Spre…

Redis的使用问题

1:穿透,访问缓存中没有,数据库中也没有的数据,直接忽略缓存层,直达数据库 解决方案:方案一,查一个不存在的数据时,给一个设置一定过期间的key的数据,存入缓存,方案二:布隆过滤器,在将数据存入Redis时,会同…

AIGC拾遗:Flash Attention

前言 对于attention操作,其计算复杂度随着序列长度的增加呈平方倍的增长。因此,出现了诸多尝试将计算复杂度降低为\(O(n)\)的注意力机制。然而,这些方法忽略了计算时的IO复杂度的影响,频繁的内存交换也在长序列计算…

深度好文-风雨飘摇信竞路

风雨飘摇信竞路 写作时间:2025.9.19夜 1. 引子 夜深了,我捣鼓好了博客园,长舒了一口气。 明天就是 CSP-S 的初赛了,上周老师说可能这次我们没有初赛直升的名额了,把我们搞得都很慌,做了不少卷子。明天早上我还要…

Python-CSV库

CSV (Comma Separated Values) 是电子表格和数据库中最常见的数据交换格式。Python 的 csv 模块提供了读写 CSV 文件的功能,支持多种 CSV 变体和自定义格式。Python CSV 库 1. 库概述 1.1 简介 CSV (Comma Separated …

C++小白修仙记_LeetCode刷题_位运算

位运算 (难度:easy) 231. 2 的幂 给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。 如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。 示例: 输入:n = 1 …

C++小白修仙记_LeetCode刷题_双指针

双指针(easy) 345. 反转字符串中的元音字母 给你一个字符串 s ,仅反转字符串中的所有元音字母,并返回结果字符串。 元音字母包括 a、e、i、o、u,且可能以大小写两种形式出现不止一次。 示例: 输入:s = "Ic…

前路漫漫亦灿灿 往事堪堪亦澜澜

想了好久不知道从何下笔。 谨以本文慰藉我一段难忘的大学生生活,一个难忘的学期。 仍然忘不了军训时了解到ACM实验室,一切的一切从某位舍友,未来的集训队友、假期的守舍人、一个讨厌的人开始。从他那里的得知道了编…

设计模式(C++)详解—单例模式(2) - 指南

设计模式(C++)详解—单例模式(2) - 指南2025-09-19 22:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

使用uv和pycharm搭建python开发环境

uv是一个Rust编写的极速Python包和项目管理工具。官网: https://docs.astral.sh/uv/ , 中文的详细使用文档: https://uv.doczh.com/ 可以用来安装和管理个多版本python,创建管理不同的虚拟环境,所谓虚拟环境是将包…