Traffic Server设计的思想是将一个大系统划分为若干个小的子系统,每个子系统负责专门的任务或应用。比如,Event子系统负责提供任务调度服务,Net子系统负责提供网络服务。每个子系统抽象为一个Processor,如图1所示。这种高内聚低耦合的设计原则使系统具有更好的重用性,维护性和扩展性。例如,如果hostDBProcessor需要进行DNS解析,可以直接调用dnsProcessor的相关函数,而无需关注DNS解析的细节;dnsProcessor也只需封装DNS请求和解析DNS应答,和网络相关的功能可以调用netProcessor来完成。Event子系统已经在 “Traffic Server多线程异步事件处理模型”中说明过了,下面简单介绍一下Net子系统。
图1 Traffic Server子系统划分
Net子系统是一个封装网络API的模块,提供接收和新建TCP和UDP连接以及读写这些连接的接口。Net子系统可以高效地管理大量的连接。使用 Net子系统的另一个好处是SM(状态机)不用关心不同操作系统网络API的差异。SM使用Net子系统的全局对象netProcessor来创建新的连接或接收传入的连接。SM创建连接时会获得一个用来处理底层的连接的NetVConnection。使用NetConnection可以获得连接的属性,读写数据等。
netProcessor是Net子系统的核心,提供通用的网络API,如accept、connect等。它通过一个状态机来完成网络I/O。
netProcessor提供的函数:
- start():启动netProcessor,在main函数中调用。它使用Event Processor的线程来执行函数。
- accept():接收端口上的连接。回调函数NET_EVENT_ACCEPT和EVENT_ERROR,可重入的回调函数 NET_EVENT_ACCEPT_SUCCEED和NET_EVENT_ACCEPT_FAILED。返回一个Action,可以用来取消本次 accept。
- main_accept():在端口上接收传入的连接。和accept的区别是参数列表是受限的。
- connect_s():为面向连接的I/O打开一个NetVConnection。该函数只有在连接建立之后才返回,是同步调用机制。
- connect_re():为面向连接的I/O打开一个NetVConnection。可重入的回调函数NET_EVENT_OPEN和NET_EVENT_OPEN_FAILED,是异步调用机制。
作为一个Proxy,Traffic Server的一个主要工作是accept来自用户的请求。NetProcessor::accept()和 NetProcessor::main_accept()都调用了UnixNetProcessor::accept_internal()函数,而后者的工作是new NetAccept。NetAccept是一个通用的处理正在被接收连接的类,它可以接收来自不同类型的连接,比如一个可阻塞的线程或通过自适应轮询。 NetAccept::init_accept()调用eventProcessor.assign_thread(etype)分配一个线程,并调用 schedule_every(NetAccept::acceptEvent)来轮询执行。
Traffic Server的另外一个工作是和OS(original server)的通信,NetProcessor::connect_re()调用了 UnixNetProcessor::connect_re_internal(),后者new一个UnixNetVConnection,分配一个 SocksEntry,调用eventProcessor.schedule_imm(vc, opt->etype)来执行一个VConnection。NetVConnection是一个网络socket的VConnection,是一个网络连接的抽象。而UnixNetVConnection是NetVConnection在类unix系统上的实现。
以上就是Net子系统主要的功能。Traffic Server还在SocketManager类以及ink_sock.cc中对网络API进行了函数封装,比如对EAGAIN、EINTR等情况的处理。
分享到:
相关推荐
atsinternals, Apache Traffic Server 源代码分析
traffic server一般作为cdn proxy使用,文档中包含了大量的traffic server内容,包括源码分析,以及一些插件开发;
使用Apache Traffic Server搭建CDN服务器
TrafficServer日志系统配置指南
权利保留 对本项目内容的任何转发和引用,请注明本项目地址: : Apache Traffic Server源代码分析 本项目主要是我对Apache Traffic Server 6.0(以下简称...包含了多个子系统(子系统) 代理人 IOCORE 在IOCore内包
trafficserver文档
在做Proxy过程中,经常遇到需要下载trafficserver代理软件,很多时候一些链接无法下载,奉上次软件,希望对家有所帮助。
trafficserver6的资源包及自动化安装脚本 此脚本是自己写的,自己也在用的,另外博客中也有文章介绍的 https://blog.csdn.net/sincool1003/article/details/82221663
资源来自pypi官网。 资源全名:trafficserver_exporter-0.4.0.tar.gz
适用于Apache TrafficServer(ATS)的Docker构建 该存储库为提供Dockerfile 地位 Debian:克星 流量服务器:9.0.0 构建的图像将上传到 用法: 安装Docker: : 执行docker run -d --name TrafficServer -p 8080:...
The open source can improve the access speed when do the HTTP access
一些网络上的ats配置资料
用法docker run -d --name trafficserver -p 80:80 -p 443:443 -e TRAFFICSERVER_HOST=10.11.12.13 -e TRAFFICSERVER_DEBUG=true eanushan/trafficserver 配置以下环境变量可用于配置。 TRAFFICSERVER_HOST(必需)...
Traffic Server 管理员手册,配置详细说明,作为操作参考值得一看。
Apache Traffic ServerApache Traffic Server:trade_mark:加速了互联网的访问, 提升了网站的性能, 提供了前所未有的web主机托管能力。什么是Apache Traffic Server?TrafficServer是一款高性能的web反向代理缓存...
Apache traffic server 离线一键安装脚本
tsar官方版本已经一年没有更新,在traffic server 6.2.x版本无法正常使用,此版本是针对traffic server 6.2.x的适配。
由Google PageSpeed支持的Apache Traffic Server Web内容优化插件 要构建,一个简单的“ make”应该可以工作。 使用“ sudo make install”进行安装。 (可选)使用ethread.patch修补ATS有助于消除在同步ATS和PSOL...
xsec-traffic为一款轻量级的恶意流量分析程序,包括传感器sensor和服务端server 2个组件。
traffic_flux.mat层次分析法 小波预测