首页 > ATS缓存数据结构

ATS缓存数据结构

ATS缓存数据结构

HttpTunnel类

数据传输驱动器(data transfer driver),包含一个生产者(producer)集合,每个生产者连接到一个或是多个消费者(comsumer)。隧道(tunnel)处理事件和缓冲区以便数据能从生产者移动到消费者,数据会尽可能保存在引用计数类型的缓冲区中。只有数据发生变动,或者在数据源(它从ATS外部获取数据)和数据接收端(它将数据发送到ATS外部)的情况下,才会发生拷贝操作。

HTTPCacheAlt类

定义在HTTP.h中,它是一个缓存对象中单个副本的元数据(metadata)。包含下面的信息:

  • 副本的earliest Doc对应的Dir
  • 请求头和响应头信息
  • 分片偏移表(fragment offset table)
  • 源站请求和响应的时间戳(timestamp)

HTTPInfo类

定义在HTTP.h中,它是HTTPCacheAlt的包装类。它提供了外部API来访问包装类内部的数据,它只含有一个指向包装类实例的指针(可能为NULL)。

CacheHTTPInfo类

HTTPInfo类的typedef。

CacheHTTPInfoVector类

定义在P_CacheHttp.h中,它是HTTPInfo对象组成的数组,充当一个对象所有副本的信息仓库。

OpenDir类

一个打开的目录项(directory entry),包括一个Dir所有的信息,外加从first Doc中获取的额外信息。

CacheVC类

接收输入数据并写到缓存中的虚拟连接类。

  • int CacheVC::openReadStartHead(int event, Event *e)

    执行读取一个缓存对象(cached object)的初始化工作
  • int CacheVC::openReadStartEarliest(int event, Event *e)

    执行读取一个缓存对象的副本(alternate)的初始化工作

CacheVol类

保存volume.config配置文件中一行的数据的类,一行表示一个缓存分卷

CacheControlResult类

保存cache.config配置文件中一行的数据的类。

EvacuationBlock类

用于记录疏散的相关信息(record for evacuation)。

Vol类

表示cache分卷内的一个存储单元(过时的叫法storage unit,现在叫作cache strip),也叫作volume,注意跟磁盘分卷的那个volume是有区别的。

  • off_t Vol::segments

    缓存带中的段的个数,由该缓存带中的所有目录项(directory entry)除以一个段中的目录项数得到,是个粗略估计值。
  • off_t Vol::buckets

    缓存带中的桶的个数,由目录段中的所有目录项(directory entry)除以DIR_DEPTH(当前为4)得到。是个粗略估计值,按照当前的定义值,这个数大约是16384(2^16/4),目录桶用来作为索引哈希(index hash)的目标。
  • DLL Vol::evacuate

    元素为EvacuationBlock的桶组成的数组,它按照大小排序,以便每个疏散带(evacuation span)都有一个EvacuationBlock桶。
  • off_t len

    缓存带的字节长度。
  • int Vol::evac_range(off_t low, off_t high, int evac_phase)

    假如从lowhigh的字节带上存在任何EvacuationBlock,就开始一次疏散。假如没有疏散发生,返回0,否则返回非零值。

Doc类

在P_CacheVol.h中定义。

  • uint32_t Doc::magic

    校验值,对合法文档(document)设为DOC_MAGIC。
  • uint32_t Doc::len

    包含HTTP头长度,分片表和Doc结构体的段的长度。
  • Doc::total_len

    整个文档的总长度,不包含元数据,但是包含HTTP头信息。
  • Doc::first_key

    文档(document)的首个索引键值,用于定位cache带中的缓存对象。
  • Doc::key

    分片的索引键值(index key),分片键值可以通过链式方法计算,使得下一个和上一个分片的键值可以从当前键值计算出来。
  • uint32_t Doc::hlen

    文档头(即元数据)长度,注意不是HTTP头的长度。
  • uint8_t Doc::ftype

    分片类型,当前只用到CACHE_FRAG_TYPE_HTTP,其它类型用于后续缓存扩展,目前还没有实现。
  • uint24_t Doc::flen

    分片表(fragment table)长度,假如存在分片表的话。一个缓存对象只有first Doc分片中才含有分片表。分片表是从第一个分片首字节开始计算时,各分片中HTTP响应内容(不包含元数据和HTTP头)的相对字节偏移所组成的列表。分片表中的第一个元素表示的是第二个分片中的字节偏移,类似于数组从索引1开始计算,因为第一个分片的字节偏移是总是0,无须计算在内。这样做的目的是为了在range请求的快速查找。假如给定first Doc分片,包含range请求首字节的分片将会直接计算和读取,不需要更多的磁盘访问。

    ATS 3.3.0之后移除了。
  • uint32_t Doc::sync_serial
  • uint32_t Doc::write_serial
  • uint32_t pinned

    钉住对象(pinned object)的标志和计时器
  • uint32_t checksum

VolHeaderFooter类

参考文献

https://docs.trafficserver.apache.org/en/latest/developer-guide/architecture/data-structures.en.html

更多相关:

  • 1、分片枚举 通过在配置文件中配置可能的枚举 id,自己配置分片,本规则适用于特定的场景,比如有些业务需要按照省份或区县来做保存,而全国省份区县固定的,这类业务使用本条规则,配置如下: user_id

  • 本文是西门子开放式TCP通信的第2篇,上一篇我们讲了使用西门子1200PLC作为TCP服务器的程序编写,可以点击下方链接阅读:【公众号dotNet工控上位机:thinger_swj】基于Socket访问西门子PLC系列教程(一)在完成上述步骤后,接下来就是编写上位机软件与PLC之间进行通信。上位机UI界面设计如下图所示:从上图可以看出...

  • 我有一个大型数据集,列出了在全国不同地区销售的竞争对手产品。我希望通过使用这些新数据帧名称中的列值的迭代过程,根据区域将该数据帧分成几个其他区域,以便我可以分别处理每个数据帧-例如根据价格对每个地区的信息进行排序,以了解每个地区的市场情况。我给出了以下数据的简化版本:Competitor Region ProductA Product...

  • 作为一名IT从业者,我来回答一下这个问题。首先,对于具有Java编程基础的人来说,学习Python的初期并不会遇到太大的障碍,但是要结合自己的发展规划来制定学习规划,尤其要重视学习方向的选择。Java与Python都是比较典型的全场景编程语言,相比于Java语言来说,当前Python语言在大数据、人工智能领域的应用更为广泛一些,而且大...

  • 这段时间通过学习相关的知识,最大的变化就是看待事物更加喜欢去了解事物后面的本质,碰到问题后解决问题思路也发生了改变。举个具体的例子,我在学习数据分析,将来会考虑从事这方面的工作,需要掌握的相关专业知识这个问题暂且按下不表,那哪些具体的问题是我需要了解的呢,以下简单罗列:1、了解数据分析师这个岗位在各个地区的需求情况?2、数据分析师的薪...

  • 这一节将开始学习python的一个核心数据分析支持库---pandas,它是python数据分析实践与实战的必备高级工具。对于使用 Python 进行数据分析来说,pandas 几乎是无人不知,无人不晓的。今天,我们就来认识认识数据分析界鼎鼎大名的 pandas。目录一. pandas主要数据结构 SeriesDataFrame二...