博文

目前显示的是 一月, 2015的博文

最近与ATS Event有关的两个问题

ATS的Event真的是很复杂,太多了。最近遇到的两个比较严重的问题,都是因为在某个函数内收到了不该收到的Event。问题1: UnixNetVConnection::mainEvent收到了VC_EVENT_WRITE_COMPLETE这个我已经提了bug report https://issues.apache.org/jira/browse/TS-3289这是在启用了100 continue之后发现的,每次必定core dump.问题2: HttpSM::state_send_server_request_header收到了VC_EVENT_WRITE_READY我启用了某个inception插件,所以HttpSM::state_send_server_request_header这个函数并非是在给origin server发送request的时候调用,而是在inception插件处理了accept请求之后。所以HttpSM::state_send_server_request_header收到的应该只有VC_EVENT_WRITE_COMPLETE事件,不应该有VC_EVENT_WRITE_READY,因为这时候还未发生socket write操作。都先mark在这里,看我什么时候能找到原因。

ATS真是太复杂了

ATS是一个类似于squid的HTTP代理服务器,大约有30多万行C/C++代码,配置选项有数千个,极为复杂。这是一篇没什么意义的吐槽文。History1996年,UC Berkeley的一个教授Eric Brewer和他的学生一起成立了一个公司叫Inktomi。它本来是做搜索引擎的,后来敌不过Google,转而做web server的开发。然后大概在1997、1998年左右,它开发了一个很牛B的HTTP代理服务器,名字大概是叫Inktomi Traffic Server,准备和Cisco的Cache Director竞争,后来也败了。后来2002年,Inktomi被Yahoo以2亿美元收购了,Inktomi的Traffic Server就变成了Yahoo Traffic Server,简称YTS。YTS在Yahoo内部备受重用。根据Yahoo的公开数据,在2009年的时候,YTS已经每天处理170亿次请求,峰值带宽20Gb。在2009年Yahoo把YTS开源,交给Apache软件基金会(Apache Software Foundation,简称ASF)管理,成为该基金会的一个子项目。于是,YTS就被改名为ATS(Apache Traffic Server)。简单说就是:Inktomi Traffic Server(1998) -> Yahoo Traffic Server(2002) -> Apache Traffic Server(2009)这中间还有一个小插曲,在2006年的时候,Websense不知道怎么把Inktomi的Traffic Server拿去了,连名字都没改,直接集成到Websense的企业产品中拿出去卖。还有一个小细节,根据Yahoo的工程师Shih-Yong Wang在COSCUP 2010年会议上的演讲,YTS直到2010年了,都还不支持64位。作为一个cache server,这略微有点悲剧啊。即便在中国国内,那会儿都鲜有内存小于4G的机器上线了。根据公开资料,现在ATS在Yahoo已经有上万个主机节点,峰值带宽100Gb以上。功能单一,缺乏竞争力在我看来,ATS能打败的主力竞争者只有一个:Squid。因为Squid的是一个纯代理服务器,在功能上与ATS有很大重合。ATS不能Serve静态文件。这导致ATS后面得再挂一个ng…