最近遇到一个需求,即一个配置文件,由于这个文件的访问量非常大(8000次/秒),并且配置文件本身也比较大,所以需要
1.发布之后在5分钟之内生效
2.要能够cache,并尽量减少请求量和流量
对于以上的需求进行分析,首先否定掉放到CDN上,因为虽然第二点满足,但是第一点没法满足。
那么只能通过cgi读取配置文件返回内容来实现,具体方法如下:
1.发布之后5分钟生效
使用Etag,在这里即为配置文件的md5值,当来的请求的Etag值和服务器上的版本不一致时,才返回数据,并设置新的Etag;否则,返回304
2.能够cache
使用Cache-Control,来设定cache的时间
从而,使用Etag减少了流量,使用cache减少了请求量,并且同时兼顾了数据的更新时间可控。
示例代码如下:
返回304:
void CAppBaseConf::PrintHttp304()
{
std::string v = "HTTP/1.1 304 Not Modified\r\nServer: qzhttp\r\n";
printf ...