写点什么

大规模 Neo4j 集群中的因果一致性

  • 2017-04-19
  • 本文字数:1084 字

    阅读完需:约 4 分钟

在 QCon 2017 伦敦大会上,Neo4J Technology 首席科学家 Jim Webber 介绍了 Neo4J 是如何实现因果一致性的。他的演讲内容包括:高层概览Neo4J 集群的架构、使用 Raft 实现共识机制,以及用于实现“写后读”(RAW,read-after-write)一致性的“书签”(Bookmarking)模式。

据 Webber 介绍,为将集群问题分而治之,Neo4J 提供了两类角色不同的节点,分别称为核心(Core)节点和只读(Read)节点。在集群中,核心节点用于写操作,并提供了集群的持久性保证。只读节点是核心集群的只读异步副本,实现在“多读少写”(Read-heavy)负载场景下的扩展。

,Webber 进一步介绍了为达成持久性保证,核心节点是如何实现 Raft 共识算法的。一旦一个事务写入到一个核心节点,Raft 就会对事务做日志,并将事务到复制到集群中所有其余的核心节点。Raft 并非等待事务被完全复制,而是等待大多数选举(Majority Vote),这足以保证写操作的持久性。

Webb 还介绍了 Raft 在性能上和弹性上的优点。对于性能而言,Raft 只需等待大多数复制,因此阻塞的时间更短,进而降低了查询延迟。从弹性的角度看,即使一些节点故障,只要大多数依然可以选举,核心集群就仍然正常工作。

Webber 对 Raft 和 Paxos 做了比较,Raft 相对更简单,而且更易于实现,这就是 Neo4J 选择 Raft 的原因。他认为 Raft 降低了软件故障出现的可能性,提高了应用的可维护性。

据 Webber 介绍,图数据库通常是一类“多读少写”的数据库。即使在写操作期间,也必须读取和遍历图数据。这就是在 Neo4J 集群中通常只读节点要多于核心节点的原因。因为只读节点不参与共识提交,这意味着只读节点适用于自动扩展,并且更易于按需部署或调配。

考虑到事务是被异步复制到只读节点的,Webber 给出了一个简单应用场景,对此机制进行了展示。如果用户需要在创建数据后就立刻读取它们,即便写操作具有持久性保证,但还是有可能无法发现这些数据。这是由于数据是最终一致的,可能数据尚未复制到被查询的节点上。

要解决这一“写后读”一致性问题,Webber 介绍了 Neo4J 中提供的一种因果一致性模式,称为“书签”。

书签模式的第一阶段包含一次写操作,写操作完成后将返回相应的事务标识给客户端。第二阶段是一次读操作,客户端在查询中发送事务的标识。通过使用事务标识,被读取的节点将可以阻塞给定的事务。

Webber 用一个代码例子展示了书签模式,强调了在他看来,实现书签模式是非常简单的。在这个例子中,客户端接收一个事务标识,然后传递给此后的查询。

要了解更多的细节,可以从此处在线完整观看该演讲。Webber 还推荐阅读一下Raft 的论文

查看英文原文: Causal Consistency for Large Neo4j Clusters

2017-04-19 19:002408
用户头像

发布了 227 篇内容, 共 80.5 次阅读, 收获喜欢 28 次。

关注

评论

发布
暂无评论
发现更多内容

网络攻防学习笔记 Day128

穿过生命散发芬芳

开发安全 9月日更

【LeetCode】数据流中的中位数Java题解

Albert

算法 LeetCode 9月日更

在线JSON转BigQuery工具

入门小站

LeetCode刷题283-简单-移动零

ベ布小禅

9月日更

MVP验证方向,差异化策略超越竞争

石云升

MVP 9月日更

渗透测试入门指南之小白该如何学习渗透?

网络安全学海

黑客 网络安全 信息安全 WEB安全 渗透测试·

三涧溪村:乡村产业插上数字化翅膀

工业互联网

【墨天轮专访第三期】达梦数据库冯源:丢掉幻想投入战斗,国产数据库的机遇窗口已经来临!

墨天轮

数据库 国产数据库 达梦

学习笔记:TCP传输控制协议(一)

姬翔

9月日更

为什么说敏捷开发是应用程序的未来?

优秀

敏捷开发

小游戏 合成

游戏开发_软件开发

架构实战营模块7课后作业

燕燕 yen yen

架构实战营

关于比特币和区块链的3件重要事项

CECBC

两种定时任务调度器对比

xyu

定时任务 Go 语言

Java从建表语句中提取索引信息, 索引名称,复合索引包含字段,索引类别(普通索引/主键索引/唯一索引/全文索引/空间索引)解决方案

张音乐

数据库 索引 9月日更

卖NFT表情包赚上百万,区块链技术终于找到了真正价值?

CECBC

高并发系统SoEasy!Alibaba全新出品亿级并发设计速成笔记真香

Java 编程 架构 面试 架构师

Promise.race() 原理解析及使用指南

devpoint

异步 Promise 9月日更

自动交Y机器人开发|市值机器人源码搭建

量化系统19942438797

用友YonSuite在基于六力模型的SaaS产品中位居业界前列

海比研究院

金融科技成为服贸会热议话题:数字化转型中如何保障金融安全

CECBC

压箱底宝藏!程序员必不可少的8款办公利器

Jackpop

冒死上传!阿里内部最新版“SpringCloud Alibaba手册”细节拉满

Java 编程 架构 面试 架构师

架构实战营 模块七 作业

一雄

作业 架构实战营 模块七

Mybatis的工作流程及原理

咿呀呀

mybatis 9月日更

2021年最受欢迎的10款开源DevOps工具

Jackpop

♟Go语言那些事儿之Redis连接与数据操作♟

Regan Yue

Go 语言 9月日更

从 ClickHouse 到自研 ByteHouse:实时数据分析场景下的优化实践

火山引擎开发者社区

Clickhouse

从电视购物到电商直播,什么造就了「带货的参差」

融云 RongCloud

太棒了!终于有大佬把“消息队列”核心知识点全都总结出来了

Java 编程 架构 面试 架构师

linux之ssh-keygen命令

入门小站

Linux

大规模Neo4j集群中的因果一致性_架构_Andrew Morgan_InfoQ精选文章