本周系统设计复习:
- 5 分钟解释 10 个编码原则
- 软件开发者的 10 本最爱书籍
- 彻底改变计算机世界的 25 篇论文
- 变更数据捕获:利用实时数据的关键
- IPv4 vs. IPv6,有什么区别?
10 本推荐书籍
通用建议
The Pragmatic Programmer - Andrew Hunt 和 David Thomas
- 实用主义程序员
- 职业生涯的经典指南
Code Complete - Steve McConnell
- 代码大全
- 通常被认为是软件开发者的圣经,涵盖软件开发的所有方面,从设计和编码到测试和维护。
编码
Clean Code - Robert C. Martin
- 代码整洁之道
- 编写可读、可维护代码的指南
Refactoring - Martin Fowler
- 重构
- 改善现有代码的结构
软件架构
Designing Data-Intensive Applications - Martin Kleppmann
- 设计数据密集型应用
- 分布式系统和数据架构的权威指南
System Design Interview - Alex Xu(我们自己的书 :))
- 系统设计面试
- 面试准备必备
设计模式
Design Patterns - Eric Gamma 和其他人
- 设计模式
- 23 个经典设计模式
Domain-Driven Design - Eric Evans
- 领域驱动设计
- 复杂软件的核心原则
数据结构和算法
Introduction to Algorithms - Cormen, Leiserson, Rivest, and Stein
- 算法导论
- 算法的经典教科书
Cracking the Coding Interview - Gayle Laakmann McDowell
- 破解编码面试
- 面试准备实战指南
25 篇改变计算机世界的论文
- Dynamo - Amazon 的高可用键值存储
- Google File System - 高度可扩展文件系统的洞察
- Scaling Memcached at Facebook - 缓存复杂性的观察
- BigTable - 分布式存储系统的设计原则
- Borg - Google 的大规模集群管理
- Cassandra - 分布式 NoSQL 数据库的设计和架构
- Attention Is All You Need - 进入称为 transformer 的新深度学习架构
- Kafka - 分布式消息平台的内部
- FoundationDB - 分布式数据库的观察
- Amazon Aurora - Amazon 如何提供高可用性和性能
- Spanner - Google 全球分布式数据库的设计和架构
- MapReduce - 详细观察 MapReduce 如何实现海量数据的并行处理
- Shard Manager - 理解通用分片管理框架
- Dapper - Google 分布式系统追踪基础设施的洞察
- Flink - 流和批处理统一架构的详细观察
- 向量数据库综合调查 - 向量数据库的全面调查
- Zanzibar - Google 管理访问控制列表的全球系统的设计、实现和部署
- Monarch - Google 内存时间序列数据库的架构
- Thrift - 探索 Facebook 代码生成工具背后的设计选择
- Bitcoin - 点对点电子现金系统的开创性介绍
- WTF - Twitter 的谁关注服务 - Twitter(现 X)的用户推荐系统
- MyRocks: LSM-Tree 数据库存储引擎 - LSM-Tree 数据库存储引擎
- GoTo Considered Harmful - 经典论文
- Raft 共识算法 - 学习更易懂的共识算法
- 时间、时钟和事件排序 - 解释分布式系统中时间和事件排序概念的极其重要的论文
变更数据捕获(CDC)
世界上 90% 的数据是在过去两年创建的,这种增长只会越来越快。
然而,最大的挑战是实时利用这些数据。持续的数据变化使数据库、数据湖和数据仓库不同步。
CDC 或变更数据捕获可以帮助你克服这个挑战。
CDC 识别和捕获数据库中对数据的变更,允许你在多个系统之间复制和同步数据。
CDC 如何工作?
以下是逐步分解:
数据修改:对源数据库中的数据进行变更。它可以是对表的插入、更新或删除操作。
变更捕获:CDC 工具监控数据库事务日志以捕获修改。它使用源连接器连接到数据库并读取日志。
变更处理:捕获的变更被处理并转换为适合下游系统的格式。
变更传播:处理的变更发布到消息队列并传播到目标系统,如数据仓库、分析平台、分布式缓存如 Redis 等。
实时集成: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。
版权归原作者或原刊登方所有。本文为非官方译本;如有不妥,请联系删除。