本周系统设计复习:

  • 5 分钟解释 10 个编码原则
  • 软件开发者的 10 本最爱书籍
  • 彻底改变计算机世界的 25 篇论文
  • 变更数据捕获:利用实时数据的关键
  • IPv4 vs. IPv6,有什么区别?

10 本推荐书籍

通用建议

  1. The Pragmatic Programmer - Andrew Hunt 和 David Thomas

    • 实用主义程序员
    • 职业生涯的经典指南
  2. Code Complete - Steve McConnell

    • 代码大全
    • 通常被认为是软件开发者的圣经,涵盖软件开发的所有方面,从设计和编码到测试和维护。

编码

  1. Clean Code - Robert C. Martin

    • 代码整洁之道
    • 编写可读、可维护代码的指南
  2. Refactoring - Martin Fowler

    • 重构
    • 改善现有代码的结构

软件架构

  1. Designing Data-Intensive Applications - Martin Kleppmann

    • 设计数据密集型应用
    • 分布式系统和数据架构的权威指南
  2. System Design Interview - Alex Xu(我们自己的书 :))

    • 系统设计面试
    • 面试准备必备

设计模式

  1. Design Patterns - Eric Gamma 和其他人

    • 设计模式
    • 23 个经典设计模式
  2. Domain-Driven Design - Eric Evans

    • 领域驱动设计
    • 复杂软件的核心原则

数据结构和算法

  1. Introduction to Algorithms - Cormen, Leiserson, Rivest, and Stein

    • 算法导论
    • 算法的经典教科书
  2. Cracking the Coding Interview - Gayle Laakmann McDowell

    • 破解编码面试
    • 面试准备实战指南

25 篇改变计算机世界的论文

  1. Dynamo - Amazon 的高可用键值存储
  2. Google File System - 高度可扩展文件系统的洞察
  3. Scaling Memcached at Facebook - 缓存复杂性的观察
  4. BigTable - 分布式存储系统的设计原则
  5. Borg - Google 的大规模集群管理
  6. Cassandra - 分布式 NoSQL 数据库的设计和架构
  7. Attention Is All You Need - 进入称为 transformer 的新深度学习架构
  8. Kafka - 分布式消息平台的内部
  9. FoundationDB - 分布式数据库的观察
  10. Amazon Aurora - Amazon 如何提供高可用性和性能
  11. Spanner - Google 全球分布式数据库的设计和架构
  12. MapReduce - 详细观察 MapReduce 如何实现海量数据的并行处理
  13. Shard Manager - 理解通用分片管理框架
  14. Dapper - Google 分布式系统追踪基础设施的洞察
  15. Flink - 流和批处理统一架构的详细观察
  16. 向量数据库综合调查 - 向量数据库的全面调查
  17. Zanzibar - Google 管理访问控制列表的全球系统的设计、实现和部署
  18. Monarch - Google 内存时间序列数据库的架构
  19. Thrift - 探索 Facebook 代码生成工具背后的设计选择
  20. Bitcoin - 点对点电子现金系统的开创性介绍
  21. WTF - Twitter 的谁关注服务 - Twitter(现 X)的用户推荐系统
  22. MyRocks: LSM-Tree 数据库存储引擎 - LSM-Tree 数据库存储引擎
  23. GoTo Considered Harmful - 经典论文
  24. Raft 共识算法 - 学习更易懂的共识算法
  25. 时间、时钟和事件排序 - 解释分布式系统中时间和事件排序概念的极其重要的论文

变更数据捕获(CDC)

世界上 90% 的数据是在过去两年创建的,这种增长只会越来越快。

然而,最大的挑战是实时利用这些数据。持续的数据变化使数据库、数据湖和数据仓库不同步。

CDC 或变更数据捕获可以帮助你克服这个挑战。

CDC 识别和捕获数据库中对数据的变更,允许你在多个系统之间复制和同步数据。

CDC 如何工作?

以下是逐步分解:

  1. 数据修改:对源数据库中的数据进行变更。它可以是对表的插入、更新或删除操作。

  2. 变更捕获:CDC 工具监控数据库事务日志以捕获修改。它使用源连接器连接到数据库并读取日志。

  3. 变更处理:捕获的变更被处理并转换为适合下游系统的格式。

  4. 变更传播:处理的变更发布到消息队列并传播到目标系统,如数据仓库、分析平台、分布式缓存如 Redis 等。

  5. 实时集成:CDC 工具使用其接收器连接器消费日志并更新目标系统。变更实时接收,允许无冲突的数据分析和决策。

用户只需要关心步骤 1,而所有其他步骤是透明的。

流行的 CDC 解决方案使用 Debezium 与 Kafka Connect 一起使用 Kafka 作为 broker 将数据变更从源流式传输到目标系统。Debezium 有大多数数据库的连接器,如 MySQL、PostgreSQL、Oracle 等。

IPv4 vs. IPv6

从互联网协议版本 4(IPv4)到互联网协议版本 6(IPv6)的过渡主要由对更多互联网地址的需求驱动, alongside 简化网络管理某些方面的愿望。

主要区别

1. 格式和长度

  • IPv4:使用 32 位地址格式,通常显示为四个用点分隔的十进制数(如 192.168.0.12)。32 位格式允许约 43 亿个唯一地址,由于互联网连接设备的爆炸,这个数字正迅速证明不足。
  • IPv6:利用 128 位地址格式,由八个用冒号分隔的十六进制数字组表示(如 50B3:F200:0211:AB00:0123:4321:6571:B000)。这种扩展允许更多地址,确保互联网的增长可以不受阻碍地继续。

2. 头部

  • IPv4 头部:更复杂,包括字段如头部长度、服务类型、总长度、标识、标志、片偏移、生存时间(TTL)、协议、头部校验和、源和目标 IP 地址,以及选项。
  • IPv6 头部:设计更简单和高效。固定头部大小是 40 字节,包括不太常用的字段在可选扩展头部中。主要字段包括版本、流量类别、流标签、有效负载长度、下一个头部、跳限制,以及源和目标地址。这种简化有助于提高数据包处理速度。

3. IPv4 和 IPv6 之间的翻译

随着互联网从 IPv4 过渡到 IPv6,允许这些协议共存的机制变得至关重要:

  • 双栈:这种技术涉及在同一网络设备上同时运行 IPv4 和 IPv6。它允许在两种协议中无缝通信,取决于目标地址的可用性和兼容性。双栈被认为是从 IPv4 到 IPv6 平滑过渡的最佳方法之一。

本文为学习目的的个人翻译,译文仅供参考。

原文链接:EP111: My Favorite 10 Books for Software Developers

版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。