前言
Aerospike是一个分布式,高可用的 K-V类型的Nosql数据库。提供类似传统数据库的ACID操作。Aerospike官网链接
K-V类型的数据库必须要提的就是redis,redis数据完全存储在内存虽然保证了查询性能,但是成本太高。AS最大的卖点就是可以存储在SSD上,并且保证和redis相同的查询性能。AS内部在访问SSD屏蔽了文件系统层级,直接访问地址,保证了数据的读取速度。
AS同时支持二级索引与聚合,支持简单的sql操作,相比于其他nosql数据库,有一定优势。采用混合架构,索引存储在内存中,而数据可存储在机械硬盘 (HDD) 或固态硬盘 (SSD) 上(也可存储在 内存)。AS 内部在访问 SSD 屏蔽了文件系统层级,直接访问地址,保证了数据的读取速度。AS 同时支持二级索引与 Client 聚合,支持简单的 sql 操作( aql ),相比于其他 nosql 数据库,有一定优势。
Aerospike数据库
架构概述
Aerospike是一个分布式、可伸缩的数据库。该架构有三个关键目标:
- 为网络规模的应用程序创建灵活、可扩展的平台。
- 提供传统数据库所期望的健壮性和可靠性(如ACID)。
- 以最少的人工干预提高运营效率。
正如发表在 超大型数据库论文集 VLDB(Very Large Databases) 上的那样,Aerospike体系结构由三层组成:
- 客户端层:这个支持集群的层包括开放源码客户端库,这些库实现Aerospike API、跟踪节点并知道数据驻留在集群中的什么位置。
- 集群和数据分布层:该层管理集群通信并自动执行故障转移、复制、跨数据中心复制(XDR)以及智能重新平衡和数据迁移。
- 数据存储层:该层可靠地将数据存储在DRAM和闪存中,以便快速检索。
客户端层
Aerospike智能客户端™专为速度而设计。它被实现为C、C#、Java、Node.js和其他语言中的开放源码可链接库(请参考客户端下载页面上的完整列表)。开发人员可以贡献新的客户端或修改现有的客户端。
客户端层:
- 实施客户端-服务器协议Aerospike API,并直接与群集通信。
- 跟踪节点并知道数据存储在哪里,即时了解对群集配置的更改或节点何时启动或关闭。
- 实现自己的TCP/IP连接池以提高效率。还会检测尚未上升到集群中节点故障级别的事务故障,并将这些事务重新路由到具有数据副本的节点。
- 透明地将请求与数据一起直接发送到节点,并根据需要重试或重新路由请求(例如,在重新配置集群期间)。
此架构减少了事务延迟,将工作从集群中分流出来,并消除了开发人员的工作。它确保在节点启动或关闭时不必重新启动应用程序。而且您不必在集群设置或添加集群管理服务器或代理上浪费时间。
分布层
Aerospike“无共享”架构旨在通过自动故障转移、复制和跨数据中心复制(XDR)可靠地存储TB级的数据。该层以线性方式缩放。分布层旨在通过所有群集管理功能的系统自动化来消除手动操作。它包括三个模块:
- 集群管理模块:跟踪集群中的节点。关键算法是基于Paxos的八卦投票过程,该过程确定哪些节点被视为集群的一部分。Aerospike实现了一种特殊的心跳(主动和被动)来监控节点间连接。
跨数据中心复制。 - 数据迁移模块:当您添加或删除节点时,Aerospike数据库集群成员身份将被确定。每个节点使用分布式哈希算法将主索引空间划分为数据切片并分配所有者。Aerospike数据迁移模块可智能地平衡群集中所有节点之间的数据分布,确保每一位数据都能跨所有群集节点和数据中心进行复制。此操作在系统复制系数配置中指定。除法纯粹是一种算法。该系统无需主服务器即可扩展,并且在分片环境中不再需要额外的配置。
事务处理模块:按请求读写数据,并提供一致性和隔离性保证。此模块负责。
- 同步/异步复制:对于立即一致的写入,它会在提交数据并将结果返回给客户端之前将更改传播到所有副本。
- 代理:在集群重新配置期间的极少数情况下,当客户端层可能短暂过时时,事务处理模块会将请求透明地代理到另一个节点。
- 重复数据的解决:对于从分区中恢复的集群(包括重启节点时),该模块解决不同数据副本之间的任何冲突。分辨率可以基于生成计数(版本)或上次更新时间。
一旦第一个群集启动,您可以在其他数据中心安装其他群集并设置跨数据中心复制,以确保在数据中心关闭时,远程群集接管工作负载,而对用户的干扰最小或没有中断。
数据存储层
Aerospike是一个具有无模式数据模型的键值存储。数据流入策略容器、命名空间,它们在语义上类似于RDBMS系统中的数据库。在名称空间中,数据被细分为集合(RDBMS表)和记录(RDBMS行)。每条记录都有一个在该集合中唯一的索引键,以及一个或多个保存与该记录相关联的值的命名箱(RDBMS列)。
- 您不需要定义集和箱。为了获得最大的灵活性,可以在运行时添加它们。
- 存储箱中的值是强类型的,可以包括任何受支持的数据类型。箱不是类型化的,因此不同的记录可以具有相同的箱,具有不同类型的值。
默认情况下,索引(包括主索引和可选的辅助索引)存储在DRAM中,以便进行超快访问。还可以将主索引配置为存储在永久存储器或NVMe闪存设备上。值可以存储在DRAM中,也可以更经济高效地存储在SSD上。您可以单独配置每个命名空间,以便小型命名空间可以利用DRAM,而较大的命名空间可以获得SSD的成本优势。
在Aerospike中:
- 1亿个密钥只占6.4 GB。虽然密钥没有大小限制,但每个密钥仅有效地存储在64个字节中。
- 本机、多线程、多核闪存I/O和Aerospike日志结构化文件系统利用低级SSD读写模式。为了最大限度地减少延迟,对磁盘的写入以大数据块为单位执行。这种机制绕过了传统上调到旋转磁盘的标准文件系统。
智能碎片整理程序和Evictor协同工作,以确保DRAM中有空间,并且数据永远不会丢失,并且始终安全地写入磁盘。
- 智能碎片整理程序:跟踪每个块中的活动记录数量,并回收低于最低使用级别的块。
- 驱逐者:如果系统超出设定的高水位线,则删除过期记录并回收内存。过期时间按命名空间配置。记录使用年限从上次修改开始计算。应用程序可以覆盖默认生存期,并指定永远不应逐出记录。
操作Aerospike
在传统的(非分布式)RDBMS中,在安装数据库软件之后,您需要设置数据库模式并创建数据库和表定义。Aerospike数据库则截然不同。
在分布式数据库中,数据在集群中的所有服务器之间分配(分布)。这意味着您不能简单地登录到服务器来访问您的所有数据。
使用Aerospike,您可以创建和管理数据库:
- 通过配置初始数据库设置。Aerospike数据库是命名空间。安装Aerospike时,集群中的每个节点必须配置每个命名空间,以指定如何创建和复制数据库。数据库在您重新启动服务器后立即创建。
通过应用程序执行数据库操作。
- 数据库架构是在应用程序首次引用集合和库(表和字段)时创建的。
- Aerospike数据库是一种灵活的模式--您不必预定义数据库模式。例如,要添加新的bin(字段),您的应用程序只需开始在指定的bin中存储数据。在Aerospike数据库中,通常由DBA在命令行上完成的任务在您的应用程序中完成。
根据需要更新配置文件。
- 要更改命名空间参数,只需更新配置文件,无需重新启动即可动态更新,或者使用新的配置文件重新启动服务器。
要提供高质量的性能和冗余,请规划和配置所需的节点数量(请参阅容量规划)。
如果您向群集中添加节点或关闭节点以进行升级或维护,则群集会自动重新配置。当一个节点发生故障时,群集中的其他节点会以最小的影响重新平衡工作负载。有关可用监视实用程序的列表,请参阅监视工具。
构建应用程序
定义了命名空间后,您可以使用Aerospike工具来验证数据库是否正确存储数据。在生产数据库中,数据分布在群集上。要执行数据库操作,请使用实例化应用程序的智能客户端。智能客户端是位置感知的,并且知道如何在不影响性能的情况下存储和检索数据。
在应用程序编译时,Aerospike API库随智能客户端一起提供。智能客户端是一个单独的线程/进程,它监视群集状态以确定数据位置,从而确保在单跃点中检索数据。
这说明了位于Web服务器上的大数据应用程序如何由Aerospike数据库集群提供支持,从而实现一跳操作。智能客户端允许您的应用程序忽略数据分布详细信息。
1 条评论
奥利给!!