如何 0 成本启动全员 AI 技能提升?戳> 了解详情
写点什么

Neo4j 3.1 支持因果集群并改进了安全

  • 2017-01-10
  • 本文字数:2502 字

    阅读完需:约 8 分钟

Neo4j 团队最近发布了Neo4j 图数据库3.1 版,该最新版的NoSQL 图数据库 Neo4j 提供了因果集群(Causal Clustering)技术和新的安全架构。

因果集群技术基于 Raft 协议开发,可使 Neo4j 支持数据中心和云所用的大规模集群和多种集群拓扑。该技术中内置了由 Neo4j Bolt 驱动处理的负载均衡。Neo4j 数据库还支持新的集群可感知会话,该会话同样是由 Bolt 驱动管理,有助于为开发人员解决架构上的问题。

安全性改进包括了如下的特性:多用户、基于角色的访问控制(提供四种预定义的全局图数据访问角色:读取者、发布者、架构者和管理者)、查询及安全事件日志、列出并终止运行中的查询,以及细粒度的访问控制等。

其它最新版本的特性还包括具有更有效空间管理的数据库内核改进,以及显示即刻图模型的模式查看器(Schema Viewer)。

针对该新版本,InfoQ 访谈了Neo4j 团队的Michael Hunger。

InfoQ:您能为我们介绍一下 Neo4j 3.1 版新提供的因果集群技术吗?与传统的集群技术相比,该技术有哪些不同?

Michael Hunger:新提供的因果集群是一种用于交易数据库集群的全新架构和方法。该方法的实现独立于以前版本中的 Neo4j 高可用(HA)技术,解决了 HA 方法中存在的一些问题。

因果集群主要着眼于提供全面的数据安全,即事务安全操作和可用性。该技术的构建一方面基于 Neo4j 一贯具备的强事务支持,这是通过 Raft 协议实现的;另一方面基于异步复制协议,它扩展了“读自写”(read-your-own-writes)一致性保证,可用于非常大规模的集群。

最终一致性是大多数 NoSQL 数据库的默认选项,但它并不支持该模型。尽管“读自写”的工作方式类似于标准的冯·诺依曼计算架构,因而是一种为人所熟知的模型,但是大多数 NoSQL 数据库还是要强制开发人员在应用中三番五次地处理一致性问题。

“读自写”问题对于任何数据库集群都是难以解决的问题,尤其是具有最终一致性的数据库集群。通常该问题由粘性会话(Sticky Session)处理。粘性会话将后续的读操作重定向到被写入的服务器,这种做法限制了可扩展性。

因果集群提供了远超最终一致性的、最为简单但最充分的一致性保证,即无论集群的规模如何,你都可随后读取你所写的。

对于因果一致性(即由因果集群所提供的一致性保证),这里额外给出两个资源:一篇外部的论文,以及关于因果一致性的背景信息。

新的因果集群在架构上具有两个主要组成部分:

  • 一个服务器核心(Core),它接受写操作,并对数据安全做断言。核心组成了实际的(活跃的)集群。它使用 Raft 协议,为仲裁(Quorum)写操作、集群成员信息和领导者(Leader)信息等一系列集群操作提供一致性。
  • 任意数量的读副本服务器,使得图查询可以横向扩展。

在“ Neo4j 操作手册”中有专门的章节介绍集群设置和操作,内容中还包括循序渐进教程和设置的细节。

高可用和数据安全:

数据安全确保了高可用(也就是故障转移)。数据安全由集群核心内的仲裁写操作提供。任何对核心的写操作必须被绝大多数的服务器认可,并且要先于提交向客户返回成功。Raft 协议表明,这样的操作是安全的。

这就是为什么依照 CAP 定理 Neo4j 集群是一致的和分区容忍的(CP)。在网络发生拆分时,大多数成员将会继续接受写入。如果使用了具有标签的因果一致性,不会对少数成员的读操作给出过期的数据,而是对孤儿实例上的操作做超时处理。如果没有使用标签,那么少数成员将会提供其所具有的数据。这意味着 Neo4j 永不会返回过期的或不正确的数据。在产生病理性失败的场景下,集群将最终成为只读的。

Neo4j 因果集群的实现是通过一种基于事务的标签机制,该机制使得你可从自身的写操作中获取标签记号,该标签表示了写操作(严格单调)的事务标识。在随后的操作中,你就可以使用该标签确保仅是在事务状态读取的,或仅是超越事务状态读取的。

Neo4j 官方驱动也是集群可感知的,并支持内建的智能路由协议(bolt+routing://any-server:port)。该协议负责指明当前的操作将导向何处(写、读、标签)。

扩展:

Neo4j 集群核心的部署也可跨越数据中心,提供全球规模服务。为允许面向终端用户的应用,可以用任意数量的读取副本扩展你的集群。这些副本并非集群成员,不参与写操作,并且是最终一致的。

前面所提到的标签特性依然允许“读自写”。读副本也可用于配置图计算操作所用的专用报告实例或服务器。

为实现地理范围上的可用性,可以将核心机器扩散到不同的数据中心中。虽然这样做意味着提交路径将跨越 WAN,但是由于 Raft 的特性,提交的执行将依照大多数成员所具有的最快速度。因此如果你在纽约、波士顿和伦敦有数据中心,那么事务提交的下限很有可能是纽约和波士顿间的最短网络路径,而非跨越大西洋到伦敦的较长路径。

InfoQ:Neo4j 的新安全基础是什么?它们与 Neo4j 已支持的安全特性相比有哪些差异?

Michael Hunger: Neo4j 曾具有单一的内建用户,由该用户提供对恶意攻击的防护,这是因为数据库被认为是运行于受保护的网络中。

在听取了客户的意见后,尤其是来自金融和国营部门的客户,我们决定自 3.1 版开始为 Neo4j 添加增强的安全基础。

在新安全模型中具有多种用户定制角色的用户。缺省角色包括读取者、发布者(读 / 写)、架构者(读 / 写 / 模式)和管理者,但是你也可添加自定义的角色,并在用户代码(例如用户定义过程)中做检查。对该模型的验证和授权需求的支持,不仅包括内建(原生)的实现和基于 LDAP/Active Directory 的实现,而且包括连接你自身安全架构(例如 Kerberos)的用户化实现。

对于原生用户的管理(创建、终止、删除),Neo4j Browser 提供了 UI 并指派了构建于一些过程之上的角色,这些过程也可用于你自身的运营工具。对于与 LDAP/Active Directory 的集成,安全模型给出了细粒度的配置 CAPA。

当前通过用户定义过程提供了数据层面的安全。这些过程允许访问数据子集,并可配置为仅对具有特定角色的用户可用。

最新版的 Neo4j 数据库可在 Neo4j 网站下载

查看英文原文: Neo4j 3.1 Supports Causal Clustering and Security Enhancements


感谢冬雨对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-01-10 18:002864
用户头像

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

关注

评论

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

HCIA-HarmonyOS Application Developer 应用方向认证资料

爱吃土豆丝的打工人

HarmonyOS HCIA认证 应用开发方向

网易传媒数据指标体系建设实践

网易数帆

大数据 数据仓库 指标体系

360 政企安全集团基于 Flink 的 PB 级数据即席查询实践

Apache Flink

flink

一文搞懂一致性hash的原理和实现

万俊峰Kevin

微服务 hash Go 语言

智慧能源:清洁低碳环保新能源,沙漠光伏与光热发电站 3D 可视化

一只数据鲸鱼

数据可视化 智慧能源 光伏发电 沙漠光伏

Rust从0到1-并发-可扩展性

rust 并发 sync Concurrency send

深度解析 Lucene 轻量级全文索引实现原理

vivo互联网技术

lucene 检索 索引技术

Python OpenCV 图像处理再循环,第一阶段复盘

梦想橡皮擦

7月日更

基于用户角色的数据库智能监控系统应用场景分析

华为云开发者联盟

数据库 架构 监控 用户 智能监控

Linux - 零拷贝

大海

Linux zero copy

数字化转型下的数字经济新发展

CECBC

重磅来袭!全网最具深度的三次握手、四次挥手讲解

欢喜学安卓

android 程序员 面试 移动开发

统一语言 = 领域模型 ?

escray

学习 极客时间 7月日更 如何落地业务建模

【设计模式】总览

Andy阿辉

编程 程序员 设计模式 23种设计模式

Vue进阶(十六):vue项目结构启动原理详解

No Silver Bullet

Vue 7月日更 启动原理

华为云MVP周峥:气象预报是个技术活,大数据、超算、AI,缺一不可

华为云开发者联盟

人工智能 大数据 环保 气象 超算

【设计模式】工厂模式

Andy阿辉

编程 程序员 设计模式 23种设计模式

Go语言,你必须掌握的--高效并发模式!

微客鸟窝

Go 语言

什么是MircoPython?

华为云开发者联盟

Python 编程语言 物联网 MicroPython 嵌入式应用

bash: docker-compose: 未找到命令

阿呆

Docker-compose

获客达人app系统开发

获客I3O6O643Z97

大数据

【设计模式】抽象工厂

Andy阿辉

编程 程序员 设计模式 23种设计模式 编程思想

Vue进阶(六十二):理解$nextTick()

No Silver Bullet

Vue 7月日更 nextTick

【Flutter 专题】81 图解 Android Native 集成 FlutterBoost 小尝试 (三)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 7月日更

Pandas高级教程之:稀疏数据结构

程序那些事

Python 数据分析 pandas 程序那些事 稀疏矩阵

基于RNN和CTC的语音识别模型,探索语境偏移解决之道

华为云开发者联盟

语音 RNN ASR CTC 语音识别模型

【LeetCode】滑动窗口的最大值Java题解

Albert

算法 LeetCode 7月日更

重磅消息!写给安卓软件工程师的3条建议

欢喜学安卓

android 程序员 面试 移动开发

抖音霸屏系统软件开发

获客I3O6O643Z97

大数据 抖音霸屏

赋能中小银行数字营销:索信达助力深圳农商行建设标签系统

索信达控股

金融 银行 用户标签

架构实战营 模块二作业

脉醉

#架构实战营

Neo4j 3.1支持因果集群并改进了安全_安全_Srini Penchikala_InfoQ精选文章