数据密集型应用系统设计

rw-book-cover

Metadata

  • Author: Martin Kleppmann
  • Full Title: 数据密集型应用系统设计
  • Category: books
  • Summary: The book “数据密集型应用系统设计” by Martin Kleppmann focuses on designing applications that handle large amounts of data. It explores key concepts and techniques in distributed computing. The work emphasizes the importance of scalability, reliability, and maintainability in data-intensive systems.

Highlights

  • 如果复制协议允许从库使用比主库更新的软件版本,则可以先升级从库,然后执行故障切换,使升级后的节点之一成为新的主库,从而执行数据库软件的零停机升级。如果复制协议不允许版本不匹配(传输WAL经常出现这种情况),则此类升级需要停机 (View Highlight)
  • 复制和存储引擎使用不同的日志格式,这样可以使复制日志从存储引擎内部分离出来。这种复制日志被称为逻辑日志 (View Highlight)
  • 不只有NoSQL数据库是最终一致的:关系型数据库中的异步复制追随者也有相同的特性 (View Highlight)
  • 读写一致性(read-after-write consistency (View Highlight)
    • Note: 自己的写入能被马上看到,其他人的写入可以稍后看到。
      • 对于 DB 如何区分 “自己”和“其他人”?不应该有这种概念区分
  • 单调读(Monotonic reads)【23】保证这种异常不会发生。这是一个比 强一致性(strong consistency) 更弱,但比 最终一致性(eventual consistency) 更强的保证 (View Highlight)
  • 一致前缀读(consistent prefix reads)【23】。 这个保证说:如果一系列写入按某个顺序发生,那么任何人读取这些写入时,也会看见它们以同样的顺序出现。 (View Highlight)
  • 尽管多主复制有这些优势,但也有一个很大的缺点:两个不同的数据中心可能会同时修改相同的数据,写冲突是必须解决的 (View Highlight)
  • 多主复制往往被认为是危险的领域,应尽可能避免 (View Highlight)
  • 多领导者复制的最大问题是可能发生写冲突,这意味着需要解决冲突 (View Highlight)
  • 无冲突复制数据类型(Conflict-free replicated datatypes)(CRDT) (View Highlight)
  • 可合并的持久数据结构(Mergeable persistent data structures) (View Highlight)
  • 可执行的转换(operational transformation)[42]是Etherpad 【30】和Google Docs 【31】等合作编辑应用背后的冲突解决算法。它是专为同时编辑项目的有序列表而设计的,例如构成文本文档的字符列表 (View Highlight)
  • 多主复制拓扑 (View Highlight)
    • Note: 1. 环形拓扑 2. 星型拓扑 3. 全拓扑
  • 要正确排序这些事件,可以使用一种称为 版本向量(version vectors) 的技术 (View Highlight)
  • 最终一致性是一种有意模糊的保证,但是从可操作性角度来说,能够量化“最终”是很重要的 (View Highlight)