DDIA 读书笔记-第一章

image.png

去年年中断断续续读完[《Designing Data-Intensive Applications》这本书, 因为时间原因没做任何笔记。这次重读一遍,好好做笔记,天天向上。

正文

本书的第一章主要是描述了系统设计的非功能性需求,作者提炼了三点可靠性,可扩展性,可维护性。本章也是后续内容的一个提纲,后面展开的11章节将会围绕这三点进行描述。

可靠性

影响系统可靠性的三点原因即硬件故障,软件故障,人为因素。

  • 提升硬件可靠性

    可以通过硬件冗余以及软件容错方式。

  • 提升软件可靠性

    通过把易犯错的模块和其他模块进行解耦,此外还需要设置快速回滚配置变更以及明确的监控

  • 人为因素

    架构设计分层考虑,流程设计有快速恢复机制,进行监控,充分测试。同时对人员进行培训

可扩展性

书中举了一个推特的例子,两种方法实现推文在发布者和订阅者时间线上的读或写。在扩展性方面需要通过具体的业务要求,考虑性能和资源之间的关系。不同业务要求是不同的比如在线系统一般会追求响应时间短,能快速给用户回复。而Hadoop则追求吞吐量,每秒能处理的记录条数。

在架构设计的初始不需要考虑过高的负载设计,作者提供了一个参考,初始架构设计应对超出预设目标10倍的实际负载。同时服务应该设计成无状态,无状态的服务具备更易实现的扩展性。在明确扩展后,需要考虑垂直扩展(使用更强大的机器)还是水平扩展(负载分到多台小机器上),同时针对调用频繁的模块考虑是否分拆进行扩展。

可维护性

易于维护的系统要遵循这三点

  • 可运维性

    运维团队对系统运维的要求:监控健康度,快速恢复;追踪问题原因;保持系统监控;保持环境稳定等。那么设计层面要做的事情就包括:提供系统行为的可观测性,支持自动化,服务与机器解耦,提供默认配置和文档,提供恢复流程。

  • 简单性

    消除复杂性的最好的手段就是抽象

  • 可演化性

    系统能够适应不断变化的需求

其他

DDIA每章的小结是非常值得一看,这里就不复制了。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享