第一章
1.1 缓存分类
- 根据软件系统中的位置不同,分为三类:
- 根据规模和部署方式分类
1.2 为什么要用缓存
提高系统性能,减少网络带宽使用,提高系统吞吐量,
1.3 缓存发展-网页
静态页面缓存->动态页面组件缓存->数据库分库分表->分布式缓存
1.4 客户端缓存
分为页面缓存和浏览器缓存:
- 页面缓存主要是客户端将页面保存成文件,获取的时候不通过网络而是本地获取
- 浏览器缓存,浏览器会在硬盘上开辟一个空间来储存资源副本作为缓存,提高客户端在浏览网页过程中的访问资源速度。
- APP缓存,APP主要将缓存放在内存或者数据库和本地文件中,
1.5 代理和边缘缓存
反向代理可以缓存原始资源服务器的一些资源,帮助客户端以更快的速度获取web资源。边缘缓存最典型的就是CDN,CDN是内容分发网络的简称:
1.6 服务端缓存
1.数据库缓存:比如Mysql的查询缓存,缓存Mysql query的结果集ResultSet。这样就省略了解析,优化器优化和存储引擎取数据的过程。
2.平台级缓存:Encache,JBoss等
3.应用级缓存:redis
一个使用了多级缓存架构的系统如图:
第二章
2.1 PAXOS,2PAC,3PAC,RAFT,LEASE
这里讲了这几个分布式系统的中的算法和概念
脑裂:一个高可用系统中,两个有联系的节点之间断开连接后,两个节点争抢共享资源导致系统混乱的过程。
解决方法:仲裁机制,比如slave要变成master的时候,让第三方的仲裁节点也ping一下master。
2.2 分布式系统设计策略
- 检测你还活着?
- 高可用
- 容错机制
- 重试机制
- 负载均衡
1.心跳检测
2.高可用设计模式
- 主备模式:主机宕机的时候,备机接管主机的一切工作,比如数据库中的Master-Slave架构
- 互备模式:两个主机
- 集群模式:有多个节点在运行,同时可以通过主控节点分担请求
3.容错性
2.3 分布式系统设计实践
1.全局ID生成
业界有几种方案:
- UUID:当前日期时间+机器识别号组成,但问题是字符串格式太长了
- Mysql自增长ID,FLicker的方案,需要两个表
- SnowFlake:https://blog.csdn.net/qq_32828253/article/details/110679170,是twitter的一种分布式ID生成算法
第三章 动手写缓存
缓存的架构
参考JSR107规范