分布式理论基础是什么内容(《分布式技术原理与算法解析》学习笔记Day09)
非集中式结构
什么是非集中式结构?
在非集中式结构中 ,服务的执行和数据的存储被分散到不同的服务器集群 ,服务器集群之间通过消息传递进行通信和协调 ,非集中式结构没有中央服务器和节点服务器之分 ,所有的服务器地位都是平等的 。
非集中式结构解决了集中式结构中面临的单点瓶颈和单点故障问题 ,提升了系统的并发度 ,比较适合大规模集群的管理 。
本文集中描述三种典型的非集中式架构系统:
Akka集群 Redis集群 Cassandra集群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集群在创建时 ,节点被分为三种类型:
种子节点 ,使用静态配置文件方式或者系统运行时指定方式,可以生成种子节点 ,种子节点是普通节点加入集群的联系点 ,可以自动接收新加入集群的节点的信息 。 首种子节点 ,首种子节点是配置文件中的第一个种子节点 ,其功能是集群第一次启动时 ,首种子节点启动起来 ,集群才能组建成功 ,保证集群第一次创建时只有一个集群。 普通节点 ,可以向种子节点或集群中的任意节点发送Join消息 ,请求加入集群 。Akka集群的每个节点启动后 ,读取配置文件获取种子节点列表 ,开始组建集群:
如果本节点是首种子节点 ,则把自己加入到集群列表,即以自己为中心构建集群 。 如果本节点为种子节点 ,则向首种子节点请求加入集群 ,当首种子节点回复同意消息后,可以加入集群 ,否则不可加入集群。 如果本节点为普通节点 ,则可以向任一种子节点请求加入集群 ,收到同意后 ,则加入集群 ,否则不可加入集群 。Redis集群
Redis是一个开源的 、包含多种数据结构的高性能Key-value数据库 ,主要有以下特征:
支持多种数据结构 。 支持数据的持久化和备份 。 基于内存运行 ,具有极高的性能 。Redis集群中不存在中央节点 ,每个节点都可以和其他节点通信 ,所有节点都负责存储数据 、记录集群的状态 ,客户端可以访问或者连接到任一节点上 。
Redis集群中每个节点都存在主备 ,也就是说每台服务器上都运行两个Redis服务 ,分别是主备,主故障后 ,备升主 。
在数据的分片存储方面 ,Redis集群引入了 ”哈希槽“的概念,集群中内置了16384个哈希槽 ,每个节点负责一部分哈希槽 ,当客户端要存储一个数据或对象时 ,Redis先对key进行CRC16校验 ,然后进行16384取模 ,来决定哈希槽的编号 ,从而确定存储到哪个节点上 。
Cassandra集群
Cassandra集群的架构是基于一致性哈希的完全P2P结构 ,没有Master的概念 ,所有节点都是同样的角色 ,彻底避免了因为单点问题导致的系统不稳定 。Cassandra集群节点间的状态同步 ,也是通过Gossip协议来进行P2P通信的 。
Cassandra集群中每个节点都代表一个哈希值 ,每次客户端可以向集群中的任意一个节点请求数据 ,接收到请求的节点将key值进行哈希操作,找出一致性哈希环上是哪个节点存储该数据u ,然后将请求转发到相应节点上 ,并将查询结果反馈返回给客户端 。
下面是关于三种不同的非集中式架构系统的详细比较 。
创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!