Neo4j 集群和负载均衡

Neo4j 集群和负载均衡

Neo4j是当前最流行的开源图DB。刚好读到了Neo4j的集群和负载均衡策略,记录一下。

1 集群

Neo4j 集群使用主从复制实现高可用性和水平读扩展。

1.1 复制

集群的写入都通过主节点协调完成的,数据先写入主机,再同步到一个或多个备机。这意味着并没有做图切分,集群中的每个实例都将包含数据的完整副本。准确来说,集群中的每个实例最终会将包含数据的完整副本,原因是,刚刚写入的数据,可能还没有同步到备机。

Neo4j 也允许通过从节点进行写入操作,不过此时,被写入的从节点会先将数据同步到主节点,再将数据返回客户端。由于额外的网络负载和协调协议,通过从节点写入会比直接写入主节点慢一个数量级。

1.2 写入缓冲区

在高写人负载的情况中,可以使用队列来进行缓冲区写入和负载调节。使用该策略将集群的写入缓冲在队列中,随后会有工作节点对队列进行轮询并对数据库执行批量写入。这不仅控制了写入流量,而且降低了竞争,并使我们能够在维护时段暂停写入操作而不拒绝客户端的请求。

2 负载均衡

2.1 读写分离流量

鉴于推荐的写入方式是将绝大部分写入操作直接在主节点上进行,我们应该将读请求和写请求完全分离开,并通过负载均衡器将写流量定向到主节点,而读流量平衡地分散到整个集群。

2.2 高速缓存分片

高速缓存分片技术是指将每个请求路由到 HA(高可用性)集群中的特定实例上,这个实例可能已经将需要使用的图的部分放置在自己的主存储器中了。

如果应用程序的大多数查询都是局部图查询,即从图的一个或多个特定点开始,然后遍历周围的子图,那么这种一致地从一组节点开始查询,随后路由到同一数据库实例继续查询的机制将增加每个查询在热高速缓存( warm cache )中命中可能性。 例如,在一个地理数据系统中,我们可以将特定地区的请求路由到特定的刚刚响应过该地区的数据库实例上。这种策略都增加了所需节点和联系被缓存在主存储器中的可能性,在那里它们可以被快速地访问和处理。

感兴趣的同学可以看一下一致性哈希

3 附

以上内容均参考自《图数据库》。

图数据库(第二版).pdf https://www.aliyundrive.com/s/zxfL2btKEj5

相关推荐
C_心欲无痕5 小时前
Dockerfile:构建 Docker 镜像
运维·docker·容器
zz_nj5 小时前
工作的环境
linux·运维·服务器
C_心欲无痕6 小时前
nginx - 实现域名跳转的几种方式
运维·前端·nginx
suijishengchengde6 小时前
****LINUX时间同步配置*****
linux·运维
幻云20107 小时前
AI自动化编排:从入门到精通(基于Dify构建AI智能系统)
运维·人工智能·自动化
qiuqyue7 小时前
基于虹软Linux Pro SDK的多路RTSP流并发接入、解码与帧级处理实践
linux·运维·网络
爱跑马的程序员8 小时前
Linux 如何查看文件夹的大小(du、df、ls、find)
linux·运维·ubuntu
代码AI弗森9 小时前
n8n 专题:从“自动化脚本”到“可视化工作流引擎”(自建、节点、Webhook、生产部署)
运维·自动化
oMcLin10 小时前
如何在 Ubuntu 22.04 LTS 上部署并优化 Magento 电商平台,提升高并发请求的响应速度与稳定性?
linux·运维·ubuntu
小李独爱秋10 小时前
计算机网络经典问题透视:TLS协议工作过程全景解析
运维·服务器·开发语言·网络协议·计算机网络·php