写点什么

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 )关注我们。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

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

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

关注

评论

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

教你两招,轻松搞定html页面导出为pdf文件

麦洛

Java PDF wkhtmltopdf html2canvas

架构概述之架构演化、模式与核心要素

xcbeyond

架构 架构演进 5月日更

乡村的振兴之始,5G的均衡之道

脑极体

客户营销:4P理论

石云升

创业 营销 职场经验 5月日更

阿里出品还是香,这份Redis笔记”从头到尾,全是精华

Java架构师迁哥

双非本科,聊聊我是怎么学习编程的。

JavaGuide

Java 学习 编程

深入浅出c++协程丨C++协程实现

Linux服务器开发

c++ 后端 协程 Linux服务器开发 协程原理

高性能JavaScriptの笔记(一)

空城机

JavaScript 性能优化 大前端 5月日更

Fedora 34成哑巴了?

DisonTangor

fedora

码农是如何百炼成钢的?6面阿里、5面字节、4面腾讯,终斩腾讯Offer

Java架构师迁哥

阿里三面:你连HashMap都不会还敢问我要23K?我:0.0

北游学Java

Java 面试 hashmap

OLAP计算引擎怎么选?

数据社

大数据 OLAP 5月日更

新思科技发现开源安全、许可证合规性和维护问题依然很普遍

InfoQ_434670063458

新思科技 OSSRA 开源安全

区块链,让付费的知识真正“物超所值”

CECBC

百度助力智慧丽江“数智”管理 丽江城市大脑正式上线

百度大脑

百度 大脑 丽江

鬼知道发生了什么?痛述阿里Java岗5轮技术面经历,险幸上岸

Java 编程 程序员 架构 面试

来了,Anolis OS 8.2 正式版首发!100% 兼容 CentOS 8

阿里云基础软件团队

BIP研发课堂:领域、单据类型、交易类型

paraboy1

手把手 Golang 实现静态图像与视频流人脸识别

天黑黑

音视频 人脸识别 Go 语言

区块链的现实之痛与解决之道(区块链的爱与恨)

CECBC

Python 包管理

若尘

Package Python编程 5月日更

Apache Flink Meetup 北京站,1.13 新版本发布 x 互娱场景实践分享的开发者盛筵!

Apache Flink

大数据 flink

C++解析一些特殊符号tab、换行符号

良知犹存

c++

区块链赋能产业,构建良好的数字经济生态

CECBC

不要盲目跟风:中小企业运营自媒体需三思而后行

石头IT视角

阿里开源的“高并发设计笔记”就这水平!?我反正是跪着看完的

Java架构师迁哥

打破思维定式(七)

Changing Lin

5月日更

数据库学习笔记

lenka

5月日更

Newtonsoft.Json的使用整理

happlyfox

json netcore 5月日更

阿里开源的“SpringCloudAlibaba笔记”这么细节的吗?真秀!

Java架构师迁哥

社工技巧 | 一些社工入门技巧介绍

Thrash

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