应用性能优化: 如何将应用延迟降低为 0 ms - 互联网技术和架构
2. 应用业务之外的架构层次的修改
假如不考虑程序的 BUG 或者代码本身的优化,在这之上的一个层次也可以有很多可以优化的方向。
这里主要说明一个利用 最终一致性 的思路修改缓存系统对网页延迟的优化。
Varnish 4.0 增加了一个新功能:
Background (re)fetch of expired objects. On a cache miss where a stale copy is available, serve the client the stale copy while fetching an updated copy from the backend in the background.
假如 cache miss,立刻返回给用户一个之前的旧版本缓存,然后再从应用服务器请求新的版本。这意味着如果缓存足够大,可以让用户 100% 访问到 Varnish 服务器上缓存的版本,而跳过后端服务器的延迟。这也是为什么标题写着降低到 0ms :-) 有点标题党了。
具体的实现方式:
- 保证缓存存储足够大
- 保证 Grace 时间足够长(无限长)
- 假如 obj.ttl + obj.grace > 0s 则返回缓存,否则访问后端服务器。
这样离保证用户 100 % 命中缓存还差一步,就是缓存的预热。为了避免第一个用户访问后端服务器,我们通过主动抓取的方式,或者叫做缓存推送的方式进行缓存的预热。方式很简单,逐个向每个 Varnish 实例请求网站的所有 URL。另外,新生成的 URL,首先进行预热。
需要注意的是,这种方式只适合于用户对信息新旧不是非常敏感的场景,比如所有的媒体页面,说明页面,电商网站的产品说明页面,移动应用的 Feed API (跳出 Varnish,应用类似思路)。另外,这个方案适用于所有需要针对搜索引擎 SEO 进行延迟优化的场景。
Read full article from 应用性能优化: 如何将应用延迟降低为 0 ms - 互联网技术和架构
No comments:
Post a Comment