谈谈缓存

20
谈谈缓存 翁伟

Upload: weng-wei

Post on 15-Jul-2015

103 views

Category:

Technology


3 download

TRANSCRIPT

Page 1: 谈谈缓存

谈谈缓存翁伟

Page 2: 谈谈缓存

缓存⺫⽬目的

• 不同介质访问速度不同

• 进程内 > 内存 > ⺴⽹网络 > 磁盘

• 优化性能

Page 3: 谈谈缓存

⻚页⾯面缓存

• 前端缓存

• etag / lastmodified / max-age

• 后端缓存

• memcached

• 甜甜圈缓存 Donut Cache

Page 4: 谈谈缓存

memcached

Page 5: 谈谈缓存

请求内缓存

Page 6: 谈谈缓存

直读 Read Through

Page 7: 谈谈缓存

memcached的问题• 部署

• 集群节点增减

• 雪崩

• 性能

• ⺴⽹网络

• 内存 slot

• CAS: check and save

• 直读

Page 8: 谈谈缓存

GroupCache• https://github.com/golang/groupcache

• ⽆无需部署

• 避免雪崩 singleflight

• 性能更好

• ⽆无⺴⽹网络IO

• ⽆无CAS

• Go 1.4 Continuous Stack

Page 9: 谈谈缓存

直写 Write Though

Page 10: 谈谈缓存

• 理想情况下,数据库零读:只有写⼊入压⼒力,没有读压⼒力

• 数据预热 + 彻底直写

Page 11: 谈谈缓存

彻底直写

• 提供什么API给应⽤用端?

• 还能不能写SQL了?

• select * from users where sex = ‘f’ order by createAt limit 10, 10

• rails + java怎么办?

Page 12: 谈谈缓存

实现参考

• https://github.com/nkallen/cache-money

• https://github.com/Wuvist/pysonic

Page 13: 谈谈缓存

GroupCache + 直写?http://github.com/Wuvist/groupcache

Page 14: 谈谈缓存

–Phil Karlton

“There are only two hard things in Computer Science: cache invalidation and naming things.”

Page 15: 谈谈缓存

• 实现『最终⼀一致性』很容易

• Atomic:分布式 事务 很难

• Paxos

• 系统规划就更难

• 排队论

Page 16: 谈谈缓存

哪个更快?

Page 17: 谈谈缓存

请求内缓存真的可以?

Page 18: 谈谈缓存

链接池

• 连接池也是『缓存』

• 数据库链接

• 应⽤用程序链接

• php FPM / rails unicorn

Page 19: 谈谈缓存

释放哪些链接? MRU 还是 LRU?

Page 20: 谈谈缓存

Facebook⼏几个团队搞了两年多~https://code.facebook.com/posts/1499322996995183/solving-the-mystery-of-link-

imbalance-a-metastable-failure-state-at-scale/