Follow me on GitHub

读书 | Designing Data-Intensive Applications

豆瓣:Designing Data-Intensive Applications

我刚毕业到公司做项目时,遇到问题经常想找到最合理的处理方式,但以当时的知识储备,对有些问题完全没有头绪。

比如我们有一个应用需要解析设备日志从而生成设备配置拓扑,日志中涉及配置的信息很多(部分日志 10M 以上),因此一般根据需求分批次解析,这就带来一个问题:每次添加新解析项时,以前已经解析过的设备是没有该新项的,只有用户再次上传设备日志才能再次触发解析,从而得到完整的解析结果。更符合用户期望的行为是新解析项添加后,所有设备的配置信息全部随之更新,但这应该怎么实现呢?

除此之外,如果解析逻辑出现错误,即使能快速修复,结果也不过是上线之后正确解析,以前的解析结果很难修复。

对于这两个问题,当时想到的办法是重新上传所有日志文件,但这会带来非常大的工作负载,甚至导致线上服务不可用,明显不是合理的解决方式。

除此之外,还有 PostgreSQL/MongoDB/ElasticSearch 数据不一致的问题,诸如此类等等。

后来在 kerr 的群里有位大佬的话启发了我,大意是想要快速进步需要快速吸收大量知识,重新建立知识体系,我深以为然,所以随后一年里忙里偷闲看各种书,渐渐的以前困扰我的问题慢慢在各种书里找到了解决方案。

说了这么多,回到本书,虽然没有完全理解书中的所有主题,但依然受益很大,因为它指出了大量问题的合理解决方式,其中就包括开头的那两个问题,当然世界上没有完美的设计,但书中的很多方案起码是合理的、能解决问题的,比我自己的土味方案更合理。

即使只有这些问题解决方案,本书也是很有价值的,but,当然不止于此,本书还通俗的讲述了很多与实际开发紧密相关的理论知识,比如关系模型、文档模型与图模型的比较,各种存储引擎的实现原理,编码格式与兼容性之间的关系(做微服务肯定关心该问题),各种复制算法(single-leader/multi-leader/leaderless),各种分片算法,共识算法与分布式事务,批处理与流式处理等等。。。。

本书给我的感觉就是一座宝库,对于没有/不熟悉数据系统设计经验的人来讲可以快速入门,快速建立该领域的全景图,做到遇到问题知道该往哪方面思考、该查哪方面的资料,避免知识匮乏导致走“野路子”,基于该观点,我认为本书功德无量,非常值得一读。

另外每章后面有大量引用文献,读者可以借此深入某个主题,当然我一篇都没看。。。

本书应该是我今年读书列表中最有价值的一本,不过估计也就理解了四五成,以后经验更多以后重读一遍。

撒花 ✿✿ヽ(°▽°)ノ✿