Aerospike

作者: 星空下的萝卜 | 来源:发表于2020-09-02 09:16 被阅读0次

Aerospike是什么

Aerospike是一个分布式可扩展的键-值NoSql数据库。它支持灵活的数据模式,并且支持acid。为以下3个目标构建:

  1. 弹性扩展
  2. 与传统数据库一样的可靠性
  3. 最小人工参与

特点

特点 描述
可预见的高性能 99%的响应时间在1毫秒内,99.9可在5ms内
混合架构 索引存储在RAM中,数据存储在闪存/固态硬盘SSD上
群集感知客户端软件 客户端知晓数据存放的位置,通常通过一次单跳检索到数据
无热点 使用hash函数来确保数据均匀分布到所有可用节点
数据完整性 保持高度一致性
线性扩展 添加节点无需分片无需人工干预
跨数据中心支持
提供API语言 C/C++、JAVA、C#、Python、PHP、Go、Node.js、Perl、Ruby、Erlang

架构

  • 客户端层
    • 带API的开源客户端和能够感知数据在集群中位置的追踪节点
  • 群集和数据分布层
    • 监控集群通信并提供自动化功能,故障转移、数据复制、跨数据中心数据同步
  • 数据存储层
    • 负责在DRAM和Flash中存储数据
    • 内存、HDD、SSD混合存储


      aerospike架构图.png

运行机制

aerospike运行机制图.png

数据管理

  • 包括类型列的键-值操作,比如自增这样的数据库内部操作
  • 为实现高可用进行数据复制
  • 基于行的回收策略
  • 集群无缝升级
  • SSD优化
  • 跨数据中心复制

扩展

  • bin中复杂数据类型,比如list、map,他们支持嵌套。
  • 队列,字符串和数值类型的bin值可用被索引,可以通过相等或者范围进行搜索。
  • 用户自定义函数,允许数据库执行应用程序代码实现扩展。
  • 汇聚,通过用户自定义函数操作聚合。
  • 大数据类型,bin包含的数据结构可以堆叠至1M到1G,list和map是最佳存储方式。

数据组织

采用无模式数据模型,允许动态添加新类型bin。

  • namespace
    最顶层的容器,包含记录、索引、策略。策略决定namespace的行为,包括:数据如何存储:内存还是磁盘,存多少个副本,记录何时过期。
  • sets
    记录属于set(逻辑容器)。set继承了包含它的namespace的策略。也可为set指定其他测策略。记录也可以不属于任何set。
  • records
    行存贮,基本存储单元,记录通过namespace中定义唯一key来访问。记录的组成如下:
组成 描述
key hash值,hash的结构有可能存在重复的问题,类似于数据库,最多可设置32个。一个namespace可关联多块SSD,一块SSD只关联一个namespace,每个namespace下包含4096个分片
metadata 记录的版本信息及过期时间
set 类似于数据库表,一个namespace最多1023个set
record 类似数据库中的一条记录, 采用Schema-Less的方式
bin 类似于数据库字段,支持Java基本数据类型:List、Map、Blob, 一个namespace下最多32767个bin

注:可以存储原始Key,Key结构体中有个acctKey,将WritePolicy.sendKey设置为true,则acctKey将被存储到一个bin中。

层级图.jpg

分布式查询

  1. 分散请求到所有节点
  2. 内存中的索引快速映射到主键
  3. 索引与各节点SSD上的数据协作来保证ACID并管理迁移
  4. 从所有SSD、DRAM并行读取记录
  5. 在各节点汇聚结果集
  6. 从所有节点整合结果集发送到客户端
分布式查询图.png

数据分布

  • Shared-nothing架构:节点对等,无单点故障。
  • 利用智能分区算法,数据分布在各个节点上。
  • 使用ripemd160算法,任意长度的key被哈希化为20位定长字符串,前12位组成分区ID。分区分布在集群节点中,每个节点大约存储1/N的数据。

备份还原

  • 备份
    asbackup -d bak20200606 -n namespace
    -d 导出需要保存的文件
    -n namespace
    -s 导出的set
    -F 文件大小,超过时创建新文件
    
  • 还原
    asbackup -d bak20200606 -n namespace
    -d 导出需要保存的文件
    -n namespace
    -s 导出的set
    -F 文件大小,超过时创建新文件
    

节点维护

移除节点

  1. 确认没有数据在迁移
asmonitor info
Migrates是(0,0)
  1. 停止要移除的节点
service aerospike stop
service aerospike status
  1. 更新其余节点配置 把移除节点的信息从配置文件中移除
    sed -i '/x.x.x.x/d' /etc/aerospike/aerospike.conf
  2. 更新其余节点信息
asadm -e "asinfo -v 'tip-clear:host-port-list=x.x.x.x:3002'"
asadm -e "asinfo -v 'tip-clear:host-port-list=x.x.x.x:3002'"
Admin> asinfo -v 'dump-hb:verbose=true' --确认节点不在集群中
asinfo -v 'services-alumni-reset'
  1. 限制数据迁移速度
    migrate-threads越大,对tps影响越大,建议在低峰期调大,重分布完成后恢复为1
    asinfo -v 'set-config:context=service;migrate-threads=10'
    本文档基于该文章整理而来

相关文章

  • Aerospike (2) - 写机制

    注:本文转自我的个人博客 Aerospike (2) - 写机制。 最近使用Aerospike遇到了不少的问题,在...

  • Aerospike

    Aerospike是什么 Aerospike是一个分布式可扩展的键-值NoSql数据库。它支持灵活的数据模式,并且...

  • Aerospike基本概念

    一、什么是Aerospike(AS) Aerospike是一个分布式,高可用的 K-V类型的Nosql数据...

  • Linux 程序设计1:深入浅出 Linux 共享内存

    笔者最近在阅读Aerospike 论文时,发现了Aerospike是利用了Linux 共享内存机制来实现的存储索引...

  • AeroSpike初试

    在一般的java应用中,都会使用redis作为缓存,但是redis相对来说一般存储的数据量不会太多,热点数据才会使...

  • 卸载aerospike

    采用aerospike-tools安装工具安装as时,执行脚本asinstall查看asinstall的具体信息,...

  • 【Aerospike 实战 - 1】 心得

    使用aerospike5年的一点心得。 在360的时候,第一次接触到aerospike,但是没怎么使用,因为没有场...

  • aerospike相关包下载地址

    官方下载地址 http://www.aerospike.com/download/server Install A...

  • 推荐和搜索 技术中间件

    基础中间件 store redis leveldb && rocksdb hbase hive aerospike...

  • Aerospike docs 1 - 框架介绍

    本文对应网页:https://www.aerospike.com/docs/architecture/index....

网友评论

      本文标题:Aerospike

      本文链接:https://www.haomeiwen.com/subject/uqlftktx.html