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

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