Apache traffic
server 源码分析
Write by王锋
2016.10
⽬目录
基础 6
ATS ⽬目录 6
cache系统对⽐比 7
coss存储机制 8
关键数据结构 9
CacheKey 9
Dir 11
VolHeaderFooter 11
bucket存储OpenDirEntry 12
Continuation 12
Event 13
CacheVC 13
其他关键字 13
Proxy 15
HTTPS 15
HTTP2 16
Tunnel 16
Etag header 17
Cache概要 22
Cache 体系 22
索引查找规则 24
Doc 24
CacheHTTPInfoVector 27
多副本的读取 29
Cache内容副本 30
Trunk 30
evacute机制 31
合并回源分析 33
Range并发请求 37
Disk 40
更更新cache 40
Cache 模块读写模块 40
对象存储机制 40
磁盘布局 41
索引格式 41
存储格式 42
读写逻辑 42
⼩小⽂文件写 43
⼤大⽂文件写 44
⼩小⽂文件读 45
⼤大⽂文件读 46
读逻辑程序分析 46
逻辑图 46
OpenDir::open_read 47
dir_probe 48
Cache::open_read 49
CacheVC::openReadFromWriter 49
CacheVC::handleRead 50
CacheVC::handleReadDone 50
CacheVC::openReadStartHead 52
CacheVC::openReadStartEarliest 52
CacheVC::openReadMain 52
CacheVC::openReadReadDone 53
写逻辑程序分析 54
Raw Disk Layout in ATS 54
写Cache头部 58
CacheVC::openWriteCloseHead 58
CacheVC::updateVector 58
CacheVC::openWriteCloseHeadDone 58
CacheVC::openWriteCloseDir 59
Vol::close_write 59
写Cache数据 59
Cache::open_write 59
CacheVC::openWriteMain 60
agg_copy 60
Vol::aggWrite 60
Vol::aggWriteDone 60
CacheVC::openWriteWriteDone 60
CacheVC::openWriteCloseDataDone 61
写Cache索引 61
CacheVC::openWriteCloseHeadDone 61
CacheVC::openWriteCloseDir 61
⽹网络 61
IOCoreNet模型 61
PollDescriptor 62
EventIO 63
PollCont 64
IOBuffer 64
VIO 67
NetHandler 68
mainNetEvent 70
read_from_net 71
write_to_net_io 71
ready队列列 72
UnixNetVConnection 74
net_read_io 74
do_io_read 75
do_io_write 75
do_io_close 75
do_io_shutdown 75
NetAccept 75
InactivityCop 76
多线程异步event处理理 78
EventProcessor 79
EThread 79
Event 80
线程执⾏行行函数 82
调度单元 85
Epoll线程 86
插件 89
基础 89
Mutexes 92
VIO 92
Transformations 92
插件编译与测试 95
Range插件 95
背景 95
官⽅方插件 95
backgroud fetch插件 96
cache_range_requests插件 97
程序架构 98
设计⽅方案 100
程序 101
忽略略参数插件 102
缓存时间插件 104
Purge⽬目录插件 107
⽬目录刷新插件(purge_directory) 109
描述 109
功能 109
实现 109
⻛风险 111
回源host插件 111
Slice_range插件 111
Nginx的slice模块 111
trunk 113
Slice_range插件 114
基础
ATS ⽬目录
trafficserver-4.2.2
|-- build
|-- cmd
| |-- traffic_cop //负责监控traffic_server和
traffic_manager⼯工作情况
| |-- traffic_line //命令⾏行行⼯工具,查询和reload配置⽂文
件,重启和清空单件或集群数据
| |-- traffic_shell //shell界⾯面⼯工具 traffic_shell
| `-- traffic_top //服务器器状态⼯工具
|-- contrib
|-- doc //参考⽂文档资料料,SDK
|-- example //插件例例⼦子
|-- iocore
| |-- aio //异步IO实现
| |-- cache //缓存⽂文件系统,磁盘和内存cache
| |-- cluster //集群通信系统,解决数据交互协议RPC
| |-- dns //DNS解析功能代码
| |-- eventsystem //事件系统,实现调度机制和buffer
管理理
| |-- hostdb //DNS缓存系统
| |-- net //⽹网络层处理理框架
| `-- utils
|-- lib //ATS基础库,源⾃自Inktomi++
|-- mgmt //负责traffic_server的启动、配置⽂文件更更新
管理理⼯工作
| |-- api
| |-- cluster
| |-- preparse
| |-- stats
| |-- utils
| `-- web2
|-- plugins //核⼼心插件
|-- proxy //ATS的业务处理理服务器器,包括服务器器、回归
测试、初始化cache系统三⼤大功能块
| |-- api
| |-- config
| |-- congest
| |-- hdrs
| |-- http
| |-- logging
| |-- shared
| `-- tests
|-- rc //init脚本
|-- self
`-- tools //性能测试⼯工具
ATS是多线程异步事件处理理模型,traffic_cop和
traffic_manager是管理理进程,traffic_server是主要业务进
程,负责代理理和缓存功能,进⾏行行事件Listen,accept和处理理
session。Traffice server不不是每个连接都建⽴立⼀一个线程,⽽而是
创建可配置的⼯工作线程,每个线程运⾏行行着独⽴立的异步事件处理理
程序。Thread通过执⾏行行Event对应的Continuation中的回调函
数,来完成状态迁移,从开始状态到结束状态代表⼀一个事件的
执⾏行行过程,Thread不不退出,等着下⼀一个事件的到来。
cache系统对⽐比