[mongodb文档]分布式一致性

简介:

[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,如需转载请自行联系原作者


相关文章
|
5月前
|
数据采集 监控 NoSQL
优化分布式采集的数据同步:一致性、去重与冲突解决的那些坑与招
本文讲述了作者在房地产数据采集项目中遇到的分布式数据同步问题,通过实施一致性、去重和冲突解决的“三板斧”策略,成功解决了数据重复和同步延迟问题,提高了系统稳定性。核心在于时间戳哈希保证一致性,URL归一化和布隆过滤器确保去重,分布式锁解决写入冲突。
286 2
 优化分布式采集的数据同步:一致性、去重与冲突解决的那些坑与招
|
5月前
|
消息中间件 运维 监控
《聊聊分布式》BASE理论 分布式系统可用性与一致性的工程平衡艺术
BASE理论是对CAP定理中可用性与分区容错性的实践延伸,通过“基本可用、软状态、最终一致性”三大核心,解决分布式系统中ACID模型的性能瓶颈。它以业务为导向,在保证系统高可用的同时,合理放宽强一致性要求,并借助补偿机制、消息队列等技术实现数据最终一致,广泛应用于电商、社交、外卖等大规模互联网场景。
|
5月前
|
存储 NoSQL 前端开发
【赵渝强老师】MongoDB的分布式存储架构
MongoDB分片通过将数据分布到多台服务器,实现海量数据的高效存储与读写。其架构包含路由、配置服务器和分片服务器,支持水平扩展,结合复制集保障高可用性,适用于大规模生产环境。
432 1
|
12月前
|
NoSQL MongoDB 微服务
微服务——MongoDB常用命令——文档的分页查询
本文介绍了文档分页查询的相关内容,包括统计查询、分页列表查询和排序查询。统计查询使用 `count()` 方法获取记录总数或按条件统计;分页查询通过 `limit()` 和 `skip()` 方法实现,控制返回和跳过的数据量;排序查询利用 `sort()` 方法,按指定字段升序(1)或降序(-1)排列。同时提示,`skip()`、`limit()` 和 `sort()` 的执行顺序与编写顺序无关,优先级为 `sort()` > `skip()` > `limit()`。
414 1
|
12月前
|
JSON NoSQL MongoDB
微服务——MongoDB常用命令——文档基本CRUD
本文介绍了MongoDB中文档的基本操作,包括插入、查询、更新和删除。单个文档插入使用`insert()`或`save()`方法,批量插入用`insertMany()`。查询所有文档用`find()`,条件查询可在`find()`中添加参数,投影查询控制返回字段。更新文档通过`update()`实现,支持覆盖修改、局部修改(使用`$set`)和批量修改。列值增长可用`$inc`实现。删除文档用`remove()`,需谨慎操作以免误删数据。此外,文档键值对有序,区分大小写,不能有重复键。
270 1
|
9月前
|
监控 算法 关系型数据库
分布式事务难题终结:Seata+DRDS全局事务一致性架构设计
在分布式系统中,CAP定理限制了可用性、一致性与分区容错的三者兼得,尤其在网络分区时需做出取舍。为应对这一挑战,最终一致性方案成为常见选择。以电商订单系统为例,微服务化后,原本的本地事务演变为跨数据库的分布式事务,暴露出全局锁失效、事务边界模糊及协议差异等问题。本文深入探讨了基于 Seata 与 DRDS 的分布式事务解决方案,涵盖 AT 模式实践、分片策略优化、典型问题处理、性能调优及高级特性实现,结合实际业务场景提供可落地的技术路径与架构设计原则。通过压测验证,该方案在事务延迟、TPS 及失败率等方面均取得显著优化效果。
479 61
|
8月前
|
存储 NoSQL MongoDB
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
352 8
MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
|
NoSQL MongoDB 数据库
MongoDB 更新文档
10月更文挑战第14天
357 2
|
存储 监控 NoSQL
【赵渝强老师】MongoDB文档级别的并发控制
MongoDB使用WiredTiger存储引擎在文档级别进行并发控制,允许多个写操作同时修改不同文档,但对同一文档的修改需序列化执行。引擎采用乐观锁和意向锁机制处理冲突。通过视频讲解、插入大量文档示例及使用`mongotop`和`db.serverStatus()`命令,演示了如何监控MongoDB的锁信息和读写统计,展示了数据库和集合级别的写锁情况。
352 29
|
存储 缓存 负载均衡
一致性哈希:解决分布式难题的神奇密钥
一致哈希是一种特殊的哈希算法,用于分布式系统中实现数据的高效、均衡分布。它通过将节点和数据映射到一个虚拟环上,确保在节点增减时只需重定位少量数据,从而提供良好的负载均衡、高扩展性和容错性。相比传统取模方法,一致性哈希能显著减少数据迁移成本,广泛应用于分布式缓存、存储、数据库及微服务架构中,有效提升系统的稳定性和性能。
742 1

推荐镜像

更多