架构师训练营 - 学习笔记 - 第五周

用户头像
心在飞
关注
发布于: 2020 年 07 月 07 日
架构师训练营 - 学习笔记 - 第五周

思考与感悟

做事多想想为什么,思维要开阔

在给出技术解决方案前,多想想为什么要解决这个问题,有没有其他的办法,问题背后正真的需求是什么?

譬如:使用简单的用户提示来解决缓存数据与数据库数据不一致的问题, 当用户点了提交按钮后提示:“您的数据正在审核中,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 包较“轻”,数据包较小

  • 数据链路层负载均衡

分布式数据库

  1. 主->主 复制

  • 主备轮流切换

  1. 主->多从 复制

以上两者都不是为“双写”设计的,即不能同时写入。

主->主,主->多从复制只是增加了读并发能力,并没有 增加写并发能力存储能力



解决数据不一致目前业界并没有什么好的方法(这是个原理性问题:数据写入主库,然后再同步/复制到从库,只能尽可能减少中间的延迟——从主库不可用到迁移至从库的时间(故障转移时间))。



用户头像

心在飞

关注

还未添加个人签名 2017.10.15 加入

2个女儿的爸爸 | 程序员 | CS 反恐精英

评论

发布
暂无评论
架构师训练营 - 学习笔记 - 第五周