架构师训练营 - 学习笔记 - 第五周
思考与感悟
做事多想想为什么,思维要开阔
在给出技术解决方案前,多想想为什么要解决这个问题,有没有其他的办法,问题背后正真的需求是什么?
譬如:使用简单的用户提示来解决缓存数据与数据库数据不一致的问题, 当用户点了提交按钮后提示:“您的数据正在审核中,3分钟后生效。”不仅要学技术,同时要去思考技术背后的架构思维。
缓存不是用了就有效果的
缓存主要使用场景为读多写少,它是介于数据访问者和数据源之间的一种高速存储,使用不当反而会适得其反,例如产生缓存雪崩。
Tips
视频网站重度依赖 CDN
MySQL 一张表为千万级别的数据存储量
分布式缓存 - 2020/7/2 - 周四
什么是缓存
缓存:存储在计算机上的一个原始数据复制集合,以便于访问。
缓存是介于数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加快读取的速度。
缓存使用场景:读多写少,快速读取。
缓存(Cache) vs 缓冲(Buffer)
缓存(Cache):读多写少,核心是为了加快数据读取的速度。
缓冲(Buffer):读写频繁,协调两个设备速度不一致。例如:CPU 为了解决速度与硬盘,网卡不匹配,可以把数据先写入缓冲队列(Buffer)中,然后再从 buffer 中读取数据,写入具体的外设。
缓存数据存储(Hash 表)
缓存关键指标 - 缓存命中率
缓存是否有效依赖于能多少次重用同一个缓存响应业务请求,这个度量指标被称作缓存命中率。
影响缓存的指标
缓存键集合大小
缓存可使用内存空间
缓存对象生存时间(TTL)
缓存的分类
通读缓存(read-through)
代理缓存:代理用户,应用层(http)
反向代理缓存:代理数据中心服务器给用户提供服务
多层反向代理缓存
内容分发网络(CDN)
CDN 同时配置静态文件和动态内容
旁路缓存(cache-aside)
浏览器对象缓存
本地对象缓存
远程分布式对象缓存
技术栈各个层次的缓存
缓存关键 —— 一致性哈希算法
使用虚拟节点
合理使用缓存
频繁修改的数据
没有热点的访问
数据不一致与脏读
缓存雪崩
缓存承担了大部分数据库的访问压力,数据库已经习惯了有缓存的日子,所以当缓存服务器崩溃的时候,数据库会因为完全不能承受如此大的压力而宕机,进而导致整个网站不可用。
缓存预热
LRU(最近最久未用)
缓存穿透
恶意攻击持续高并发的请求某个不存在的数据。
Redis VS Memorycached
异步 & 集群 - 2020/7/4 - 周六
为什么要用异步?有什么好处?
实现异步处理,提升处理性能
更好的伸缩性
削峰填谷
失败隔离和自我修复
解耦
多次异步调用,不阻塞应用线程
如何实现异步?
消息队列
主要 MQ 产品比较
负载均衡
HTTP 重定向负载均衡
缺点:应用层 http 请求比较“重”,数据包较大
DNS 负载均衡
反向代理负载均衡
IP 负载均衡
IP 包较“轻”,数据包较小
数据链路层负载均衡
分布式数据库
主->主 复制
主备轮流切换
主->多从 复制
以上两者都不是为“双写”设计的,即不能同时写入。
主->主,主->多从复制只是增加了读并发能力,并没有 增加写并发能力和存储能力。
解决数据不一致目前业界并没有什么好的方法(这是个原理性问题:数据写入主库,然后再同步/复制到从库,只能尽可能减少中间的延迟——从主库不可用到迁移至从库的时间(故障转移时间))。
评论