发布时间:2023-02-12 文章分类:编程知识 投稿人:王小丽 字号: 默认 | | 超大 打印

非集中式结构

什么是非集中式结构?

在非集中式结构中,服务的执行和数据的存储被分散到不同的服务器集群,服务器集群之间通过消息传递进行通信和协调,非集中式结构没有中央服务器和节点服务器之分,所有的服务器地位都是平等的。

非集中式结构解决了集中式结构中面临的单点瓶颈和单点故障问题,提升了系统的并发度,比较适合大规模集群的管理。

本文集中描述三种典型的非集中式架构系统:

Akka集群

Akka是一个开发库和运行环境,用于构建可扩展、弹性的、快速响应的应用程序。

Akka基于Actor模型实现,Actor模型是一个封装了状态和行为的对象,它接收消息并基于该消息执行计算。Actor之间通信的唯一机制就是消息传递,每个Actor都有自己的MailBox。

Actor发送的Mail信息会存储在接收方的MailBox中,接受党按照mail到达的先后顺序,从MailBox中提取mail消息,并进行相应的计算处理。

Actor模型采用异步消息调用机制,具有非阻塞、高性能等特点,可以用于处理并发问题。Akka集群充分利用了Actor模型的优势,提供了一个非集中式架构的集群管理模块,用来构建可扩展、弹性的分布式应用程序。

Akka集群中的节点分为Leader节点和非Leader节点,和非Leader节点相比,Leader节点只是增加了负责节点的加入和移出集群的功能。

对于数据同步,Akka集群采用的是谁的时间戳最新,就以谁为准的原则。Akka集群采用了Gossip协议,该协议是最终一致性协议,它的原理是每个节点周期性的从自己维护的集群节点列表中,随机选择k个节点,将自己存储的数据信息发给着k个节点,接收到该信息的节点采用前面讲的共识原则,对收到的数据和本地数据进行合并,这样迭代几个周期后,集群中所有节点上的数据信息就一致了。

Akka集群在创建时,节点被分为三种类型:

Akka集群的每个节点启动后,读取配置文件获取种子节点列表,开始组建集群:

Redis集群

Redis是一个开源的、包含多种数据结构的高性能Key-value数据库,主要有以下特征:

Redis集群中不存在中央节点,每个节点都可以和其他节点通信,所有节点都负责存储数据、记录集群的状态,客户端可以访问或者连接到任一节点上。

Redis集群中每个节点都存在主备,也就是说每台服务器上都运行两个Redis服务,分别是主备,主故障后,备升主。

在数据的分片存储方面,Redis集群引入了”哈希槽“的概念,集群中内置了16384个哈希槽,每个节点负责一部分哈希槽,当客户端要存储一个数据或对象时,Redis先对key进行CRC16校验,然后进行16384取模,来决定哈希槽的编号,从而确定存储到哪个节点上。

Cassandra集群

Cassandra集群的架构是基于一致性哈希的完全P2P结构,没有Master的概念,所有节点都是同样的角色,彻底避免了因为单点问题导致的系统不稳定。Cassandra集群节点间的状态同步,也是通过Gossip协议来进行P2P通信的。

Cassandra集群中每个节点都代表一个哈希值,每次客户端可以向集群中的任意一个节点请求数据,接收到请求的节点将key值进行哈希操作,找出一致性哈希环上是哪个节点存储该数据u,然后将请求转发到相应节点上,并将查询结果反馈返回给客户端。

下面是关于三种不同的非集中式架构系统的详细比较。
《分布式技术原理与算法解析》学习笔记Day09