架构师训练营大作业二
构师训练营知识点
缓存
缓存定义
介于数据访问者和数据源之间的一种高速存储,数据需要多次读取时,可以加快读取速度
有哪些缓存
CPU 缓存
操作系统缓存
数据库缓存
JVM 编译缓存
CDN 缓存
代理与反向代理缓存
前端缓存
应用程序缓存
分布式对象缓存
缓存的关键指标
缓存命中率
定义:缓存是否有效依赖于能多少次重用同一个缓存响应业务请求
影响缓存命中率的主要指标
缓存键集合大小
键数量越少,缓存效率越高
缓存可使用内存空间
内存中缓存的对象越多,缓存命中率越高
缓存对象生存时间
对象缓存时间越长,被重用的可能性越高
缓存类型
通读缓存
给客户端返回缓存资源,请求未命中缓存时获取真实数据。客户端连接的是通读缓存
代理缓存、反向代理缓存、CDN 缓存
旁路缓存
应用访问缓存,如果存在,则返回,如果不存在或者过期,则应用主动创建缓存,保存在缓存中并返回
对象缓存
浏览器对象缓存
本地对象缓存
分布式缓存
Memcached 分布式对象缓存
分布式对象缓存的一致性 hash 算法
一致性 hash 节点扩容
基于虚拟节点的一致性 hash 算法
缓存的优点
显著提升性能
通常来自内存,比磁盘快
结果数据,不需要中间计算
降低数据库、磁盘和网络负载
系统性能优化的大杀器
缓存使用注意问题
频繁修改数据:数据读写 2:1 以上,缓存才有意义
没有热点的访问:数据访问不遵循二八原则
数据不一致与脏读
缓存雪崩
缓存预热
缓存穿透
负载均衡架构
类型
HTTP 重定向负载均衡
DNS 负载均衡
反向代理负载均衡
数据链路层负载均衡
算法
轮询
加权轮询
随机
最小连接
源地址散列
消息队列与异步架构
基本组成
消息生产者
消息队列
消息消费者
架构
点对点模型
发布订阅模型
消息队列的优点
异步处理、提升处理性能
伸缩性更好
削峰平谷
失败隔离和自我恢复
解耦
事件驱动架构 EDA
主要 MQ 产品比较
RabbitMQ 性能好、社区活跃。Erlang 开发,不熟悉的人不利于二次开发维护
ActiveMQ 可以跨平台,对 Java 友好
RocketMQ 性能好,可靠性高,Java 开发
Kafka 针对分布式场景做了专门优化,分布式伸缩性好
分布式数据库
MySQL
主从复制
一主多从:分摊负载、专机专用、便于冷备、高可用
主主复制
主主失效恢复
复制注意事项
主主复制时不能并发写入
复制只是增加读并发,并没有增加写并发和存储能力
更新表结构会导致很大的同步延迟
数据分片
方法
硬编码分片
映射表外部存储
挑战
大量额外代码,处理逻辑复杂
多分片的联合查询困难
无法使用数据库事务
如何扩容
分布式数据库中间件
MyCat
Amoeba/Cobar
数据库部署方案
单一服务与单一数据库
主从复制实现伸缩
两个 Web 服务及两个数据库
综合部署
NoSQL
CAP 原理:可用性、一致性、分区容错性,三者只能同时满足两个。更准确说是,分布式系统必须满足分区容错性,所以可用性和一致性无法同时满足
一致性 Consistency:每次读取的是最新写入的数据或者得到一个错误
可用性 Availability:每次请求都能得到响应,而不是无响应或者错误。响应并不要求是最新数据
分区容错性 Partition tolerance:即便因为网络原因导致服务器节点之间丢失消息或延迟,系统依然是可以操作的
CAP 与数据一致性的冲突
最终一致性
冲突解决策略,最后写入的覆盖
客户端解决冲突
投票解决冲突
方案
Cassandra 分布式解决方案
HBase
LSM
ACID
原子性 Atomicity:事务要么全部完成,要么全部取消
隔离性 Isolation:两个事务之间数据的可见性
持久性 Durability:事务提交,不管发生什么,数据要保存
一致性 Consistency:只有符合关系约束和函数约束的数据才能写入
BASE
基本可用 Basically Available:系统在遇到故障时,允许损失部分可用性
弱状态 Soft state:允许系统中的数据存在中间状态,并认为该状态不影响系统整体可用性
最终一致性 Eventually consistent:系统中所有的数据副本,在经过一段时间后最终能达到一致的状态
分布式一致 ZooKeeper
作者:kafkaliu
链接:https://www.jianshu.com/p/8f4fb8bd682d
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论