数据密集型应用系统设计(一)

前四章详细讲了增强数据密集型应用系统所需的一些基本原则,有一定经验的可以跳过,直接读第五章。不然真的浪费时间呀= =

简单记一些总结

第一章:数据系统基础

软件系统最重要的三大问题

可靠性

发生了某些错误,系统依然可以继续正常工作
故障包括:

  • 硬件故障
  • 软件错误
  • 人为失误

可扩展性

负载增加,如何有效保持系统性能,就是可扩展性。

可扩展的系统,在增加处理能力的同时,还可以在高负载情况下,持续保持系统的高可靠性

可维护性

本质是为了让运维和运营团队更轻松。

  1. 良好的抽象来降低复杂性
  2. 系统要易于修改和适配新场景
  3. 良好的可操作性,有助于对系统状况的观测和有效的管理

第二章:数据模型与查询语言

该章比较多种不同的数据模型和查询语言,讨论各自的适用场景

关系模型与文档模型
数据查询语言
图状数据模型

第三章:数据存储与检索

该章对存储引擎,即数据库是如何安排磁盘结构,从而提高检索效率

存储引擎分为两大类:

针对事务处理(OLTP)优化的架构

  • 面向用户,所以可能收到大量请求。为了处理负载,应用程序通常在每个查询中只涉及少量的记录
  • 应用程序基于某种键来请求记录,而引擎使用索引来查找所请求键的数据
  • 磁盘寻道时间往往是瓶颈

针对分析(OLAP)的优化架构

  • 不是直接面对最终用户,数据仓库和类似的分析系统相对并不太广为人知,主要由业务分析师使用
  • 处理的查询请求数目远低于OLTP系统,但每个查询通常要求苛刻,需要在短时间内扫描数百万条记录
  • 磁盘带宽通常是瓶颈,而面向列的存储对于这种工作负载成为流行的解决方案

两个主流的存储引擎

  • 日志结构流派
    • 只允许追加更新文件和删除过时文件
    • BitCask、SSTables、LSM-tree、LevelDB、Cassandra、HBase、Lucene
  • 原地更新流派
    • 将磁盘视为可以覆盖的一组固定大小的页
    • B-tree是这一哲学的最典型代表,它用于所有主要的关系数据库,以及大量的非关系数据库。

日志结构的存储引擎是一个相对较新的方案,关键思想是系统的将磁盘上随机访问写入转为顺序写入,由于磁盘驱动器和SSD的性能特性,可以实现更高的写入吞吐量

第四章:数据编码与演化

数据编码

需向后、向前兼容,例如滚动升级

滚动升级

服务滚动升级时,每次将新版本的服务逐步部署到几个节点,而不是同时部署到所有节点

  • 允许在不停机的情况下发布新版本的服务
  • 降低部署风险:允许错误版本在影响大量用户之前检测并回滚
  • 必须假设,不同节点运行不同版本的代码
    • 所以数据需要向后兼容(新代码可以读取旧数据)、向前兼容 (旧代码可以读取新数据)

数据流模式

  • 数据库,其中写入数据库的进程对数据进行编码,而读取数据库的进程对数据进 行解码。
  • RPC和REST API,其中客户端对请求进行编码,服务器对请求进行解码并对响应进行编码,客户端最终对响应进行解码。
  • 异步消息传递(使用消息代理或Actor),节点之间通过互相发送消息进行通信,消息由发送者编码并由接收者解码。

你可能感兴趣的:(后端,分布式,大数据,分布式,python)