全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

IP归属甄别会员请立即修改密码
查看: 862|回复: 3
打印 上一主题 下一主题

一个应用级实现304加速网站的算法分享

[复制链接]
跳转到指定楼层
1#
发表于 2012-11-21 03:52:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
应用级304

演示:




意义:可以为网站节省很大的流量,服务器只需响应一个几百b的数据表示数据未更新过,以此来避免几十、几百KB的数据重复下载。
算法简述:在发表文章时,记录更改过的次数,在KV引擎中与URL相映射
逻辑:
1.        发表文章
         正常发表逻辑
        初始化文章编辑etag次数为1
        储存到kv引擎(k -> 文章URL  v->etag)
2.        首次请求
浏览器未加上etag头
3.        首次输出
前端伺服器获取KV引擎中k为url的文章的etag并附加到HTTP头,并转发请求到后端
4.        二次请求
浏览器附带If-None-Match头,值为上次响应的etag
5.        二次输出
获取kv引擎中k为url的文章的etag,与请求头中etag校验,内容未更新,直接响应HTTP 304
6.        更新文章
正常更新逻辑
获取kv引擎中k为url的文章的etag,加1并入kv库
7.        三次请求
浏览器附带If-None-Match头,值为上次响应的etag
8.        三次输出
获取kv引擎中k为url的文章的etag,与请求头中etag校验,内容已更新,输出新的etag,并转发请求到后端


算法分析:
理论上,一个网站有多少url,KV引擎数据库里就有多少条url-etag映射的数据。

以上算法中,etag其实就是一个计数器,虽然太过于简单但完全能满足304的要求。这样做还有一个好处,以纯计数器来充当传统的哈希式etag,避免了很多无法直接生成内容的页面计算哈希的不可实现的缺陷。

编辑器承担着了一个额外重要的角色,那就是modifier(更新器),因为kv引擎
的etag,完全得由后端程序来在编辑时主动更新。

难点:        1.列表页、tag页数量较大时,得PUSH任务,离线异步更新etag
                2.错误、故障发生后的记录和处理
                3.kv引擎的数据需要持久备份

评分

参与人数 1威望 +15 收起 理由
Toney + 15 很给力!

查看全部评分

2#
发表于 2012-11-21 06:02:31 | 只看该作者
TrollFace 发表于 2012-11-21 03:53
楼主技术帝,求PM 谷歌cdn方法

http://speeder.sinaapp.com/
3#
发表于 2012-11-21 06:11:11 来自手机 | 只看该作者
先支持了
4#
发表于 2012-11-21 06:27:57 | 只看该作者
TrollFace 发表于 2012-11-21 03:53
楼主技术帝,求PM 谷歌cdn方法

那个越用越慢的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-4-13 07:10 , Processed in 0.120040 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表