traffic server 插件基础及Transformations

4670阅读 0评论2016-04-08 oxwangfeng
分类:架构设计与优化


Values for TSHttpHookID

TS_HTTP_CACHE_LOOKUP_COMPLETE_HOOK

在查询完cache以后调用;对应事件TS_EVENT_HTTP_CACHE_LOOKUP_COMPLETE

TS_HTTP_OS_DNS_HOOK

dns查询完毕后调用;对应事件TS_EVENT_HTTP_OS_DNS

TS_HTTP_POST_REMAP_HOOK

remap发生后立即调用,发生在cache查询之前;对应事件TS_EVENT_HTTP_POST_REMAP

TS_HTTP_PRE_REMAP_HOOK

在从源站或者代理中读取响应头以后立即调用;

TS_HTTP_READ_CACHE_HDR_HOOK

cache中读取object的请求头和响应头后立即调用;

TS_HTTP_READ_RESPONSE_HDR_HOOK:

从源站或者proxy读取响应头后立即调用;

TS_HTTP_RESPONSE_TRANSFORM_HOOK

。。。

TS_HTTP_READ_REQUEST_HDR_HOOK:

client读取请求头部后理解调用;

TS_HTTP_REQUEST_TRANSFORM_HOOK

。。。

TS_HTTP_SELECT_ALT_HOOK

。。。

TS_HTTP_SEND_RESPONSE_HDR_HOOK:

proxy的响应头写入到client之前调用;这个hook主要是修改响应头;

TS_HTTP_SEND_REQUEST_HDR_HOOK

proxy的请求头发送到源站或者proxy之前调用;访问cache不会调用这个hook;这个hook主要是在发送到源站或者proxy之前修改proxy的请求头;

TS_HTTP_SSN_CLOSE_HOOK

http session结束的时候调用。当client连接关闭的时候一个会话就会结束,你仅仅能够添加这个hook作为一个全局性的hook

TS_HTTP_SSN_START_HOOK:

http session开始的时候调用。当一个client连接ats的时候session就会开始;这个hook仅能够作为一个全局性的hook

TS_HTTP_TXN_CLOSE_HOOK

http transation结束的时候调用;

TS_HTTP_TXN_START_HOOK

http transaction开始的时候调用。当client连接ats和从连接上获取数据时,transaction开始;或者一个以前的client连接为了保活有新的数据;

Transformationvconn的一个特殊类型;transformation处于输入源和输出数据接收器之间,它能够查看以及修改所有通过这之间的数据。有些transformation简单的扫描这些数据,有些transformation采用了一些方式进行压缩处理;

         Transformation可以修改发送到HTTP client的数据流,也可以修改从HTTP client发送的数据流;

Ats transformation有两个hook: TS_HTTP_REQUEST_TRANSFORM_HOOKTS_HTTP_RESPONSE_TRANSFORM_HOOK




Bnull-transform插件:



Upstream vconn的数据写入transformation,transformation读取数据,然后消费,当消费掉所有的incoming数据后,发送TS_EVENT_VCONN_WRITE_COMPLETE到upstream vconn;

在发送TS_EVNET_VCONN_WRITE_COMPLETE之前,transformation应该检查保留在upstream vconnwrite vio(input vio)的字节数(使用TSVIONTodoGet),当所有的upstream数据被消费掉的时候这个值应该为0 ( TSVIONTodoGet = nbytes - ndone).当这个值为0的时候,状态机状态切换为TS_EVENT_VCONN_WRITE_COMPLETE



         具体处理过程:

         1. input buffercopy数据到output buffer

TSIOBufferCopy (TSVIOBufferGet (data->output_vio),

            TSVIOReaderGet (input_vio), towrite, 0);

         2. 告诉input buffer:transformation已经读取数据了:

                  TSIOBufferReaderConsume (TSVIOReaderGet (input_vio), towrite);

         3. 修改input viondone数据(即已经读取了多少数据)

                  TSVIONDoneSet (input_vio, TSVIONDoneGet (input_vio) + towrite);

         4. 如果还有数据要读(ndone,那么激活downstream vconn,并且发送给upstream vconn一个write ready event

[upstream vconn收到write ready信号后就会继续给transaction写数据了]



         5.当没有数据可读的时候,设置output vconnnbytes=ndone,并且激活output conn;最后发送给input vio一个write complete event



上一篇:cdn监控系统
下一篇:traffic server 之 backgroud fetch插件