1:Aerospike数据库是Shared-Nothing架构,集群中的每个节点都是相同的,不会出现单点故障。

Aerospike有智能分区算法,即把用户输入的key在内部根据RIPEMD-160算法,重新hash出一个key并取前20位,然后相对均衡的把数据分布到各个节点之上。并且满足namespace配置文件的配置(例如保存多少个备份、是存在磁盘还是存在内存中)。官方说:随机分布函数可以保证数据分布误差在1-2%之间。(这里有个坑,后续再讨论)

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

复制因子( replication factor)是一个配置参数,不能超过集群节点数。副本越多可靠性越高。但是作为必须经过所有数据副本的写请求也越高。实践中,大部分部署使用的数据因子为2(一份主数据和一个副本)。
同步复制保证即时一致性,没有数据丢失。在提交数据并返回结果给客户端之前,写事务被传播到所有副本。个别案例中,在集群重新配置期间,当Aerospike智能终端发送请求到那些短暂过时的错误节点时,Aerospike智能集群会透明的代理请求至正确的节点。最后,当集群正在从分区中恢复,它解决所有发生在不同副本之间的冲突。解析可以配置为自动的,在这种情况下拥有最新的时间戳的数据被视为标准。或者为了在更高层次解析,所有数据副本可以被返回应用程序。

namespace是Aerospike数据库以相同方式存储的数据的集合。每个namespace分为4096个分区,分区被均等的分到集群中的节点。意味着如果集群中有n个节点,每节点约存储1/n的数据

用非常随机数哈希方法保证分区均匀分布。我们已经在这个领域的许多案例中测试过我们的方法,数据分布误差在1-2%。

因为数据均匀且随机的分布于节点,不会出现热点和瓶颈。也不会出现明显的某个节点比其他节点处理请求多的情况。

例如,在美国很多的姓以R开头。如果数据按照字母排序存储,存储以R开头的服务器其通讯量会远远大于存储以X,Y或Z开头的服务器。数据随机分配保证服务器负载均衡。

下一步,无须人工分片。集群节点间均等的划分分区。客户端发现集群变化并发送请求到正确的节点。定节点被添加或移除,集群自动再平衡。集群中所有节点是均等的-没有单独的master节点失败而导致整个数据库宕掉。

当数据库create一个条记录,记录key的哈希值被用来分配记录到某一分区,哈希算法是确定的-哈希算法总是将记录映射到同样分区。在记录的整个生命周期它驻留在同一节点上。分区可能从一个节点移动到其他节点。但是分区不会分裂或者重新分配记录到其他分区

集群中每个节点有一个配置文件。每个节点上的namespace配置参数必须一致。

考虑4节点集群的情况。Aerospike数据库中,无复制数据需要设置复制因子为1(replication factor = 1),意思是数据库中只存在一个副本。

因为所有4096个分区在一个4节点集群中,每个节点有1/4的数据-随机分配的1024个分区。集群看起来如下图,每个节点管理一个分区集合(简单起见,只展示两个节点的分区):

每个节点是1/4数据分区的主数据节点-如果节点是数据的主读写源,那么它就是主数据节点。

客户端对数据有位置感知能力-客户端知道每个分区的位置-索引数据可以单跳从节点返回。每个读写请求发送至主数据节点处理。当智能节点读某条记录时,它发送请求到记录的主数据节点。

现在考虑一下带数据复制的情况。大多数情况是维护两个数据副本,主数据和副本。Aerospike数据库中,需要指定复制因子为2(replication factor = 2)。

在这个例子中,每个节点拥有1/4的主数据(1024个分区)和1/4的数据副本(1024个分区)。看起来像这样(简单起见,显示两个节点的细节)

注意,每个节点的主数据作为副本被分布到所有的其他节点。例如,节点#1的主数据分区副本横跨其他节点分布。当节点#1不可用,节点#1的数据副本延伸至跨其他数据节点。

与先前提到的无副本的例子一样,客户端发送请求至主数据。

与无复制的情况一样,读请求通过智能客户端发送至正确的节点,写请求也被发送至正确的节点。当节点收到写请求,它保存数据并转发写请求到副本节点。一旦副本节点确认数据写成功并且主数据节点本身也完成写动作,然后确认被发送至客户端,写操作成功。

复制因子不能超过集群中节点的数量。越多副本越可靠,但是对于穿越所有副本的写请求的需求也越高。实践中,多数数据库复制因子为2。

Aerospike数据再平衡算法保证请求量在所有节点间均匀分布,在再平衡期间节点失败发生时,算法依旧健壮。系统被设计为持续可用,所有数据再平衡不影响集群行为。事务算法与数据分布系统集成,只有一个一致投票来协调集群变化。当客户端发现新的集群配置时,利用集群内部重定向算法,只有一个小的间隔。这样,在一个可伸缩的无共享机制优化事务简单环境,同时保ACID特征。

Aerospike允许配置选项指定有多少可用的操作开销应该用于管理任务,例如与运行客户端事务相比有多少用于节点间再平衡。在首选事务放缓的情况下,集群愈合更快。在交易量和速度必须维持的情况下,集群再平衡会很慢。

在某些集群因子不能满足的情况下。集群可以配置为减少配置因子以保持所有数据,或者清除哪些标记为可丢弃的就数据。如果集群不成接受更多数据,集群将在read-only模式下操作,直到新的扩容可用-节点会自动变为可以接受应用程序的写操作。

不需要操作员干预,甚至在要求的时间内,集群将自愈。在客户部署中,提取8节点集群中的一个会让整个回路被打断。这就需要无人工干预。即使数据中心在高峰时宕机,事务依旧保持精确的ACID。几小时内,当错误被修复,操作者不需要执行特殊步骤来维护集群。

我们的扩容计划和系统监控,为你提供处理不可预见的错误的能力,而且无服务丢失。你可以配置硬件容量、设置复制/同步策略,这样数据库恢复时可以对用户无影响。

http://www.aerospike.com/docs/architecture/data-distribution.html

Aerospike系列:7:数据分布详解的更多相关文章

  1. nginx高性能WEB服务器系列之四配置文件详解

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  2. mongo 3.4分片集群系列之六:详解配置数据库

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  3. mongo 3.4分片集群系列之五:详解平衡器

    这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...

  4. Hexo系列(二) 配置文件详解

    Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...

  5. css3系列之transform详解translate

    translate translate这个参数的,是transform 身上的,那么它有什么用呢? 其实他的作用很简单,就是平移,参考自己的位置来平移 translate() translateX() ...

  6. ThreeJS系列1_CinematicCameraJS插件详解

    ThreeJS系列1_CinematicCameraJS插件详解 接着上篇 ThreeJS系列1_CinematicCameraJS插件介绍 看属性的来龙去脉 看方法作用 通过调整属性查看效果 总结 ...

  7. [js高手之路] html5 canvas系列教程 - 状态详解(save与restore)

    本文内容与路径([js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解)是canvas中比较重要的概念.掌握理解他们是做出复杂canvas动 ...

  8. Tomcat原理系列之六:详解socket如何封装成request(上)

    目录 参与者 总结 @(详解socket如何封装成request) 看源码虽然不能马上提升你的编码水平.但能让你更好的理解编程. 因为我们tomcat多是以NIO形式处理请求,所以本系列讲的都是NIO ...

  9. 直通BAT必考题系列:深入详解JVM内存模型与JVM参数详细配置

    VM基本是BAT面试必考的内容,今天我们先从JVM内存模型开启详解整个JVM系列,希望看完整个系列后,可以轻松通过BAT关于JVM的考核. BAT必考JVM系列专题 1.JVM内存模型 2.JVM垃圾 ...

  10. 深入浅出Mybatis系列四-配置详解之typeAliases别名(mybatis源码篇)

    注:本文转载自南轲梦 注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 上篇文章<深入浅出Mybatis系列(三)---配置详解之properties ...

随机推荐

  1. Java获取URL链接的文件类型

    问题发生: Java从网络批量读取图片并保存至本网站服务器后再插入文章中 今天转入一篇文章 http://news.qq.com/a/20170605/045860.htm 发现图片未能成功上传 查看 ...

  2. tsung执行时报Can't locate Template.pm的解决

    [root@openfire-x86v-app01 20141118-0931]# tsung_stats creating subdirectory data creating subdirecto ...

  3. Ioc模式和MEF

    IOC模式 Ioc模式(又称DI:Dependency Injection 依赖注射). 分离关注( Separation of Concerns : SOC)是Ioc模式和AOP产生最原始动力,通过 ...

  4. 部署maven的一些要点、遇到的问题和心得体会

    maven的部署.遇到的问题和心得体会 2013-10-24 | 阅:  转:  |  分享         部署maven的一些要点.遇到的问题和心得体会 (图片看不了,可以下载doc文件) 一.  ...

  5. Netty精粹之JAVA NIO开发需要知道的

    学习Netty框架以及相关源码也有一小段时间了,恰逢今天除夕,写篇文章总结一下.Netty是个高效的JAVA NIO框架,总体框架基于异步非阻塞的设计,基于网络IO事件驱动,主要贡献在于可以让用户基于 ...

  6. Java中线程池,你真的会用吗?

    在<深入源码分析Java线程池的实现原理>这篇文章中,我们介绍过了Java中线程池的常见用法以及基本原理. 在文中有这样一段描述: 可以通过Executors静态工厂构建线程池,但一般不建 ...

  7. 单一职责原则(Single Responsibility Principle,SRP)

    定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的 ...

  8. ios开发第三方库--cocoapods安装

    1. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)&quo ...

  9. 如何: 重命名在 IIS 6.0 中的虚拟目录

    警告如果错误地为编辑元数据库,您会导致严重的问题,甚至可能需要重新安装使用元数据库的任何产品. Microsoft 不能保证可以解决问题,如果您错误地编辑元数据库产生.编辑元数据库需要您自担风险. 注 ...

  10. 如何查看Isilon节点的硬件信息?

    Isilon节点虽然是一个Linux,但是很多linux下常用的命令都没有,比如说看内存的.笔者经过试验,列出了一些可用的命令. 查看硬件状态 isi_hw_status 查看内存 sysctl hw ...