160 likes | 427 Views
架构平台部 Cache及算法 培训. 讲师: 娄继冰 日期:2009年 08 月 12 日. 课程简介. 本课程主要讲解Cache的用法、实现原理、后续的优化点以及目前流行的Cache系统,从多个角度描述Cache目前在服务器层的使用,尤其其所带来的明显性能提升,并结合目前架构平台部属下的服务器模块进行说明。 通过该课程的学习可以对Cache有个基本的了解,充分了解其在服务器架构中所扮演的重要角色,并对部门服务器层的Cache有一个初步的认识,为后续的工作做一个铺垫。. 目录. Cache的作用 Cache的实现原理 Cache在TFS中的应用
E N D
架构平台部Cache及算法培训 讲师:娄继冰 日期:2009年08月12日
课程简介 本课程主要讲解Cache的用法、实现原理、后续的优化点以及目前流行的Cache系统,从多个角度描述Cache目前在服务器层的使用,尤其其所带来的明显性能提升,并结合目前架构平台部属下的服务器模块进行说明。 通过该课程的学习可以对Cache有个基本的了解,充分了解其在服务器架构中所扮演的重要角色,并对部门服务器层的Cache有一个初步的认识,为后续的工作做一个铺垫。
目录 • Cache的作用 • Cache的实现原理 • Cache在TFS中的应用 • 通用的MemCached • 课后作业 • 推荐书目
自我简介 娄继冰(lollylou) 架构平台部-存储平台中心-平台开发组 主要做TFS相关的项目开发及模块性能优化
Cache的作用 • 基于20/80原则,可以用最少的存储抗住最多的请求 • 用最快速的设备对最多的请求作出最及时的响应 • 对相对热点的数据提供最优的服务性能 • 通过降低对落地设备的压力,提高系统整体的支撑能力 • 通过写Cache提高用户上传体验,并合并请求降低后台压力 Cache注意点: • 脏数据的安全性 • 数据的一致性
Cache的实现原理 Cache通常有两种类型: • 内存Cache • 用户数据保存在Chunk内存块中 • Hash+LRU链表,通过Hash链表快速地找到指定Key的Inode • 通过Inode节点从指定的Chunk内存快中读取数据 • LRU通过淘汰策略对节点进行热点更新和节点淘汰 • 定时将脏节点dump到磁盘文件中 • 节点更新写binlog到磁盘文件中 • 磁盘Cache • 用户数据保存在Chunk的磁盘块中 • Hash+LRU链表,通过Inode找到指定Key的数据 • 定时将内存的数据镜像到磁盘文件中 • 节点更新写binlog到磁盘文件中
Cache的实现原理 Cache的数据恢复 • 内存Cache一般都会有脏节点,磁盘Cache的数据量比较大,因此都需要直接从本地恢复数据,目前采用的恢复数据方式是dump+binlog • dump文件 • 内存Cache是定时将其脏节点的数据保存在本地磁盘文件中 • 磁盘Cache是将整个所管理的内存镜像到本地磁盘文件中 • binlog • 内存Cache对每次节点的更新都将数据保存在本地磁盘文件中 • 磁盘Cache对每次节点的更新只需要将节点信息保存文件中 • 数据恢复 • 首先从dump文件将数据恢复到内存 • 按照时间顺序将通过日志流水恢复节点更新数据
Cache的实现原理 Cahce涉及的算法 • LRU算法 “最近最少使用算法”,它是将最近一段时间内最少被访问过的节点淘汰出局。将最近访问比较频繁的节点放在链表首部。至于频繁的标准可以用时间间隔移动或者每次移动的方式等。 • Hash算法 哈希算法是将任意长度的二进制值映射为固定长度的较小二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。衡量Hash算法的好坏主要看其Hash值的散列度及其计算的复杂度。 • 红黑树算法 • 每一个节点不是红色就是黑色 • 根节点总是黑色的 • 如果节点是红色的,则它的子节点必须是黑色的 • 根节点到叶节点或空子节点的每条路径,包含同等的黑节点
天津/南京Cache 缩略图Cache chxmaster trxd chxd DU chxd Disk存储 idxmaster md5master TDB 仓库 md5chk useridx fileidx Cache在TFS中的应用 一个服务器性能如何80%的情况下取决于其对Cache的利用,因此,对TFS这么一个稳定高效的存储系统,Cache的使用尤为关键。所有底层存储的上层均由一个Cache模块(Download、Upload、UserIdx、FileIdx、Md5Chk),包括上层的缩略图Cache和大图Cache,其均是为了提高对原始数据的读写性能而设置的中间层Cache模块。
通用的MemCached HashTable自动扩展 • memcached使用的是hashtable来维护名值对 • 为了降低hash值的碰撞,memcached 使用自动扩展的策略 • 当hashtable中保存的item数目大于它的大小的1.5倍时,memcached就会实行hashtable的2倍容量扩展 • 并把原hanshtable中的元素会重新hash并放到新的hashtable中 • 而且为了降低查找的延时,这种数据迁移会分散在多次的访问中 LRU • 并不是每次get一个item,它都会被放到LRU的链首 • 只有两次访问间隔60秒以上,item才会被更新到链首
课后作业 • 作业内容: • 1、设计内存Cache的Inode和Chunk的数据结构 • 2、设计内存Cache的dump和binlog文件的数据格式 • 3、内存Cache和磁盘Cache的(dump+binlog)的区别及原理 • 作业要求: • 1、通过代码的形式展现数据结构及其数据排列格式 • 2、说明dump和binlog的作用、原理及保存的数据格式 • 3、说明其原理的基础上,比对其实现的区别及原因 • 作业例子程序,Google~~
推荐书目: • MemCached源码分析-----Google • 深入理解Linux内核(第三版)-----陈莉君等译 • STL源码剖析-----侯捷