SlideShare ist ein Scribd-Unternehmen logo
1 von 24
Downloaden Sie, um offline zu lesen
分布式系统


  缓存设计浅析
            朋春
    pengchun@taobao.com
为什么要做这个分享?
缓存系统(2011.6)
                前端产品

glider



                ⼀一级缓存



         二级缓存
缓存系统(2011.6)
URL请求,nocache?



                       前端产品
                 nocache?
    glider



                       ⼀一级缓存
                 nocache?



             二级缓存
缓存系统(2011.6)
URL请求,nocache?
                            data


                       前端产品
                 nocache?
    glider



                       ⼀一级缓存
                 nocache?



             二级缓存
缓存系统(2011.6)
URL请求,nocache?
                            data    etag, http header

                       前端产品
                 nocache?           ttl, http header
    glider



                       ⼀一级缓存
                 nocache?          min (ttl)



             二级缓存
时代变了

• 容灾考虑,缓存多实例,多写单读
• 实时的数据更新
• 更多更复杂的底层系统
缓存系统的三个问题
• 数据⼀一致性问题
• 缓存雪崩问题
• 缓存穿透问题
数据⼀一致性

• 缓存与底层数据的⼀一致性
• 有继承关系的缓存之间的⼀一致性
• 多个缓存副本之间的⼀一致性
缓存数据的淘汰

• “预估”失效时间
• 单调递增的数据版本号
• 提供清理接口
精细化管理


• 只淘汰该淘汰的
itier的设计(通用)

• 根据tag进行缓存管理
• 时间戳做数据版本号
• 提供清理API
• 版本号共享协作
var me = Cache.create(...);
me.set(key, value, ttl, tags);
me.get(key);
me.tagrm(tag, offset, flush);
缓存的数据结构
var data = {
 ‘i’:now,      /** 数据写入时间戳 */
 ‘e’:now + ttl,/** 预期过期时间 */
 ‘k’:key,      /** 原始key */
 ‘v’:value,    /** 原始值   */
 ‘t’:tags      /** tag列表 */
};
tagrm (cleanByTag)
/**
 * @定时同步
 */
var __taginfo = {};
tagrm (tag, offset, flush) {
    __taginfo[tag] = now() + offset;
    // flush to zookeepr or mysql ...
}
itier中的tag定义

• __global__
• 数据来源driver名字
• SQL中的表名
⼀一致性目标

• 缓存的tag信息⼀一路继承,取并集
• 缓存的ttl信息⼀一路继承,取最小值
• 秒量级保证⼀一致性
但是,

简单的事情从来不简单
case1:网络延迟
                        底层数据
          get : a = 1
                         a=1
                               update : a = 2
                         a=2


                                 tagrm: t1
set cache : a = 1
case2:多机时差

• tagrm在机器1上调用,取机器1上的时间
• 写缓存在机器2上,取机器2上的时间
• 机器1和机器2在ms级别时间不同步
case3:异步复制
          实例1

                a=1
                             update : a = 2
                    a=2


                          异步复制
                          有延迟
                          最终⼀一致性
get : a = 1   实例2

                a=1
tagrm (cleanByTag)
/**
 * @定时同步
 */
var __taginfo = {};
tagrm (tag, offset, flush) {
    __taginfo[tag] = now() + offset;
    // flush to zookeepr or mysql ...
}
⼀一些基本理念
• 缓存永远是锦上添花的部分
• 保证不了⼀一致性就拉到吧
• 不要为了⼀一致性加锁,得不偿失
• 不要过度依赖缓存
代码

• https://github.com/aleafs/node-shark/blob/
  master/lib/cache.js

• https://github.com/aleafs/node-shark/blob/
  master/test/unit/CacheTest.js

Weitere ähnliche Inhalte

Was ist angesagt?

深入Docker的资源管理
深入Docker的资源管理深入Docker的资源管理
深入Docker的资源管理SpeedyCloud
 
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现 云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现 july19850903
 
微博实时搜索
微博实时搜索微博实时搜索
微博实时搜索亚军 汪
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Cabin WJ
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析vincent253
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理maclean liu
 
Java多线程设计模式
Java多线程设计模式Java多线程设计模式
Java多线程设计模式Tony Deng
 
Effective linux.2.(tools)
Effective linux.2.(tools)Effective linux.2.(tools)
Effective linux.2.(tools)wang hongjiang
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOpenSourceCamp
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出wang hongjiang
 
realtime-twitter-search
realtime-twitter-searchrealtime-twitter-search
realtime-twitter-search亚军 汪
 
Monitor is all for ops
Monitor is all for opsMonitor is all for ops
Monitor is all for ops琛琳 饶
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换mysqlops
 
使用 Spark 計算 differential expression
使用 Spark 計算 differential expression使用 Spark 計算 differential expression
使用 Spark 計算 differential expressionDrake Huang
 
DNS协议与应用简介
DNS协议与应用简介DNS协议与应用简介
DNS协议与应用简介琛琳 饶
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討國昭 張
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 

Was ist angesagt? (19)

深入Docker的资源管理
深入Docker的资源管理深入Docker的资源管理
深入Docker的资源管理
 
云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现 云计算环境中Ssd在cassandra测试的性能表现
云计算环境中Ssd在cassandra测试的性能表现
 
微博实时搜索
微博实时搜索微博实时搜索
微博实时搜索
 
Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架Apache Zookeeper 分布式服务框架
Apache Zookeeper 分布式服务框架
 
Redis 常见使用模式分析
Redis 常见使用模式分析Redis 常见使用模式分析
Redis 常见使用模式分析
 
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理【Maclean liu技术分享】深入理解oracle中mutex的内部原理
【Maclean liu技术分享】深入理解oracle中mutex的内部原理
 
Redis介绍
Redis介绍Redis介绍
Redis介绍
 
Java多线程设计模式
Java多线程设计模式Java多线程设计模式
Java多线程设计模式
 
Effective linux.2.(tools)
Effective linux.2.(tools)Effective linux.2.(tools)
Effective linux.2.(tools)
 
Osc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresqlOsc scott linux下的数据库优化for_postgresql
Osc scott linux下的数据库优化for_postgresql
 
Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出Shell,信号量以及java进程的退出
Shell,信号量以及java进程的退出
 
realtime-twitter-search
realtime-twitter-searchrealtime-twitter-search
realtime-twitter-search
 
Monitor is all for ops
Monitor is all for opsMonitor is all for ops
Monitor is all for ops
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
淘宝主备数据库自动切换
淘宝主备数据库自动切换淘宝主备数据库自动切换
淘宝主备数据库自动切换
 
使用 Spark 計算 differential expression
使用 Spark 計算 differential expression使用 Spark 計算 differential expression
使用 Spark 計算 differential expression
 
DNS协议与应用简介
DNS协议与应用简介DNS协议与应用简介
DNS协议与应用简介
 
Docker進階探討
Docker進階探討Docker進階探討
Docker進階探討
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 

Ähnlich wie 分布式系统缓存设计

Times Ten Training
Times Ten TrainingTimes Ten Training
Times Ten TrainingLi Chen
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.pptjames tong
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展Sky Jian
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410maclean liu
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析George Ang
 
Key value store
Key value storeKey value store
Key value storexuanhan863
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijingdrewz lin
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现orczhou
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践Feng Yu
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture introted-xu
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践taobao.com
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理zijia
 
淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林Shaoning Pan
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理zijia
 

Ähnlich wie 分布式系统缓存设计 (20)

Times Ten Training
Times Ten TrainingTimes Ten Training
Times Ten Training
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
Cassandra简介.ppt
Cassandra简介.pptCassandra简介.ppt
Cassandra简介.ppt
 
Win dbg入门
Win dbg入门Win dbg入门
Win dbg入门
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展基于MySQL开放复制协议的同步扩展
基于MySQL开放复制协议的同步扩展
 
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
【Maclean liu技术分享】开oracle调优鹰眼,深入理解awr性能报告 第二讲 正式版 20130410
 
优酷 Web网站架构案例分析
优酷   Web网站架构案例分析优酷   Web网站架构案例分析
优酷 Web网站架构案例分析
 
Key value store
Key value storeKey value store
Key value store
 
Youku arch qcon2009_beijing
Youku arch qcon2009_beijingYouku arch qcon2009_beijing
Youku arch qcon2009_beijing
 
MySQL自动切换设计与实现
MySQL自动切换设计与实现MySQL自动切换设计与实现
MySQL自动切换设计与实现
 
淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践淘宝商品库MySQL优化实践
淘宝商品库MySQL优化实践
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
Tair
TairTair
Tair
 
1, OCP - architecture intro
1, OCP - architecture intro1, OCP - architecture intro
1, OCP - architecture intro
 
Split lock
Split lockSplit lock
Split lock
 
Node.js在淘宝的应用实践
Node.js在淘宝的应用实践Node.js在淘宝的应用实践
Node.js在淘宝的应用实践
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理
 
淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林淘宝数据魔方的系统架构 -长林
淘宝数据魔方的系统架构 -长林
 
Linux内存管理
Linux内存管理Linux内存管理
Linux内存管理
 

分布式系统缓存设计