[mongodb文档]分布式一致性

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

[mongodb文档]分布式一致性(一)[1]

一致性模型对于一个分布式数据库来说是至关重要的。这里我们将专门一个专题的形式来讲解一些主题:例如:针对一些具体的应用场景应该使用什么样的模型。首先从一些最基本的理论知识开始。

CAP

CAP理论指出任何一个分布式系统不可能同时满足一致性(Consistency)、可用性(Availibility)和分区容错性性(Partition Tolerance)这三个要求,最多只能同时满足其中的两个。同时,在一个分布式系统中,由于硬件或其他未知原因,不可避免的会出现网络分区的情况,因此在分布式系统的设计上必须考虑到对这种情况进行容错。于是,CAP理论其实决定了一个分布式系统的设计最终必然会聚焦于如何在数据一致性和高可用性上找到一个平衡点。

解决方案

通常我们会有两种各类型的系统架构,一种是系统能够实现强一致性的,我们将这种方案成为C方案。另一种则是牺牲一些一致性,但是能够保证高可用的方案,我们称之为A方案。我们结合一些真实的工业实现来加深对这两类架构的理解。

Amazon Dynamo是一个分布式存储系统,他利用一致性哈希来完成数据的分区。Dynamo能够做到最终一致性,因此在过程中会被脏(旧)数据,属于A类架构。

Apache CouchDB是一个面向文档的数据库管理系统,其最显著的特性是支持多主复制,属于A类架构,同样能够做到最终一致性。

MongoDB提供了一种自动分片(Auto-Sharding)的机制来是实现系统的水平扩展,同时在某一个时间点上,存在一个Master角色的机器,属于C类架构,因此和传统的关系型数据库一样,都能够保证强一致性。

关键的问题是,如何保证写可用,而不是读

As the replication isasynchronous, this data is eventually consistent, so this result is notsurprising — we are now in the A class of systems. However, almost all designs,even from the C class, can add on asynchronous read capabilities easy. Thus,the critical design decisions are around write availability.

如今,绝大部分的数据库系统,都能够很容易的构建一个由任意数量Slave组成的分布式数据库集群,其通过异步复制来实现数据的同步。如果在出现网络隔离故障导致网络分区的时候,依然能够访问本地Slave机器上的数据。同时,由于采用异步复制,因此能够保证数据的最终一致性——似乎这就一种典型的A类架构了。另一方面,几乎在所有的架构设计中,我们都能够添加一些只读角色,这些角色通过异步复制来获取集群的数据,以提高集群对外整体的数据读取能力,而要提高写能力则往往并不那么容易。因此,在平常的架构设计过程中,都是围绕如何提高写性能来展开的。

如何权衡

·        even load distribution is easier ineventually consistent systems

·        multi-data center support is easierin eventually consistent systems

·        some problems are not solvable witheventually consistent systems

·        code is sometimes simpler to write instrongly consistent systems

 

 

我们将在稍后的几篇文章中更深入的讲解这些方案的利弊。


 

[mongodb文档]分布式一致性(二)最终一致性模型[2]

在上一篇中,我们已经初略的介绍了A类和类架构。对于A类架构,我们需要牺牲一致性去提高系统的整体可用性。当然,这并不代表这类系统完全不考虑分布式一致性问题,只是说在一定程度上调整一致性级别,即并不要求强一致性。

Amazon普及了最终一致性的概念,并对其进行了一个清晰的定义:

如果一个存储系统能够保证在没有新的更新请求的情况下,最终所有的客户端都能够访问到最新的数据,那么这个系统就符合最终一致性的要求。

最终一致性的概念其实并不是一个什么特别新的东西,但Amazon的伟大之处在于他第一次将这样一些晦涩难于理解的分布式理论,转化成了一个形式化的,已于推广的定义。最终一致性的典型例子有:

  1. DNS系统。

  2. 主备异步复制的关系型数据库(当然,MongoDB也是类似的)。

  3. 分布式缓存。

在很多分布式系统中,如果只有一个Master来负责处理所有写请求的话,那么是能够做到最终一致性的。但是如果系统中存在多个可写的Master的话,那么处理逻辑将会变得非常复杂。Amazon Dynamo就是这样一个存在多个Master写入的系统。上面提到的3个场景都是只有一个Master的。

另外,消息队列也是解决分布式最终一致性问题比较常见的方案。

Forms of Consistency

Let’slook at a particular example.  Consider a system using MongoDB in thefollowing configuration:

 

本文转自 nileader 51CTO博客,原文链接:http://blog.51cto.com/nileader/1422761,如需转载请自行联系原作者


相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
2月前
|
存储 缓存 NoSQL
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
redis分布式锁、redisson、可重入、主从一致性、WatchDog、Redlock红锁、zookeeper;Redis集群、主从复制,全量同步、增量同步;哨兵,分片集群,Redis为什么这么快,I/O多路复用模型——用户空间和内核空间、阻塞IO、非阻塞IO、IO多路复用,Redis网络模型
Redis常见面试题(二):redis分布式锁、redisson、主从一致性、Redlock红锁;Redis集群、主从复制,哨兵模式,分片集群;Redis为什么这么快,I/O多路复用模型
|
1月前
|
存储 NoSQL 算法
MongoDB保姆级指南(中):从副本集群、分片集群起航,探索分布式存储的趋势!
本文一起来聊聊MongoDB集群,顺带以MongoDB集群为起点,共同探讨一下分布式存储的发展趋势~
83 15
|
1月前
|
存储 算法 NoSQL
(七)漫谈分布式之一致性算法下篇:一文从根上儿理解大名鼎鼎的Raft共识算法!
Raft通过一致性检查,能在一定程度上保证集群的一致性,但无法保证所有情况下的一致性,毕竟分布式系统各种故障层出不穷,如何在有可能发生各类故障的分布式系统保证集群一致性,这才是Raft等一致性算法要真正解决的问题。
63 11
|
1月前
|
存储 算法 索引
(六)漫谈分布式之一致性算法上篇:用二十六张图一探Raft共识算法奥妙之处!
现如今,大多数分布式存储系统都投向了Raft算法的怀抱,而本文就来聊聊大名鼎鼎的Raft算法/协议!
|
1月前
|
存储 算法 Java
(五)漫谈分布式之一致性算法篇:谁说Paxos晦涩难懂?你瞧这不一学就会!
没在时代发展的洪流中泯然于众的道理很简单,是因为它们并不仅是空中楼阁般的高大上理论,而是有着完整落地的思想,它们已然成为构建分布式系统不可或缺的底层基石,而本文则来好好聊聊分布式与一致性思想的落地者:Paxos与Raft协议(算法)。
|
1月前
|
存储 NoSQL MongoDB
(四)成为分布式高手必经之路:理解那些工作在分布式系统底层的一致性模型
在分布式领域里,一致性成为了炙手可热的名词,缓存、数据库、消息中间件、文件系统、业务系统……,各类分布式场景中都有它的身影,因此,想要更好的理解分布式系统,必须要理解“一致性”这个概念。本文就展开聊聊 分布式系统里的一致性模型。
|
23天前
|
Oracle 关系型数据库
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
分布式锁设计问题之Oracle RAC保证多个节点写入内存Page的一致性如何解决
|
26天前
|
消息中间件 存储 监控
消息队列在分布式系统中如何保证数据的一致性和顺序?
消息队列在分布式系统中如何保证数据的一致性和顺序?
|
1月前
|
消息中间件 存储 C#
分布式事务之最终一致性实现方案
分布式事务之最终一致性实现方案
34 0
|
2月前
|
消息中间件
分布式篇问题之通过本地消息表实现分布式事务的最终一致性问题如何解决
分布式篇问题之通过本地消息表实现分布式事务的最终一致性问题如何解决
下一篇
DDNS