读书笔记 -《数据密集型应用系统设计》01
1、我们需要设计什么样的系统?
高可靠
可扩展
可维护
2、数据密集型应用需要哪些模块?
数据库:用以存储数据,结构化、非结构化的
高速缓存:用以缓存那些查询代价高昂的数据,可以是内存缓存、外部缓存。
索引:提高查询效率,可以把分区理解为更粗密度的索引
流式处理:消息在多进程之间进行传递,实现异步
批处理:定期处理积攒的大批量数据,实现分析处理
3、你知道的数据系统有哪些?他们的使用场景?
??????????????????????????????
4、一种常见的数据系统架构
在上面的图中总共涉及到了一下集中数据系统:
内存缓存[guava 的 cache、Caffeine Cache]
关系型数据库
消息队列
搜索引擎[es]
在一个系统里面同时使用上面几个数据系统时我们需要考虑的问题有哪些?
内存和关系型数据的一致性[何时删除缓存、何时将数据写入缓存]
缓存的雪崩会导致的关系型数据库流量陡增[使用布隆过滤器、设置缓存键的不同失效时间]
通过消息队列实现最终一致性时下游失败怎么办,及时的 callback
.........................
5、关于可靠性
5.1 你所期望的可靠性
执行你所期望的功能
可以容忍用户的操作错误和不正确的使用
性能可以应对典型场景、合理负载压力和数据量
系统可以防止任何未经授权的访问和滥用
5.2 影响可靠性的因素
硬件故障
软件故障
依赖的不稳定
人为失误
6、关于可扩展性
6.1 描述系统的负载、性能[监控]
这是一个前提问题,只有搞清楚了当前的负载和性能瓶颈,才能知道后续可能会存在的问题。常见的如下:
当前每秒的请求数
缓存的命中率
慢查询比率
内存、CPU 的峰值等
请求等待时长
网络带宽
6.2 如何应对负载
调用链分析:一个请求完整调用链中最慢的那个
扩展:水平扩展和垂直扩展
更换更好的机器
版权声明: 本文为 InfoQ 作者【KayTin】的原创文章。
原文链接:【http://xie.infoq.cn/article/88727fa7b14a4d38f19cb219e】。文章转载请联系作者。
评论