Aerospike基本概念

  • 1、什么是Aerospike(AS)
  • 2、为什么要用AS
  • 3、与Redis对比
  • 4、Aerospike架构
  • 5、基本概念
    • 5.1 Namespaces(类似库)
    • 5.2 Set(类似表)
    • 5.2 Records(类似行)
    • 5.3 Key(类似于主键)
    • 5.4 Metadata
    • 5.5 Bins(类似列)
  • 6、aerospike管理
  • 7、Aerospike集群实现
    • Aerospike 集群配置和部署

1、什么是Aerospike(AS)

Aerospike是一个分布式,高可用的 K-V类型的Nosql数据库。提供类似传统数据库的ACID操作。

2、为什么要用AS

K-V类型的数据库必须要提的就是redis,redis数据完全存储在内存虽然保证了查询性能,但是成本太高。AS最大的卖点就是可以存储在SSD上,并且保证和redis相同的查询性能。AS内部在访问SSD屏蔽了文件系统层级,直接访问地址,保证了数据的读取速度。 AS同时支持二级索引与聚合,支持简单的sql操作,相比于其他nosql数据库,有一定优势。

采用混合架构,索引存储在内存中,而数据可存储在机械硬盘 (HDD) 或固态硬盘 (SSD) 上(也可存储在 内存)

AS 内部在访问 SSD 屏蔽了文件系统层级,直接访问地址,保证了数据的读取速度。

AS 同时支持二级索引与 Client 聚合,支持简单的 sql 操作( aql ),相比于其他 nosql 数据库,有一定优势。

适用场景:它适合对容量要求比较大,QPS相对低一些的场景
个性化推荐广告应用
个性化推荐厂告是建立在了和掌握消费者独特的偏好和习性的基础之上,对消费者的购买需求做出准确的预 或引导,在合适的位置、合适的时间,以合适的形式向消费者呈现与其需求高度吻合的广告,以此来促进用户的消费行为。

用户行为日志收集系统收集日志之后推送到ETL做数据的清洗和转换

把ETL过后的数据发送到推荐引擎计算每个消费者的推荐结果,其中推荐逻辑包括规则和算法两部分,具体的规则有用户最近浏览、加入购物车、加入收藏等,算法则包括商品相似性、用户相似性、文本相似性、图片相似性等算法。

把推荐引擎的结果存入Aerospike集群中,并提供给广告投放引擎实时获取。

3、与Redis对比

  • Aerospike是NoSQL的数据存储,Redis是缓存

  • Aerospike是多线程的,而 Redis 是单线程的

  • Redis 需要开发人员自己管理分片并提供分片算法用于在各分片之间平衡数据;

  • client: hash 一致性hash

  • codis :代理处理sharding

  • RedisCluster: hash槽 而 AerospikeDB 可以自动处理相当于分片的工作;

  • 在 Redis 中,为了增加吞吐量,需要增加 Redis 分片的数量,并重构分片算法及重新平衡数据,这通常需要停机;
    而在 AerospikeDB 中,可以动态增加数据卷和吞吐量,无需停机,并且 AerospikeDB 可以自动平衡数据和流量;

  • 在 Redis 中,如果需要复制及故障转移功能,则需要开发人员自己在应用程序层同步数据;
    而在 AerospikeDB 中,只需设置复制因子,然后由 AerospikeDB 完成同步复制操作,保持即时一致性;而且 AerospikeDB 可以透明地完成故障转移;

  • Redis是在内存中运行的 ,AerospikeDB在内存中存储索引,在HDD、SSD中保存数据,也可以在内存中。

4、Aerospike架构


Aerospike分为三个层次:

Client层:

  • 对Aerospike Server中的数据进行访问。
  • 包括CRUD、批量操作和基于二级索引的查询
  • 是一个“智能”客户端,支持C/C++、Java、GoLang、Python、C#、Php、Ruby、JavaScript等绝大部分主流语言。
  • 追踪节点感知数据存储位置,当节点启动或停止时立即感知集群配置变化。
  • 具有高效性、稳定性和内部的连接池。

Data层:

  • 负责数据的存储,Aerospike 属于弱语法的key-value数据库。数据存储模式如下:

5、基本概念

Aerospike采用无模式存储,数据模型类似RDBMS,因而在理解与使用上相对亲切:

每个namespace包含多个set,每个set包含多条record,每个record包含多个bin(数据库列),可通过索引key来查询record。不同的业务可以使用同一个集群的不同namespace来作做资源隔离,从而实现资源池化、最大化利用资源的目的。

5.1 Namespaces(类似库)

命名空间,数据存在命名空间中,相当于 RDBMS 中的 database ,最多可设置 32 个。一个 namespace 可关联多块 SSD ,一块 SSD 只关联一个 namespace ,每个 namespace 下包含 4096 个分片

AS数据存储的最高层级,类比于传统的数据库的库层级,一个namespace包含记录(records),索引(indexes )及策略(policies)

其中策略决定namespace的行为,包括:

  1. 数据的存储位置是内存还是SSD。
  2. 一条记录存储的副本个数。
  3. 过期时间(TTL):不同redis的针对key设置TTL,AS可以在库的层级进行全局设置,并且支持对于已存在的数据进行TTL的设置,方便了使用。

索引:Aerospike Index包含主索引(Primary Index)和二级索引(Second Index),索引存储在内存中,并不保存在硬盘里

5.2 Set(类似表)

集合,类似于数据库表,一个 namespace 最多 1023 个 set

存储于namespace,是一个逻辑分区,类比于传统数据库的表。set的存储策略继承自namespace,也可以为set设置单独的存储策略。

5.2 Records(类似行)

记录,类似数据库中的一行记录, 采用弱语法 (Schema-Less) 的方式, bin 可随时增加或减少

Records类比于传统数据库的行,包含key,Bins(value)和Metadata(元数据)。key全局唯一,作为K-V数据库一般也是通过key去查询。
Bins相当于列,存储具体的数据。元数据存储一些基本信息,例如TTL等。

5.3 Key(类似于主键)

提到key,有一个和key伴生的概念是摘要(Digests),当key被存入数据库,key与set信息一起被哈希化成一个160位的摘要。数据库中,摘要为所有操作定位记录。key主要用于应用程序访问,而摘要主要用于数据库内部查找记录。

5.4 Metadata

每一条记录包含以下几条元数据

  1. generation(代):表示记录被修改的次数。该数字在程序度数据时返回,用来确认正在写入的数据从最后一次读开始未被修改过。
  2. time-to-live(TTL):AS会自动根据记录的TTL使其过期。每次在对象上执行写操作TTL就会增加。3.10.1版本以上,可以通过设置策略,使更新记录时不刷新TTL。
  3. last-update-time (LUT):上次更新时间,这是一个数据库内部的元数据,不会返回给客户端。

5.5 Bins(类似列)

类似于数据库字段,支持 Java 基本数据类型: List 、 Map 、 Blob, 一个 namespace 下最多 32767 个 bin

在一条记录里,数据被存储在一个或多个bins里,bins由名称和值组成。bins不需要指定数据类型,数据类型有bins中的值决定。动态的数据类型提供了很好的灵活性。AS中每条记录可以由完全不同的bins组成。记录无模式,你可以记录的任何生命周期增加或删除bins。

在一个库中bins的名称最多包含32k,这是由内部字符串优化所致。(相比于HBase支持几百万列还是有一定差距,如果想直接将HBase表迁移到AS可能需要重新设计存储结构)

6、aerospike管理

aerospike-server 管理工具: asadm

asadm 进入管理端
Admin> info
Admin> i net

aerospike-server 操作 : aql

aql> show namespaces
+------------+
| namespaces |
+------------+
| "test" |
| "bar"  |

7、Aerospike集群实现

Aerospike集群管理:
集群处理节点成员身份,并确保当前成员和所有集群中的节点保持一致。包括:集群视图、节点发现和 视图改变

集群视图
每个 Aerospike 节点都会自动分配唯一的节点标识符,是由 MAC 地址和监听端口组成的。包括:

  • cluster_key :是一个随机生成的 8 字节值,用于标识集群视图的实例。
  • succession_list: 是作为集群一部分的唯一节点标识符集合。

节点发现

  • 节点间通过心跳消息来检测节点的有效或失效
  • 集群中的每个节点维护一个邻接表,是最近向该节点发送心跳消息的其他节点列表
  • 如果心跳超时,则表示该节点失效,从邻接表中删除
  • Aerospike 还采用其他信息作为备用二次心跳机制
  • 集群中的每个节点通过计算平均消息丢失来评估每个相邻节点的运行状态评分

视图改变

  • 领接表一旦发生改变,就会触发运行一个 Paxos 共识算法来确定一个新的集群视图。
  • Aerospike 把邻接表中节点标识符最高的节点当 Proposer ,并承担 Proposal 的角色
  • Proposal 提成新的集群视图,如果被接受,则节点开始重新分配数据( Rebalence )

Aerospike 数据分布
Aerospike 有智能分区算法,即把用户输入的 key 在内部根据 RIPEMD-160 算法,重新 hash 出一个 key 并取前20 位,然后相对均衡的把数据分布到各个节点之上。并且满足 namespace 配置文件的配置(例如保存多少个备份、是存在磁盘还是存在内存中)。

每个 Digest Space ( namespace )被分为 4096 个不重叠的分区( partitions ),它是 Aerospike 数据存储的最小单位

如上,一个4个节点的集群,每个节点存储1/4数据的主节点,同时也存储1/4数据的副本。如果节点1不可访问,节点1的副本将被拷贝到其他节点上。

复制因子( replication factor)是一个配置参数,不能超过集群节点数。副本越多可靠性越高。

作为必须经过所有数据副本的写请求也越高。实践中,大部分部署使用的数据因子为2(一份主数据和一个副本)。 同步复制保证即时一致性,没有数据丢失。在提交数据并返回结果给客户端之前,写事务被传播到所有副本。

主成功同时备成功后,客户端认为是成功

在集群重新配置期间,当Aerospike智能终端发送请求到那些短暂过时的错误节点时,Aerospike智能集群会透明的代理请求至正确的节点。

Aerospike 集群配置和部署

有两种方式可以搭建集群: Multicast 组播方式( UDP )和 Mesh 网格方式( TCP )

Multicast 组播方式( UDP )

heartbeat { mode multicast multicast-group 239.1.139.1 port 3000 address 192.168.127.131 interval 150 timeout 10
}

udp 是不可靠协议,所以有可能会造成节点脱落,而且网络有可能不支持组播

Mesh 网格方式( TCP )

heartbeat { mode mesh # add current node address here address 192.168.127.131 port 3000 # add all cluster node address here mesh-seed-address-port 192.168.127.131 3002 mesh-seed-address-port 192.168.127.128 3002 interval 150 timeout 10
}

集群部署
安装 Aerospike 后,修改配置文件 /etc/aerospike/aerospike.conf

# vim /etc/aerospike/aerospike.conf
service {user root group root paxos-single-replica-limit 1 # Number of nodes where the replica count is automatically reduced to 1. pidfile /var/run/aerospike/asd.pid proto-fd-max 15000
}
logging {# Log file must be an absolute path. file /var/log/aerospike/aerospike.log { context any info }
}
network {service {address any port 3000 access-address 192.168.127.128 3002 }heartbeat { mode mesh address 192.168.127.128 port 3002 #all cluster mesh-seed-address-port 192.168.127.128 3002 mesh-seed-address-port 192.168.127.131 3002 # To use unicast-mesh heartbeats, remove the 3 lines above, and see # aerospike_mesh.conf for alternative. interval 150 timeout 10}fabric {address any port 3001 }info { address any port 3003 }
}
namespace test { replication-factor 2 memory-size 256M storage-engine memory
}
namespace bar { replication-factor 2memory-size 256M storage-engine memory
}

Aerospike基本概念相关推荐

  1. AeroSpike基本原理及概念

    说明:分两篇介绍,第一篇为基本概念介绍,第二篇为Java客户端操作. 1.什么是AeroSpike?   Aerospike是一个分布式,可扩展的NoSQL数据库.T级别大数据高并发的结构化数据存储解 ...

  2. Aerospike - 安装以及入门知识

    Docker安装Aerospike Aerospike镜像下载,安装指定版本(4.0.0.5) docker pull aerospike:4.0.0.5 C:\Users\guoyu.huang&g ...

  3. Aerospike之路

    Docker 重要概念 镜像:理解为某个系统 容器:镜像运行时的实体 环境准备 安装(mac系统,且已安装brew) brew docker 基本操作 # 查看.删除镜像 docker images ...

  4. Aerospike学习笔记篇

    一.Aerospike概念 Aerospike 是一个分布式.可扩展的Nosql 数据库.以KV 键值进行存储,当然也支持文档存储模型,在国内的并没有广泛使用,而在国外却大多数用在广告行业,以存储大数 ...

  5. AeroSpike基本应用

    说明:分两篇介绍,第一篇为基本概念介绍,第二篇为实际应用:该篇为应用部分. 1.常用操作命令   Aerospike提供一套类SQL操作,和Mysql语法极其相似(命令解析参考注释),在安装aeros ...

  6. Aerospike使用介绍

    关于 Aerospike Aerospike 服务器向外扩展,形成一个无共享的集群,透明地对数据进行分区,并跨节点并行处理数据.集群中的节点都是相同的:您可以从使用两个硬件开始,随后添加更多的硬件.集 ...

  7. Aerospike学习

    Aerospike Aerospike是一个分布式,高可用的 K-V类型的NoSQL数据库.提供类似传统数据库的ACID操作. 优势 AS最大的卖点就是可以存储在SSD上,并且保证和Redis相同的查 ...

  8. java字符串反转义,重要概念一网打尽!

    主要内容 本文是从大型互联网系统的应用角度探讨分布式缓存的.本文站在原理.框架.架构.案例等多个视角对分布式缓存进行了探讨. 互联网系统随着容量需求的陡增,许多看似简单的存储类场景都面临着巨大的容量问 ...

  9. Aerospike数据库设计与分布式一致性

    作者:禅与计算机程序设计艺术 云计算.容器化和微服务架构给企业带来了巨大的改变.Aerospike 是一个高度可扩展的开源 NoSQL 数据库,它提供了非常强大的内存利用率和高性能,能够处理海量数据存 ...

最新文章

  1. 如何在Ubuntu Linux上开采以太坊?
  2. 如何兼容並蓄Android Studio 與 Eclipse 的優點, 減少顧此失彼的缺憾
  3. 软件测试_单元测试反模式,完整列表
  4. mysql varchar 1024_mysql中的数据类型
  5. 斑能不能彻底去掉_用茶树精油祛痘时,千万不能做这5件事!!!
  6. python 数组和列表的区别
  7. mysql集群一:主从复制,通过mysql-proxy做负载均衡
  8. POJ1279 Art Gallery 多边形的核
  9. 果然十三香!苹果全球销量超越小米重回第二,第一还是它
  10. quartsu仿真8:二五十计数器74290的基本功能
  11. php设计模式实战之--观察者模式
  12. HDU 1058 Humble Numbers(DP,数)
  13. wps 甘特图_强烈推荐5款在线甘特图工具,又简单又清爽又好用
  14. 安卓内存监控悬浮窗,6年菜鸟开发面试字节跳动安卓研发岗,面试建议
  15. hadoop hive窗口函数求和
  16. html写手机登录界面,使用HTML做手机端的登录界面
  17. 阿里云域名备案与服务器tomcat非80端口绑定
  18. python分号_在Python中拆分分号分隔的字符串
  19. python三种运算符_Python 海象运算符 (:=) 的三种用法
  20. Linux中的UID与GID

热门文章

  1. Windows下配置CMake(入门级教程,适合新人收藏学习)
  2. 毕业论文答辩ppt怎么写?
  3. android iperf 命令行,Android 移植之 iperf
  4. 【VBA研究】操作InternetExplorer控件取数据
  5. 【51单片机】基于STC89C52RC的电子秒表
  6. 全球及中国物联网智能模组行业竞争态势及发展战略规划报告2022-2028年版
  7. 彩云小译:最佳的网页翻译插件
  8. TI Lab_SRR学习_1 硬件基础 AWR1642和AWR1642EVM
  9. ORACLE SQL 创建表
  10. SAP学习之配置——BOM用途