《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识
分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。
最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stronger consistency)。
摘要:

  • start by looking at one of the strongest consistency models in common use,linearizability(线性一致性)。
  • then examine the issue of ordering events(事件顺序) in a distributed system,particularly around causality(因果关系) and total ordering(全局顺序).
  • explore how to atomically commit a distributed transaction

Linearizability
非线性一致性案例:

全序
全序(total order)指允许任意两个元素进行比较,如自然数集就是全序的。
而数学集合不是全序的,如{a,b}与{b,c}不能比较大小,称为偏序。 线性一致性的系统中,操作是全序的;如果两个事件有因果关系,则它们有序,如果是并发的,则它们的顺序无法比较。这意味着因果关系定义了一个偏序。
因此线性一致性系统中,不存在并发操作。
线性一致性包含因果一致性。很多情况下,看上去需要线性一致性的系统,实际上只需要因果一致性,因果一致性可以更高效的实现。

兰伯特时间戳(Lamport timestamps)

计数器值大者是更大的时间戳,如计数器值相同,节点ID越大,时间戳越大。
兰伯特时间戳的关键思想:每个节点NODE、客户端Client跟踪迄今为止所见到的最大计数器值,并在每个请求中包含这个最大计数器值。当一个节点NODE收到的最大计数器值大于本身的计数器值,它立刻更新自己的计数器值。

全序广播(total order broadcast)
通常被描述为节点间交换消息的协议,要满足两个安全属性:

  • 可靠交付(reliable delivery)
    没有消息丢失:如果消息被传到一个节点,它将被传到所有节点
  • 全序交付(totally ordered delivery)
    消息以相同的顺序传递给每个节点

分布式事务与共识
共识是分布式计算中最重要也是最基本的问题之一。目标是让几个节点达成一致(get several nodes to agree on something)。

原子提交与二阶段提交算法(2PC,two-phase commit)
2PC的基本流程:

详细过程:

可能出现协调者失效的问题:

转载于:https://my.oschina.net/u/4167196/blog/3094088

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Designing Data-Intensive Applications》这本书是一本关于设计和构建大型数据应用程序的指南。它重点关注数据存储、处理和传输方面的现代技术。这本书由三部分组成:第一部分围绕着数据存储系统展开,包括传统的关系型数据库和现代的NoSQL数据库等;第二部分则聚焦于数据处理,涵盖流处理、批处理和交互式查询等领域;第三部分则探讨了如何构建可靠、可扩展且具有良好性能的分布式系统。无论是新手还是老手,都可以从本书中获得一些有价值的见解。这本书概述了不同技术在数据处理方面的优缺点,并介绍了一些构建大型、高效数据应用程序的最佳实践。另外,由于该书旨在让读者获得对现代架构和技术的深刻理解,因此它也介绍了一些分布式系统的核心理论,例如CAP定理和BASE原则等。这本书的读者包括数据科学家、软件工程师、数据工程师和系统管理员。总之,如果你正在构建一个数据密集型应用程序,想要了解最新的技术和最佳实践,那么《Designing Data-Intensive Applications》绝对值得一读。 ### 回答2: 《设计数据密集型应用程序》(Designing Data-Intensive Applications)是一本由 Martin Kleppmann 所著的计算机科学类图书,这本书讨论了当今主要的数据系统和应用程序所面临的问题和挑战,并提供了一些解决方案。这本书内容涵盖了分布式系统、数据存储和查询、数据一致性与容错性、流处理、数据流水线、实时分析等领域,不仅提供了丰富的理论知识,还有很多实践案例和相关技术细节。 对于软件工程师、架构师、数据工程师等人来说,这本书是一本非常重要的访问。如果你正在开发一个数据密集型的应用或系统,这本书提供了很多有用的指导和建议。例如,这本书会告诉你如何选择和使用不同的数据存储技术,如何设计高效的数据处理流水线,如何保证系统的可扩展性和容错性等等。 《设计数据密集型应用程序》还使用了很多实用的案例和场景,比如 Twitter 的分布式消息队列 Kafka,Google 的基于 Paxos 算法的分布式一致性协议 Chubby,Facebook 的实时数据处理系统 Apache Samza 等等。通过这些案例,读者可以更好地了解如何应用书中的理论知识到实际工作中。 总之,《设计数据密集型应用程序》是一本值得阅读的计算机科学类图书,无论你是软件工程师、数据工程师、系统架构师等,都有望从中获得很多启发。 ### 回答3: Designing Data-Intensive Applications是一本讲述大数据应用程序设计的书籍。这本书主要涵盖了数据密集型应用程序设计的方方面面,包括数据存储和查询、数据处理和流处理、分布式系统和高可用性、性能和可扩展性等。它通过介绍各种不同的数据管理工具和技术,帮助读者了解如何在大数据领域中设计出高效和可靠的应用程序。 在设计数据密集型应用程序时,需要考虑很多因素。从数据存储和查询的角度来看,我们需要考虑使用哪种数据库或数据存储方案,并且了解其适用的场景和可扩展性。同时还需要思考如何使用数据查询工具来优化查询性能。 在数据处理和流处理方面,我们需要选择正确的数据处理框架和工具,以处理大数据集合。我们也需要了解如何设计分布式系统,并且使其具有高可用性和容错性。性能和可扩展性也是设计数据密集型应用程序时的至关重要因素,因此我们需要考虑如何优化系统吞吐量和处理能力,并在需要时进行水平扩展。 总之,Designing Data-Intensive Applications是一本非常有价值的书籍,可以帮助读者了解如何在大数据领域中进行应用程序设计。它提供了丰富的知识和有实际应用的案例,让读者在实践中掌握数据密集型应用程序设计的关键技能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值