ATS缓存概述
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ATS缓存概述相关的知识,希望对你有一定的参考价值。
在volume.config里面可以配置多个volume,比如说有4块磁盘,配了3个volume。每块磁盘都有3个volume,一个磁盘的一个volume是一个stripe,stripe是磁盘级别的最小单位。stripe存着若干个存储对象,默认每个对象最小占8000字节(proxy.config.cache.min_average_object_size),每个存储对象标示为一个fragment,默认大小是1M(proxy.config.cache.target_fragment_size),每个对象最大占一个fragment。
一个资源根据其大小可能会存在多个存储对象中。如果足够小,连同这个资源的meta信息一起存储在一个doc中。如果比较大,第一个存储对象保存资源的meta信息,后面跟着若干个fragment存着资源的content。
每个对象对应一个索引(directory),索引存储在内存中,索引是缓存key的md5值,由dir_probe函数计算得到。一个stripe的存储对象对应的directory数量可以用stripe大小除8000得到,每4个directory是一个bucket,一个segment最多有2的14次方个bucket。每个directory占10字节,在ats启动的时候就会根据磁盘的大小计算出最多可以存多少个fragment,也即最多多少个directory,根据directory的个数可以计算出他们占的内存大小。directory包括了某个存储对象在磁盘上的位置信息,其中最重要的是偏移量(offset)和“大概大小”(big, size)其结构如下:
缓存相关有几个比较核心的结构体,每个结构中有几个核心的成员。
class vol
len: stripe的大小
segments: stripe中segment的个数
buckets: segment中bucket的个数
struct Doc
magic: 判断document是否有效
total_len: 整个资源到当前的fragment为止的大小,不包括响应头
flen: fragment table的大小
hlen: 头的大小,整个资源的metadata的大小
key: 当前fragment的某一个alternate的key,经常被用来与CacheVC::key做比较,CacheVC::key貌似是当前正在处理的key
first_key: 一个资源可能对应多个fragment,first_key是第一个fragment的key,同一个资源多个fragment有相同的first_key
len:fragment的数据大小
对于小文件:len = heln + total_len + 72
class CacheVC
seek_to:range的起始地址
offset:第一个fragment的偏移量+整个请求范围发了的数据大小
doc_pos:这个fragment已经发送的数据大小
key:当前fragment的目标alternate的key
doc_len:当前资源的目标alternate的总大小
以上是关于ATS缓存概述的主要内容,如果未能解决你的问题,请参考以下文章