系统性能调优必知必会
陶辉
智链达CTO、前阿里云高级技术专家
立即订阅
5613 人已学习
课程目录
已完结 43 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 万变不离其宗,性能优化也有章可循
免费
基础设施优化 (6讲)
01 | CPU缓存:怎样写代码能够让CPU执行得更快?
02 | 内存池:如何提升内存分配的效率?
03 | 索引:如何用哈希表管理亿级对象?
04 | 零拷贝:如何高效地传输文件?
05 | 协程:如何快速地实现高并发服务?
06 | 锁:如何根据业务场景选择合适的锁?
系统层网络优化 (7讲)
07 | 性能好,效率高的一对多通讯该如何实现?
08 | 事件驱动:C10M是如何实现的?
09 | 如何提升TCP三次握手的性能?
10 | 如何提升TCP四次挥手的性能?
11 | 如何修改TCP缓冲区才能兼顾并发数量与传输速度?
12 | 如何调整TCP拥塞控制的性能?
13 | 实战:单机如何实现管理百万主机的心跳服务?
应用层编解码优化 (5讲)
14 | 优化TLS/SSL性能该从何下手?
15 | 如何提升HTTP/1.1性能?
16 | HTTP/2是怎样提升性能的?
17 | Protobuf是如何进一步提高编码效率的?
18 | 如何通过gRPC实现高效远程过程调用?
期中考试周 (3讲)
期中考试|行至半程,你的收获如何呢?
加餐1|特别福利:陶辉视频课精选
加餐2 |答疑精选:这些问题你都清楚吗?
分布式系统优化 (12讲)
19 | 如何通过监控找到性能瓶颈?
20 | CAP理论:怎样舍弃一致性去换取性能?
21 | AKF立方体:怎样通过可扩展性来提高性能?
22 | NWR算法:如何修改读写模型以提升性能?
23 | 负载均衡:选择Nginx还是OpenResty?
24 | 一致性哈希:如何高效地均衡负载?
25 | 过期缓存:如何防止缓存被流量打穿?
26 | 应用层多播:如何快速地分发内容?
27 | 消息队列:如何基于异步消息提升性能?
28 | MapReduce:如何通过集群实现离线计算?
29 | 流式计算:如何通过集群实现实时计算?
30 | 如何权衡关系数据库与NoSQL数据库?
加餐与分享 (8讲)
加餐3 | 大厂面试到底在考些什么?
大咖助场1 | 李玥:高并发场景下如何优化微服务的性能?
大咖助场2|庄振运:与程序员相关的SSD性能知识
加餐4|百万并发下Nginx的优化之道
大咖助场3|傅健:那些年,影响我们达到性能巅峰的常见绊脚石(上)
大咖助场4|傅健:那些年,影响我们达到性能巅峰的常见绊脚石(下)
加餐5 | 如何理解分布式系统?
加餐6|分布式系统的本质是什么?
结束语 (1讲)
结束语 | 从业 IT 20年后,我将最看重什么?
系统性能调优必知必会
15
15
1.0x
00:00/00:00
登录|注册

25 | 过期缓存:如何防止缓存被流量打穿?

陶辉 2020-07-08
你好,我是陶辉。
这一讲我们将对一直零散介绍的缓存做个全面的总结,同时讨论如何解决缓存被流量打穿的场景。
在分布式系统中,缓存无处不在。比如,浏览器会缓存用户 Cookie,CDN 会缓存图片,负载均衡会缓存 TLS 的握手信息,Redis 会缓存用户的 session,MySQL 会缓存 select 查询出的行数据,HTTP/2 会用动态表缓存传输过的 HTTP 头部,TCP Socket Buffer 会缓存 TCP 报文,Page Cache 会缓存磁盘 IO,CPU 会缓存主存上的数据,等等。
只要系统间的访问速度有较大差异,缓存就能提升性能。如果你不清楚缓存的存在,两个组件间重合的缓存就会带来不必要的复杂性,同时还增大了数据不一致引发错误的概率。比如,MySQL 为避免自身缓存与 Page Cache 的重合,就使用直接 IO 绕过了磁盘高速缓存。
缓存提升性能的幅度,不只取决于存储介质的速度,还取决于缓存命中率。为了提高命中率,缓存会基于时间、空间两个维度更新数据。在时间上可以采用 LRU、FIFO 等算法淘汰数据,而在空间上则可以预读、合并连续的数据。如果只是简单地选择最流行的缓存管理算法,就很容易忽略业务特性,从而导致缓存性能的下降。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《系统性能调优必知必会》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(7)

  • 唐朝首都
    缓存在总是被修改、失效的情况下,容易造成系统性能不升反降。
    2020-07-08
    4
  • Jeff.Smile
    一般的缓存都是为了对付读多写少,但是mysql的ChangeBuffer是读少写多更实用。原因是:
    Mysql的普通索引场景下,Update更新操作会记录在ChangeBuffer下,等到访问数据时、或者shutdown数据库时会进行merge合并成记录的最新值,后台也会有线程定时执行Merge操作。ChangeBuffer对更新的加速作用,只限于用在普通索引的场景下,只限于写多读少的场景下,因为写完就读取会触发Merge到原始数据的动作,就失去意义了。

    2020-07-09
    2
  • test
    老师,问个问题,通常用redis做mysql的缓存,按照这篇文章来说的话,会在mysql上面再加一个nginx再做一层缓存么?
    2020-07-08
    2
  • leslie
    可能有一点不是特别理解:redis+nginx其实这套方案并不好,尤其如果有些非常耗费资源的应用不多且重要的话。
    其实是通过追加sftp之类的把这部分资源落地到服务器,从而减少了数据系统查询的资源消耗。
    2020-07-23
    1
  • 赖阿甘
    陶辉老师,买了您两个课程,还有一个《抓包实战》,并且还关注了您的博客。说实在,被你的专业和对于所讲课程的敬业,能看出来您这是毫无保留的倾囊相授。学生很想认识你,不知可以要一个联系方式吗,我买了30多个课程,这是我唯一一次大胆地找老师要联系方式。不知为啥,有种感觉你在生活中就是个亦师亦友的角色,哈哈哈哈哈哈哈哈哈哈哈哈哈

    编辑回复: 哈哈,陶老师在极客时间啊,你在这里联系他

    2020-07-08
    1
  • 蚂蚁
    老师有个问题请教下,两种数据淘汰策略,是说数据也要存放在这两类数据结构中吗?这两种数据的查找效率都不高,是我理解错了吗
    2020-07-15
  • Geek_007
    课后题,典型的例子,dns缓存,这玩意总是更新不及时,老讨厌了。非常影响可用性😂
    2020-07-08
    1
收起评论
7
返回
顶部