前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Riak - 背景篇(3)

Riak - 背景篇(3)

作者头像
干货满满张哈希
发布于 2021-04-12 08:15:52
发布于 2021-04-12 08:15:52
5350
举报

分布式高可用键值对数据库Riak - 背景篇(3)

Dynamo对于数据版本的处理

数据版本问题不止存在于分布式系统,这里针对分布式数据库系统简单讨论下。先看一个简单的例子,用户x对key1做了一次写入操作,我们设值是数字3。然后用户y读取了key1,这个时候用户y知道的值是3。然后用户x对值做了一个+1操作,将新值写入,现在key1的值是4了。而用户y也做了一次+1操作,然后写入,因为用户y读到的值是3,y不知道这个值现在已经变化了,结果按照语义本应该是5的值,现在还是4。 解决这个问题常用的方法是设置一个版本值。用户x第一次写入key1 值3的时候,产生一个版本设为v1。用户y读取的信息中包括版本编号v1。当x做了加1把值4写入的时候,告诉server自己拿到的是版本v1,要在v1的基础上把值改成4。server发现自己保存的版本的确是v1所以就同意这个写入,并且把版本改成v2。这个时候y也要写入4,并且宣称自己是在版本v1上做的修改。但是因为server发现自己手里已经是版本v2了,所以server就拒绝y的写入请求,告诉y,版本错误。这个算法在版本冲突的时候经常被使用。 但是对于如我们刚才描述的分布式数据库系统,就不能这么做。假设我们设置了N=3 W=1。现在x写入key1 值3,这个请求被节点A处理,生成了v1版本的数据。然后x用户又在版本v1上进行了一次key1值4的写操作,这个请求这次是节点C处理的。但是节点C还没有收到上一个A接收的版本(数据备份是异步进行的)如果按照上面的算法,他应该拒绝这个请求,因为他不了解版本v1的信息。但是实际上是不可以拒绝的,因为如果C拒绝了写请求,实际上W=1这个配置,这个服务器向客户做出的承诺将被打破,从而使得系统的行为退化成W=N的形式。那么C接收了这个请求,就可能产生前面提到的不一致性。如何解决这个问题呢? Dynamo 的方法是保留所有这些版本,用vector clock记录版本信息。当读取操作发生的时候返回多个版本,由客户端的业务层来解决这个冲突合并各个版本。当然客户端也可以选择最简单的策略,就是最近一次的写覆盖以前的写。 举个例子: 假设处理运单一,一开始请求发送到了E机器,更新status为1。E对应的虚节点上会记录E1((status:1,E)),并同步给其他备份节点。

之后请求又发送到了E机器,更新status为2。E对应的虚节点上会更新记录E2((status:2,E)),并同步给其他备份节点。

假设这时 ,有更新请求到了B和A上,B和A会分别更新自己的记录为B1(((status:2,E),(status:3,B))和A1(((status:2,E),(status:4,A))

之后,经过同步,每个虚节点会保存冲突版本,直到业务端解决冲突

啰嗦下NoSQL与数据库趋势

首先还是存在了20多年的关系型数据库,它还是很成功的,能够稳定的运行在单机环境并可靠的持久化数据,并能控制并发访问有效的处理事务。 但是这种基于关系代数创造出来的关系型数据库,与研发人员设计的实体对象类,并不是很匹配。于是出现了一些类似于Hibernate和MyBatis这样的ORM(对象关系映射)层框架产品。 传统上,应用的各个模块都把同一份数据库当做共用的集成点。但是现在,流行的应用设计思想比如说微服务的思想可以理解为每个应用模块都会封装自己的数据库,并通过服务彼此集成。集群化的思想也日趋流行,但是,传统的关系型数据库在集群上的表现很差。这也是CAP理论的验证,因为传统的关系型数据库,一致性(C)和可用性(A)保证得很好,但是分区集群容错性(P)表现的就不那么好了。 于是,强调不同CAP维度的NoSQL出现了。

Riak简介

Riak是Basho公司推广开发的基于Amazon的Dynamo理论的键值对分布式数据库。Basho Technologies,分布式NoSQL数据库Riak的创建者,在经历一轮强劲的增长之后获得了2500万美元的G轮融资,这些资金正被用来扩大开发和营销活动。Riak是开源的,但是Basho的Riak Enterprise增加了multi-data center复制等主要功能,这项特性使得在全球范围内分布式工作负载、监控和不间断支持成为可能。 我们可以把Riak理解为之前我们所述Dynamo理论的一个不错的实现。 Riak到现在主要经历了两个时代,分别是1.0和2.0时代。 Riak主要有如下几个重要特性:

  1. 键值型数据库,所有键值对放在不同的桶(bucket)中。
  2. 基于NWR模型的高可用,Riak可以通过读写多个服务器来保证网络断掉或者机器宕机时维持服务可用。
  3. 集群增加新的节点时,不用很繁琐的操作,可以实现便捷扩容
  4. Riak可以将数据均匀的分布到集群内的每一个节点上,从而保证性能近似线性地随着机器增加而增加。
  5. Riak是无主集群,在集群中某一节点宕机或者永久性损坏不会影响整个集群
  6. 版本向量解决分布是数据冲突。就是本文开头说的冲突解决办法
  7. Map-reduce操作

在2.0以后,引入了如下更多的特性:

  1. 新的CRDT(Conflict-free Replicated Data Type)数据类型。但是需要Bucket显示指定特定的数据类型
  2. 强一致性改进,Riak安全相关,新型Riak搜索引擎(集成Solr) - 这些需要Riak配置文件显式地打开。
  3. Dotted Version Vectors (DVVs) 新型的版本向量方案
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/04/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Riak - 背景篇(1)
典型的现代关系数据库在某些类型的应用程序中表现平平,难以满足如今的互联网应用程序的性能和可扩展性要求。因此,需要采用不同的方法。在过去几年中,一种新的数据存储类型变得非常流行,通常称为 NoSQL,因为它可以直接解决关系数据库的一些缺陷。Riak 就是这类数据存储类型中的一种。 Riak 并不是惟一的一种 NoSQL 数据存储。另外两种较流行的数据存储是 MongoDB 和 Cassandra。尽管在许多方面十分相似,但是它们之间也存在明显的不同。例如,Riak 是一种分布式系统,而 MongoDB 是一种单独的系统数据库,也就是说,Riak 没有主节点的概念,因此在处理故障方面有更好的弹性。尽管 Cassandra 同样是基于 Amazon 的 Dynamo 描述,但是它在组织数据方面摒弃了向量时钟和相容散列等特性。Riak 的数据模型更加灵活。在 Riak 中,在第一次访问 bucket 时会动态创建这些 bucket;Cassandra 的数据模型是在 XML 文件中定义的,因此在修改它们过后需要重启整个集群。 Riak 是用 Erlang 编写的。而 MongoDB 和 Cassandra 是用通用语言(分别为 C++和 Java)编写,因此 Erlang 从一开始就支持分布式、容错应用程序,所以更加适用于开发 NoSQL 数据存储等应用程序,这些应用程序与使用 Erlang 编写的应用程序有一些共同的特征。 Riak支持Map/Reduce 作业,但是Map/Reduce 作业只能使用 Erlang 或 JavaScript 编写。
干货满满张哈希
2021/04/12
2.4K0
Riak - 背景篇(1)
AWS Dynamo系统设计概念,16页改变世界的论文
了解如何在你的系统设计中使用Dynamo系列、AWS DynamoDB、Cassandra和SimpleDB ◆  在我们开始之前的快速介绍 早在2004年,亚马逊正在运行一个大型的分布式Oracle数据库集群。想象一下,大量的服务器,运行大量笨重的闭源专有软件,并没有真正关注规模和可用性。他们在当时的规模下挑战了商业数据库的极限。 重要的是要了解这是个不同的时代。分布式系统并不常见,关系型数据库是唯一的主要OLTP数据库,最重要的是,当时没有足够的人或数据在线。 看到互联网在过去十年或二十年里的爆炸性
IT大咖说
2022/07/18
1.7K0
AWS Dynamo系统设计概念,16页改变世界的论文
胖子哥的大数据之路(6)- NoSQL生态圈全景介绍
NoSQL高级培训课程的基础理论篇的部分课件,是从一本英文原著中做的摘选,中文部分参考自互联网。给大家分享。
数据饕餮
2019/01/14
6390
Amazon Dynamo系统架构
本文参考了网上众多文章,把 Amazon Dynamo 架构汇总成文,为后续源码分析奠定基础。
罗西的思考
2021/02/04
1.5K0
[转载]十六款值得关注的NoSQL与NewSQL数据库
传统关系型数据库在诞生之时并未考虑到如今如火如荼的移动、社交以及大数据负载类型,同时也并不适合处理极端规模处理任务。不过大家不必担心,十六家专业企业已经为我们带来他们各自的次世代NoSQL与NewSQL选项。
干货满满张哈希
2021/04/12
1.6K0
[转载]十六款值得关注的NoSQL与NewSQL数据库
NoSQL数据库探讨
随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。
黄规速
2022/04/14
1.8K0
如何在Ubuntu 14.04上使用Python3安装和配置Riak2
Riak是一个noSQL非关系数据存储区,专注于分布式数据库架构。使用最新的Riak 2.1.1版本,可以使所有数据保持一致,其中数据在检索时是最新的,而不是最终一致的,其中数据更易于访问但不是最新的。
小翼111
2018/09/29
7840
Riak - 安装运维篇(1)
我的操作系统是Red Hat Enterprise Linux Server release 6.6 (Santiago),这也是我们目前生产上用的。 我直接在root下安装,先切换到root用户。 首先,安装下需要的软件,Riak官网给的不全:
干货满满张哈希
2021/04/12
9260
超详细的大数据学习资源推荐(上)
今天为大家推荐一些翻译整理的大数据相关的学习资源,希望能给大家带来价值。
挖掘大数据
2018/01/12
2.2K0
详解 NoSQL 数据库的分布式算法
系统的可扩展性是推动NoSQL运动发展的的主要理由,包含了分布式系统协调,故障转移,资源管理和许多其他特性。这么讲使得NoSQL听起来像是一个大筐,什么都能塞进去。尽管NoSQL运动并没有给分布式数据处理带来根本性的技术变革,但是依然引发了铺天盖地的关于各种协议和算法的研究以及实践。正是通过这些尝试逐渐总结出了一些行之有效的数据库构建方法。在这篇文章里,我将针对NoSQL数据库的分布式特点进行一些系统化的描述。 接下来我们将研究一些分布式策略,比如故障检测中的复制,这些策略用黑体字标出,被分为三段: 数据一
CSDN技术头条
2018/02/09
7570
详解 NoSQL 数据库的分布式算法
Basho融资2500万美元,NoSQL数据库成投资新宠或逆袭
对于Basho来说,去年是一个过渡时期。Basho前首席执行官Greg Collins、首席技术官Justin Sheehy以及首席架构师Andy Gross全部离职,但该公司还是成功地吸引了一批新的行政和技术人才。 前Tier 3首席执行官Adam Wray 3月份被任命为Basho首席执行官。Wray说:“我在Tier 3的时候就看到了这个行业的趋势,这正是我来此处的目的”。Tier 3现在已经被CenturyLink收购并且在CenturyLink云战略中发挥重要作用。Dave McCrory曾在VM
CSDN技术头条
2018/02/09
7870
Basho融资2500万美元,NoSQL数据库成投资新宠或逆袭
DDIA 读书分享 第六章:分片方式
通常来说,数据系统在分布式系统中会有三级划分:数据集(如 Database、Bucket)——分片(Partition)——数据条目(Row、KV)。通常,每个分片只属于一个数据集,每个数据条目只属于一个分片。单个分片,就像一个小点的数据库。但是,跨分区的操作的,就要复杂的多。
木鸟杂记
2023/09/06
1900
DDIA 读书分享 第六章:分片方式
微服务架构下数据如何存储?有考虑过吗?
微服务架构下,很适合用 DDD(Domain-Drive Design)思维来设计各个微服务,使用领域驱动设计的理念,工程师们的关注点需要从 CRUD 思维中跳出来,更多关注通用语言的设计、实体以及值对象的设计。至于数据仓库,会有更多样化的选择。分布式系统中数据存储服务是基础,微服务的领域拆分、领域建模可以让数据存储方案的选择更具灵活性。
田维常
2020/06/28
4.1K0
微服务架构下数据如何存储?有考虑过吗?
带你遨游银河系的 10 种分布式数据库
关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库,由二维表及其之间的联系所组成的一个数据组织。
Bug开发工程师
2021/07/01
2.9K0
带你遨游银河系的 10 种分布式数据库
【独家】一文读懂非关系型数据库(NoSQL)
本文共11000字,阅读全文约需30分钟。 本文为大家解析非关系型数据库(NoSQL)。[ 在数据派THU后台(非留言区)回复"综述"即可获取资源。] 前言 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 现代计算系统每天在网络上都会产生庞大的数据量。这些数据有很大一部分是由关系型数据库管理系统(RDBMSs)来处理,其严谨成熟的数学理论基础使得数据建模和应用程序编程更加简单。 但随着信息化的浪潮和互联网的兴起,传统的RDBMS在一些业务上开始出现问题。首先,对数
数据派THU
2018/01/29
10.3K0
HBase Cassandra Riak HyperTable
Cassandra                                                              HBase 一致性 Quorum NRW策略 通过Gossip协议同步Merkle Tree,维护集群节点间的数据一致性 单节点,无复制,强一致性 可用性 1,基于Consistent Hash相邻节点复制数据,数据存在于多个节点,无单点故障。 2,某节点宕机,hash到该节点的新数据自动路由到下一节点做 h
架构师刀哥
2018/03/20
1.3K0
HBase Cassandra  Riak  HyperTable
NoSQL教程:了解NoSQL的功能,类型,含义,优势
NoSQL是一种非关系型DMS,不需要固定的架构,可以避免joins链接,并且易于扩展。NoSQL数据库用于具有庞大数据存储需求的分布式数据存储。NoSQL用于大数据和实时Web应用程序。例如,像Twitter,Facebook,Google这样的大型公司,每天可能产生TB级的用户数据。
MongoDB中文社区
2019/11/25
4.1K0
NoSQL教程:了解NoSQL的功能,类型,含义,优势
Redis笔记
Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。是NoSQL技术之一,也被称为结构化数据库!
技术交流
2022/11/18
3740
Redis笔记
8种主流NoSQL数据库对比
摘要:虽然SQL数据库是非常有用的工具,但经历了15年的一支独秀之后垄断即将被打破。这只是时间问题:被迫使用关系数据库,但最终发现不能适应需求的情况不胜枚举。 简介 NoSQL,是一项全新的数据库革命性运动,NoSQL的拥护者们提倡运用非关系型的数据存储。现今的计算机体系结构在数据存储方面要求具备庞大的水平扩展性,而NoSQL致力于改变这一现状。目前Google的 BigTable 和Amazon 的Dynamo使用的就是NoSQL型数据库。 但是NoSQL数据库之间的不同,远超过两 SQL数据库之间的差别
小小科
2018/05/02
24.3K0
『互联网架构』软件架构-Nosql之redis(47)
1.内存容量有限(redis本身是存储在内存里面,硬件机器本身的内容容量是有限,往redis存储的量可能很大,就会出现内存容量的问题) 2.处理能力有限(一个人干活跟二个人干活的区别。跟内存的限制相似,类似网络不好,能力就收到限制) 3.无法高可用(一旦请求量上去,可能存在系统挂掉,挂掉其他的调用系统就无法调用了)
IT架构圈
2019/05/14
6060
『互联网架构』软件架构-Nosql之redis(47)
相关推荐
Riak - 背景篇(1)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文