Skip to content

第一章笔记

一、数据密集型应用

现今很多应用程序都是数据密集型(data-intensive)的,而非计算密集型(compute-intensive)。数据密集型应用,通常是有标准组件构建而成,包含如下:

  • 存储数据,以便自己或其他应用程序之后能再次找到 (*数据库(database)*

  • 记住开销昂贵操作的结果,加快读取速度(*缓存(cache)*

  • 允许用户按关键字搜索数据,或以各种方式对数据进行过滤(*搜索索引(search indexes)*

  • 向其他进程发送消息,进行异步处理(*流处理(stream processing)*

  • 定期处理累积的大批量数据(*批处理(batch processing)*

二、软件系统考虑的特性

  • 可靠性(Reliability):系统在困境(adversity)(硬件故障、软件故障、人为错误)中仍可正常工作(正确完成功能,并能达到期望的性能水准)。

  • 可伸缩性(Scalability): 有合理的办法应对系统的增长(数据量、流量、复杂性)

  • 可维护性(Maintainability): 许多不同的人(工程师、运维)在不同的生命周期,都能高效地在系统上工作(使系统保持现有行为,并适应新的应用场景)。

三、可靠性(Reliability)

可靠性意味着即使系统发生了故障,系统也能正常工作。故障可能发生在硬件,软件(系统性错误),人为因素(配置错误等)等几个方面,通过容错技术可以对用户隐藏某些类型的故障。

这里需要注意预防和容错的区别,容错意味着出错了并自动化修复,如K8S的pod,某个节点服务器挂了,服务器上的所有pod停止,k8s自动调度到别的机器上新起节点。而预防则是在设计初期就考虑防止出错的可能, 往往代价和难度更大,因为许多错误都是无法预测的。

在设计系统的容忍能力时,要定义能够容忍什么样的错误,不能够容忍所有错误的发生。

四、可伸缩性(Scalability)

五、可维护性(Maintainability)