DDIA:Designing Data-Intensive Applications The Big Ideas Behind Reliable, Scalable, and Maintainable Systems (Martin Kleppmann)
本书将介绍构建数据系统的原则和实例;以及不同的数据工具的共同点、差异性和它们是如何实现这些特点的。
目录
前言
除了CPU算力,数据密集型、计算密集型的应用面临的更大挑战是:巨量的数据、数据的极端复杂性和迅速变化性。
这些应用通常需要完成以下功能:存储、缓存(记住代价高昂的某些操作的执行结果以便加速运算)、检索 / 筛选、流处理、批处理。
如今貌似每个功能都有现成的优秀引擎可供使用。但是当开发新的应用时,工程师还是需要耐心选择最适合当前任务的工具(比如cache、index都有不同的实现方式,各有优缺点)。此外,总有些问题是单个工具无法完全胜任的,要将不同的工具结合起来也是一个十分棘手的事。
第一章将介绍:搭建一个可靠的、可扩展、易维护的数据系统的基本原则和思维方式。
开发系统需要满足功能性需求和非功能性需求(稳定性、可扩展性等)。
没有一个简单的公式可以套用。但是有一些模式和技术持续出现在不同的应用中以满足上述需求。
关于 Data System
什么是数据系统:结合了多个不同的数据工具开发的应用。
为什么需要“数据系统”这个名字:一,不同的数据工具之间的边界越来越模糊 二,单一的数据工具越来越难以满足生产需要。
本来用于存储的Redis也可以用作消息队列;本来是消息队列的Kafka又具有像数据库一样的持久性保证。
什么是一个好的数据系统 / 开发者应关注什么:可靠的、可扩展、易维护
可靠性 Reliability
可靠性的具体要求
- 系统能按照期望的功能运行。
- 对客户的误操作有容忍性。
- 系统能在期望的运行压力下有符合期待的运行表现。
- 阻止无权限的用户访问 / 滥用系统。
failure VS fault
failure是整个系统失效。fault是系统中的部分组件失效。可靠性要求阻止fault导致failure。
prevent VS cure
顾名思义,prevent阻止故障发生,cure是具有故障恢复的能力。cure通常被选择的更多。但有些错误是不存在cure的能力的,比如黑客访问到了安全级别极高的数据、客户账户上的存款被盗走。这些情况prevent是唯一且必须的选择。
延伸阅读: