北京快三开奖

  • <tr id="U9YkSO"><strong id="U9YkSO"></strong><small id="U9YkSO"></small><button id="U9YkSO"></button><li id="U9YkSO"><noscript id="U9YkSO"><big id="U9YkSO"></big><dt id="U9YkSO"></dt></noscript></li></tr><ol id="U9YkSO"><option id="U9YkSO"><table id="U9YkSO"><blockquote id="U9YkSO"><tbody id="U9YkSO"></tbody></blockquote></table></option></ol><u id="U9YkSO"></u><kbd id="U9YkSO"><kbd id="U9YkSO"></kbd></kbd>

    <code id="U9YkSO"><strong id="U9YkSO"></strong></code>

    <fieldset id="U9YkSO"></fieldset>
          <span id="U9YkSO"></span>

              <ins id="U9YkSO"></ins>
              <acronym id="U9YkSO"><em id="U9YkSO"></em><td id="U9YkSO"><div id="U9YkSO"></div></td></acronym><address id="U9YkSO"><big id="U9YkSO"><big id="U9YkSO"></big><legend id="U9YkSO"></legend></big></address>

              <i id="U9YkSO"><div id="U9YkSO"><ins id="U9YkSO"></ins></div></i>
              <i id="U9YkSO"></i>
            1. <dl id="U9YkSO"></dl>
              1. <blockquote id="U9YkSO"><q id="U9YkSO"><noscript id="U9YkSO"></noscript><dt id="U9YkSO"></dt></q></blockquote><noframes id="U9YkSO"><i id="U9YkSO"></i>
                企业空间 推销商城 存储论坛
                北京快三开奖全闪存阵列 IBM云盘算 Acronis 安克诺斯 安腾普 腾保数据
                首页 > 数据库 > 数据堆栈 > 注释

                RebornDB:下一代散布式Key-Value数据库

                2015-07-14 22:20泉源:中国存储网
                导读:RebornDB是一个基于署理的散布式Redis集群处理方案,RebornDB有一个杀手锏:静态的切分数据集,即通明的重新切分数据而不影响现在正在运转的效劳。

                RebornDB是一个基于署理的散布式Redis集群处理方案,有点像twemproxy。它有一个杀手锏:静态的切分数据集,即通明的重新切分数据而不影响现在正在运转的效劳。

                理想天下有很多的Key-Value数据库,它们都被普遍使用于许多零碎。比方,我们可以用 Memcached数据库存储一个MySQL盘问后果集给后续相反的盘问运用,用MongoDB存储文档以失掉更好的盘问功能等等。

                针对差别的场景,我们应该选差别的Key-Value数据库,没有一个Key-Value数据库实用于一切处理方案,但是假如你仅仅想要一个复杂、易于运用、疾速、支持多种弱小数据构造的Key-Value数据库,Redis能够是你作为开端的一个很好的选择。

                Redis是一个先辈的Key-Value缓存和数据库,它基于BSD答应证。它的速率很快,支持很多数据范例(String、Hash、List、Set、Sorted Set……),运用RDB或AOF耐久化和复制来包管数据的平安性,而且支持多种言语的客户端库。

                最紧张的是市场选择了Redis,有很多公司正在运用Redis而且它证明白本身的代价。

                固然redis是相称不错的,它依然有一些缺陷,最大的缺陷便是内存限定,Redis将一切数据驻留内存,这就限定了整个数据集的巨细,让我们不行能保管更多的数据。

                官方的Redis集群经过将数据分发到多个Redis效劳器来处理这个题目,但是这个办法并没有在很多实践情况中被证明。同时,它需求我们改动本人的客户端库来支持“MOVED”重定向和别的特别下令,而这在正在运转的消费情况异样是不行承受的。以是,Redis集群如今看来并不是一个好的处理方案。

                QDB

                我们喜好Redis,而且盼望逾越它的范围,因而我们创立了一个效劳叫做QDB,它兼容Redis,将数据保管在磁盘来越过内存巨细的限定而且将热门数据保管在内存中以进步功能。

                引见

                QDB是一个相似Redis的疾速Key-Value数据库,它有以下长处:

                兼容Redis:假如你对 Redis很熟习,你就能轻松运用QDB,它支持大少数的Redis下令和数据构造(String、Hash、List、Set、Sorted Set等);

                将数据保管在磁盘:(逾越内存巨细限定)可以将热门数据在内存中保管,应用了后端存储;

                支持多种后端存储:你可以选择 RocksDB、LevelDB 或许 GoLevelDB(稍后,我们将用RocksDBs作为例子解说);

                和Redis双向同步:我们可以作为一个从节点从 Redis同步数据,也可以作为一个主节点复制数据到Redis。

                后端存储

                QDB运用LevelDB、RocksDB、GoLevelDB作为后端存储。这些存储都是基于有着很好的疾速读写功能的日记构造的兼并树(LSM树),同时他们都运用布隆过滤器和LRU缓存(LRU:最少运用页面置换算法)来进步读的功能。

                LevelDB是由Google开辟的最早的版本,RocksDB是由Facebook维护的一个优化版本,GoLevelDB是一个地道用GO言语完成的LevelDB。假如你仅仅想要一个疾速实验而且不想构建和装置RocksDB或许LevelDB,你可以间接运用GoLevelDB,但是我们不引荐你将其运用在消费情况中,由于它的功能比拟差。

                LevelDB和RocksDB关于你的消费情况来说都黑白常不错的,但是鉴于RocksDB绝佳的功能,我们更喜好RocksDB,之后我们将只支持RocksDB和GoLevelDB,一个用于消费情况,另一个用于实验和测试情况中。

                RebirnDB

                QDB是很棒的,我们可以在一个呆板上存储宏大的数据,而且取得较好的读写功能,但是随着数据集的增长,我们依然碰面临如许的题目,即:我们不克不及将一切数据都保管在一个呆板上。同时,QDB效劳器将酿成一个瓶颈而且面对单点失败的危害。

                如今我们必需要思索集群处理方案了。

                引见

                RebornDB是一个基于署理的散布式Redis集群处理方案。它有点像twemproxy,一个简直是最早的、最闻名的基于署理的Redis集群处理方案。

                但是twemproxy有它本人的题目,它仅仅支持静态的集群拓扑,因而我们不克不及静态的添加或许删除redis节点来重新切分数据。假如我们运转着很多的twemproxy而且盼望添加一个Redis后端节点,另一个题目是怎样让一切的twemproxy平安的更新设置装备摆设,而这将添加IT操纵的庞大性。同时,Twitter(正在开辟twemproxy的公司)现在曾经保持并不再将其使用于消费情况。

                差别于twemproxy,RebornDB有一个杀手锏:静态的切分数据集,这将十分有效,特殊是在你的数据集增长很快,你不得不添加更多的存储节点来扩展集群的状况下。总之,RebornDB将会通明的重新切分数据而不影响现在正在运转的效劳。

                架构

                我们可以将RebornDB想象成一个黑盒,像一个单节点的Redis效劳器一样用任何现有的Redis客户端去和它通讯。上面的图片展现了RebornDB的架构。

                RebornDB:下一代散布式Key-Value数据库

                RebornDB有以下组件: reborn-proxy, backend store, coordinator, reborn-config, and reborn-agent.

                Reborn-proxy

                reborn-proxy为客户端提供单一的内部效劳。任何redis客户端都能衔接就任一reborn-proxy并运转下令。

                reborn-proxy用RESP剖析来自客户真个下令,将其分发至对应的后端存储,接纳到后端存储的回答并前往客户端。

                Reborn-proxy 是无形态的,意思是说你可以很容易的程度扩展redis-proxy来处置更多的效劳恳求。 

                 我们可以有很多的Reborn-proxy,在散布式零碎设计的时分怎样让客户端发明它们是另一个主题,但是我们不会在这里深化讨论这个题目,一些适用的办法是运用DNS,LVS,HAProxy等等。

                后端存储器(Backend store )

                后端存储器是reborn-server(一个修正的redis版本)或许QDB。我们引入一个观点叫做组(group)来办理一个或许多个后端存储。一个组(group)必需有一个主节点和零个、一个或许多个从节点构成复制拓扑构造。

                我们将整个数据集分红1024个slots(我们用hash(key)24来决议这个key属于哪个slot),而且将差别的slot保管到差别的组。假如你想重新切分数据,你可以添加一个新的组并让RebornDB 从另一个 组迁徙一个slot的一切数据到新的组。

                我们也可以让差别的组接纳差别的后端存储器。比方:我们盼望group1来保管热门数据,group2来保管少量的冷数据,那么我们就能运用reborn-server组成group1,QDB组成group2.Reborn-server比QDB快许多,因而我们可以包管热门数据的读写功能。

                和谐器(Coordinator )

                我们运用zookeeper或许etcd作为和谐效劳器,当我们需求做一些写操纵的时分,比方重新切分,毛病转移等,它们会和谐一切的效劳。

                一切RebornDB的信息都被保管在和谐器中,比方要害路由规矩,reborn-proxy可以依据它将下令准确的分发至后端存储器。

                Reborn-config

                Reborn-config是一个办理东西,我们可以运用它添加或删除组,比方添加或删除组中的存储,从一个组迁徙数据至另一个组等等。

                假如我们想要改动RebornDB集群的信息,就必需运用Reborn-config。比方:我们不克不及间接运用“SLAVE NO ONE”下令将后端存储器提拔为主节点,而必需运用“reborn-config server promote groupid server”我们必需不只仅改动组内的复制拓扑构造,并且要更新和谐器中的信息,而这些只要Reborn-config可以做到。

                Reborn-config也提供了一个网站效劳,因而你可以很容易的办理RebornDB,假如需求更多的控制,你可以运用它的HTTP RESTFUL API。

                Reborn-agent

                Reborn-agent是一个高可用组件。你可以用它启动和中止使用(reborn-config, qdb-server, reborn-server, reborn-proxy)。我们将在接上去的高可用局部细致讨论。

                重新切分(Resharding)

                RebornDB支持静态的重新切分数据。我们是怎样做到的呢?

                正如我们下面说的,我们将整个数据集分红1024个slots,而且将差别的slot保管到差别的组。当我们新添加一个组的时分,我们会将一些slots从旧的组迁徙到新组中。在重新切分进程中我们将它叫做迁徙。在RebornDB中最小的迁徙单位是slot。

                让我们从上面的一个复杂的例子开端:

                RebornDB:下一代散布式Key-Value数据库

                我们有两个组,group1有两个slot 1和2,group2有三个slot 3、4、5.如今group2的任务量比拟大,我们将会添加group3并将slot5迁徙出来。

                我们可以运用上面的下令来将slot5从group2迁徙至group3。

                reborn-config slot migrate 5 2 3

                (译者注:原文为 reborn-config slot migrate 5 5 3有误)

                这个下令看起来很复杂,但是我们需求在外部做许多任务来包管迁徙的平安性。我们必需运用两阶段提交协议(2PC)来通知reborn-proxy我们将把slot5从group2迁徙至group3。待一切reborn-proxy确认而且回答之后,我们将开端迁徙操纵。

                RebornDB:下一代散布式Key-Value数据库

                迁徙的流程比拟复杂:从slot5中失掉一个key,从group2迁徙它的数据至group3,然后删除group2中的key,云云循环。最初group2中就没有slot5的数据而一切slot5的数据都在group3中。

                key的迁徙是原子性的,因而无论这个key之前能否在group2或许group3中,我们可以确定的是在实行迁徙下令之后它是在group3中的。

                假如在group2中没无数据是属于slot5的,我们将中止迁徙,拓扑构造看起来是上面这个样子:

                RebornDB:下一代散布式Key-Value数据库

                高可用性(High Availability)

                RebornDB运用reborn-agent来提供HA处理方案。

                reborn-agent时时刻刻都在反省它启动的使用能否是运动的,假如reborn-agent发明一个使用挂失了,它会重新启动这个使用。

                Reborn-agent有点像一个办理员,但是它有更多的特点。

                Reborn-agent提供HTTP Restful API方便我们添加或删除需求主动态监控的使用顺序。比方:我们可以运用HTTP “/api/start_redis” API来启动一个新的reborn-server,或许“/api/start_proxy” API来启动一个新的reborn-proxy,我们也可以用“/api/stop”来中止一个正在运转的使用而且从现在的监控列表中删除它。

                Reborn-agent不只仅使用于当地使用的监控,异样实用于背景存储的HA。多个Reborn-agent将起首经过和谐器选择一个主reborn-agent,它会不时反省后端存储器能否是运动的,假如发明后端存储器宕机了,它就会停止毛病转移。假如宕机的后端存储器是一个从节点,reborn-agent将只会在和谐器中将它设置为离线,但是假如它是主节点,reborn-agent将会从现有的从节点中选择一个作为主节点并停止毛病转移操纵。

                行将要做的...... 

                虽然RebornDB有很多很棒的特性,我们依然需求更多的任务去进一步提拔它,我们后续能够做这些事变:

                更好的用户体验:如今运转RebornDB并不是那么容易,我们将要做一系列任务诸如初始化slots、添加效劳到group中、分派slots给一个组等等,在将来的任务中,怎样低落用户的运用门槛是我们必需要思索的题目;

                复制迁徙:如今我们迁徙是逐一key迁徙slot,假如一个slot包括很多数据的话速率就不是很快,运用复制迁徙能够会好许多。在下面的例子中,group2起首发生一个快照,group3 可以在谁人工夫点获得一切slot5的数据,之后group3将从group2增量同步变革的数据。当我们发明group3获得了group2中slot5一切变革的数据之后,我们将停止切换,并从group2中删除slot5;

                精巧的仪表板:为了提供更好的用户体验,我们盼望经过仪表板控制和监控统统事件。基于 P2P的集群:如今RebornDB是一个基于署理的集群处理方案,我们能够重新设计整个架构,之后将运用P2P,就像官方redis集群一样。

                总结

                构建一个散布式Key-value数据库不是一件容易的事变,后方的路还很长,我们如今只是迈出了一小步。

                假如你想要用一个像redis的、存储更少数据、支持在散布式零碎中静态切分数据的Key-value数据库,RebornDB将是一个不错的选择。

                持续阅读
                中国存储网声明:此文观念不代表本站态度,若有版权疑问请联络我们。
                相干阅读
                产物引荐
                头条阅读
                栏目热门

                Copyright @ 2006-2019 ChinaStor.COM 版权一切 京ICP备14047533号

                中国存储网

                存储第一站,存储流派,存储在线交换平台