一、Aerospike概念
Aerospike
是一个分布式、可扩展的Nosql
数据库。以KV
键值进行存储,当然也支持文档存储模型,在国内的并没有广泛使用,而在国外却大多数用在广告行业,以存储大数据量及强一致性而被广泛使用。
-
Aerospike
的三层架构:-
客户端层
Client Layer
:- 这个集群感知层包括开源客户端库,它实现
Aerospike API
、跟踪节点并知道数据在集群中的位置。包括C
、C#
、Java
、Go
、Python
、Rest
、Node.js
、Ruby
、Php
、Rust
等客户端。 - 实现
Aerospike API
、客户端-服务器协议,并直接与集群对话。 - 跟踪节点并了解数据的存储位置,即时了解集群配置的更改或节点何时启动或关闭。
- 实现自己的
TCP/IP
连接池以提高效率。还检测未上升到集群中节点故障级别的事务故障,并将这些事务重新路由到具有数据副本的节点。 - 透明地将请求与数据直接发送到节点,并根据需要重试或重新路由请求(例如,在集群重新配置期间)。
- 这个集群感知层包括开源客户端库,它实现
-
分布层
Clustering and Data Distribution Layer
Aerospike
“无共享”架构旨在通过自动故障转移、复制和跨数据中心复制 (XDR) 可靠地存储 TB 级数据。该层线性缩放。分布层旨在通过所有集群管理功能的系统自动化来消除手动操作。它包括三个模块:- 集群管理模块:跟踪集群中的节点。关键算法是基于
Paxos
的gossip-voting
过程,该过程确定哪些节点被视为集群的一部分。Aerospike
实现了一个特殊的心跳(主动和被动)来监控节点间的连接。 - 数据迁移模块:当您添加或删除节点时,
Aerospike
数据库集群成员资格被确定。每个节点使用分布式哈希算法将主索引空间划分为数据切片并分配所有者。Aerospike
数据迁移模块智能地平衡集群中所有节点的数据分布,确保每一位数据在所有集群节点和数据中心之间复制。此操作在系统复制因子配置中指定。 - 事务处理模块:根据请求读写数据,并提供一致性和隔离性保证。该模块负责
- 同步/异步复制: 对于具有即时一致性的写入,它会在提交数据并将结果返回给客户端之前将更改传播到所有副本。
- 代理: 在集群重新配置期间,客户端层可能暂时过时的极少数情况下,事务处理模块透明地将请求代理到另一个节点。
- 重复数据的解决:对于从分区中恢复的集群(包括重新启动节点时),该模块解决了不同数据副本之间的任何冲突。分辨率可以基于生成计数(版本)或上次更新时间。
-
一旦第一个集群启动,您可以在其他数据中心安装额外的集群并设置跨数据中心复制,以确保如果数据中心出现故障,远程集群接管工作负载而对用户的干扰最小或没有。
-
- 存储层
Data Storage Layer
Aerospike
是具有无模式数据模型的键值对存储。数据流入策略容器、命名空间,它们在语义上类似于RDBMS 系统中的数据库。在命名空间内,数据被细分为集合(RDBMS表)和记录(RDBMS行)。每条记录都有一个在集合中唯一的索引键,以及一个或多个保存与记录关联的值的命名箱(RDBMS列)。- 您不需要定义集和箱。为了获得最大的灵活性,可以在运行时添加它们。
bin
中的值是强类型的,可以包含任何支持的数据类型。bin
没有类型,因此不同的记录可以具有相同的bin
,但具有不同类型的值。
- 索引,包括主索引和可选的二级索引,默认存储在 DRAM 中,以实现超快速访问。主索引也可以配置为存储在持久内存或 NVMe 闪存设备上。值可以存储在 DRAM 中,也可以更经济高效地存储在 SSD 中。您可以单独配置每个命名空间,因此小型命名空间可以利用 DRAM,而较大的命名空间可以获得 SSD 的成本优势。
- 数据层旨在提高速度并显着降低硬件成本。它可以在内存中运行,从而无需缓存层,也可以利用闪存存储的独特优化。无论哪种方式,数据都不会丢失。
- 存储层
- 在
Aerospike
中:- 1亿个key只占用6.4GB。尽管密钥没有大小限制,但每个密钥都有效地存储在 64 个字节中。
- 本机、多线程、多核闪存 I/O 和Aerospike 日志结构化文件系统利用了低级 SSD 读写模式。为了最小化延迟,写入磁盘是在大块中执行的。这种机制绕过标准文件系统,历史上调整为旋转磁盘。
Smart Defragmenter
和Evictor
协同工作以确保 DRAM 中有空间,并且数据永远不会丢失并且始终安全地写入磁盘。- 智能碎片整理程序:跟踪每个块中的活动记录数并回收低于最低使用水平的块。
Evictor
:如果系统超出设置的高水位线,则删除过期记录并回收内存。过期时间是按命名空间配置的。记录年龄从最后一次修改开始计算。应用程序可以覆盖默认生命周期并指定永远不应驱逐记录。
二、Aerospike存储模型
-
Aerospike
采用混合存储模型,混合内存系统包含存储在每个节点中的索引和数据,处理与物理存储的交互,包含用于自动从数据库中删除旧数据的模块,以及对物理存储进行碎片整理以优化磁盘使用。- 动态随机存取存储器
(DRAM)
。 - 非易失性内存扩展
(NVMe)
闪存或固态驱动器(SSD)
。 - 持久内存
(PMEM)
。 - 传统的旋转媒体。
- 动态随机存取存储器
-
各存储之间的优缺点:
主索引存储 NCMe闪存 动态随机存取存储器 PMEM NVMe 闪存 所有 NVMe 闪存:超大型记录集 不建议 不建议 动态随机存取存储器 混合:最佳性价比 高性能。没有坚持 不常见 PMEM 混合:重启后快速重启。非常大的数据集 不建议 All PMEM:重启后快速重启,高性能 -
SSD(固态硬盘)
和闪存-
当从客户端接收到写入(更新或插入)时,会对该行进行闩锁,以避免对该集群的同一记录进行两次冲突写入(在网络分区的情况下,可能会采取冲突写入以提供可用性,稍后解决)。在某些集群状态下,可能还需要从其他节点读取数据并解决冲突。在写入验证之后,记录的内存表示会在主节点上更新。将要写入设备的数据放置在缓冲区中进行写入。当写入缓冲区已满时,它会排队到磁盘。写入缓冲区大小(与最大行大小相同)和写入吞吐量决定了未提交数据的风险,并且配置参数允许刷新这些缓冲区以限制潜在的数据丢失。副本及其内存索引随后会更新。
Aerospike Defragmenter 跟踪磁盘上每个块上的活动记录数
-