《设计数据密集型应用》——阅读小记
设计数据密集型应用
这本书非常推荐看英语版,如果考过了CET-6就可以很轻松的阅读这本书。
当前计算机软件已经不是单体的时代了,分布式系统,微服务现在是服务端开发的主流,如果没有读过这本书,则强力建议读这本书。
当前开发的系统主要分为两种,一种是数据密集型,一种是就算密集型。
数据在分布式系统中有很多中存在方式,持久化数据,网络协议,缓存都是。
这本书每章最后都有章节总结,可以根据这些总结进行学习。
1、数据系统基石
基本的类似于可靠性、可伸缩性、可维护性需要在系统中有得到体现,这不仅需要开发。也需要运维,测试等岗位的支持才能得到结果。
存储结构与查询语句,MySQL使用B+树,mongoDB使用GSON,以及其他的一些数据使用的数据结构,并且,查询语句不仅可以是SQL92协议中的查询格式,也可以是API的方式,xml的方式等
存储与检索,查可以使用索引辅助检索,SSTables和LSM-Tree,B树等数据结构可以用来作为检索工具,存储引擎分为OLAP和OLTP,分别专注于数据检索和事务,OLTP中又存在两种方式日志结构学派:不会更新只会追加写入,就地更新学派可以直接更新到原有数据中
数据库同样需要网络传输,因此需要有可以维护可拓展的网络协议,如RPC
2、分布式数据
分布式系统有可能有一主多从,多主多从等方式,这意味着需要对于一个结点的数据及时更新到其他节点中,方式分别是一主多从,多主多从,无主从,一主多从最常见,也可以通过使用一个节点作为proxy,经由该节点同步给其他节点,多主多从会有时钟不一致导致的问题,事务上的问题等,主要目的是为了让数据库离用户更近一些,如果没有更多的好处的话则不需要这种方式,这种方式弊端较大;无主从方式可以被认为是kafka的broker方式类似,根据一些特定的可用性判断方式,如“活跃节点+可以同步节点>全部节点代表集群可用”这种方式,来进行这种方式集群的使用,如果使用,其他的数据复制时的操作,如从库恢复,故障切换与再选举等。
以上只是复制的三种路径, 如MySQL就有互为主从,redis集群也有多种方式。
分区有多种分布方式,可以使用键值对进行分区,但是不同的分区热点不一样,存在负载倾斜和热点删除;此外也有根据文档的分区以及基于关键词的分区
分布式集群会带来分布式事务,这一张主要是讲解ACID以及不同的层级下的事务级别会导致什么问题。
分布式系统的弊端,一般会有网络问题,异步问题,时钟不可靠,分布式算法等问题
一致性与共识,这一张主要讲解Seata的一些信息以及分布式算法的信息,但是不深入,需要额外找资料进行学习。
3、衍生数据
批处理,流处理,这些都是大数据相关的一些原则,如果有兴趣的话可以进行查看
推荐阅读
- 《DDIA 逐章精读》小册
- DDIA精读|分布式系统中的副本和分片、KV 分片、分片均衡,以及路由请求