数据密集型应用系统设计:一、可靠可扩展可维护
数据密集型应用指的是数据是主要挑战,主要涉及数据的规模,复杂度或者数据产生与变化的速率等,例如数据库、搜索引擎等涉及大量数据存取的应用。与之对应,是计算密集型应用,主要指CPU利用频繁的应用,例如加密解密、科学计算等颇为耗费CPU计算资源。
本章主要介绍了数据密集型应用系统的三个基本特性:可靠性、可扩展性和可维护性。
数据密集型应用指的是数据是主要挑战,主要涉及数据的规模,复杂度或者数据产生与变化的速率等,例如数据库、搜索引擎等涉及大量数据存取的应用。与之对应,是计算密集型应用,主要指CPU利用频繁的应用,例如加密解密、科学计算等颇为耗费CPU计算资源。
本章主要介绍了数据密集型应用系统的三个基本特性:可靠性、可扩展性和可维护性。
Asynq 是一个 Go 库,用于对 task 进行排队并与 worker goroutine 异步处理它们。它由 Redis 支持,旨在可扩展且易于入门,当然也是典型事件驱动编程范式的实践代码,只有状态变更时才会有必要的加锁。
布隆过滤器 (Bloom Filter) 是 1970 年由布隆提出的。Bloom Filter 是由连续二进制位集合set和一些哈希函数组成的。数据加入时,将key
映射到set上,设置对应位1;数据查询时,将key
也映射到set上,如果所有位都为1则表明存在,否则不存在。这种做法存在一定的误判,但是经过参数调优可以达到最佳性能。
跳表以有序的方式在层次化的链表中保存元素, 效率和平衡树媲美 —— 查找、删除、添加等操作都可以在 O(logN)
期望时间下完成, 综合能力相当于平衡二叉树,并且比起平衡树来说, 跳跃表的实现要简单直观得多,核心功能在 200 行以内即可实现,遍历的时间复杂度是 O(N)
,代码简单,空间上也比较节省,因此在挺多的场景得到应用。比如 Redis 的 ZSET
、LevelDB