AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

NGINX High-performance Caching Andrew(高性能缓存-页面加载时间过长会有什么后果) by Alexeev@Nginx

发布者 devops
发布于 1447722706494  浏览 6458 关键词 Nginx, English 
分享到

第1页

NGINX High-performance Caching
Introduced by Andrew Alexeev
Presented by Owen Garrett
Nginx, Inc.

第2页

About this webinar
Content Caching is one of the most effective ways to dramatically improve the performance of a web site. In this webinar, we’ll deep-dive into NGINX’s caching abilities and investigate the architecture used, debugging techniques and advanced configuration. By the end of the webinar, you’ll be well equipped to configure NGINX to cache content exactly as you need.

第3页

Basic principles of content caching

第4页

Basic Principles
Internet
GET /index.html
GET /index.html
Used by: Browser Cache, Content Delivery Network and/or Reverse Proxy Cache
Why cache – three reasons – performance improvements, capacity improvements, and resilience to failures in backends

第5页

Mechanics of HTTP Caching
Origin server declares cacheability of content





Requesting client honors cacheability
May issue conditional GETs
Expires: Tue, 6 May 2014 02:28:12 GMT
Cache-Control: public, max-age=60
X-Accel-Expires: 30
Last-Modified: Tue, 29 April 2014 02:28:12 GMT
ETag: "3e86-410-3596fbbc“

第6页

What does NGINX cache?
Cache GET and HEAD with no Set-Cookie response
Uniqueness defined by raw URL or:

Cache time defined by
X-Accel-Expires
Cache-Control
Expireshttp://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html 
proxy_cache_key $scheme$proxy_host$uri$is_args$args;

第7页

Nginx in operation…
Cool because is trivial to configure

第8页

NGINX Config
proxy_cache_path /tmp/cache keys_zone=one:10m levels=1:2 inactive=60m;

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://localhost:8080;
        proxy_cache one;
   }
}

第9页

Caching Process
Internet
Check Cache
Respond from cache
Read request
Wait?
cache_lock_timeout
Response cacheable?
Stream to disk
proxy_cache_use_stale error | timeout | invalid_header | 
    updating | http_500 | http_502 | http_503 | http_504 |
    http_403 | http_404 | off
NGINX can use stale content under the following circumstances:
MISS
HIT
Error: an error occurred while establishing a connection with the server, passing a request to it, or reading the response header;
Timeout: a timeout has occurred while establishing a connection with the server, passing a request to it, or reading the response header;
invalid_header: a server returned an empty or invalid response;
Updating – content is being refreshed and a lock is in place
http_500: a server returned a response with the code 500;
http_502: a server returned a response with the code 502;
http_503: a server returned a response with the code 503;
http_504: a server returned a response with the code 504;
http_403: a server returned a response with the code 403;
http_404: a server returned a response with the code 404;
Off: disables passing a request to the next server.

第10页

Caching is not just for HTTP
FastCGI 
Functions much like HTTP

Memcache
Retrieve content from memcached server (must be prepopulated)

uwsgi and SCGI

第11页

How to understand What’s going on
Complex.  We make it really easy

第12页

add_header X-Cache-Status $upstream_cache_status;
Cache Instrumentation

第13页

Cache Instrumentation
map $remote_addr $cache_status {
    127.0.0.1 $upstream_cache_status;
    default “”;
}

server {
    location / {
        proxy_pass http://localhost:8002;
        proxy_cache one;
        
        add_header X-Cache-Status $cache_status;
    }
}

第14页

Extended Status
Check out: demo.nginx.com
http://demo.nginx.com/status.html
http://demo.nginx.com/status

第15页

How content caching functions in NGINX
It uses same tech as static content that nginx is renowned for

第16页

How it works...
NGINX uses a persistent disk-based cache
OS Page Cache keeps content in memory, with hints from NGINX processes
We’ll look at:
How is content stored in the cache?
How is the cache loaded at startup?
Pruning the cache over time
Purging content manually from the cache

第17页

How is cached content stored?


Define cache key:


Get the content into the cache, then check the md5



Verify it’s there:

$ echo -n "httplocalhost:8002/time.php" | md5sum
6d91b1ec887b7965d6a926cff19379b4  -
$ cat /tmp/cache/4/9b/6d91b1ec887b7965d6a926cff19379b4
proxy_cache_path /tmp/cache keys_zone=one:10m levels=1:2 max_size=40m;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;

第18页

Loading cache from disk
Cache metadata stored in shared memory segment
Populated at startup from cache by cache loader


Loads files in blocks of 100
Takes no longer than 200ms
Pauses for 50ms, then repeats
proxy_cache_path path keys_zone=name:size 
   [loader_files=number] [loader_threshold=time] [loader_sleep=time];
                 (100)                    (200ms)             (50ms)

第19页

Managing the disk cache
Cache Manager runs periodically, purging files that were inactive irrespective of cache time, deleteing files in LRU style if cache is too big


Remove files that have not been used within 10m
Remove files if cache size exceeds max_size
proxy_cache_path path keys_zone=name:size
   [inactive=time] [max_size=size];
             (10m)

第20页

Purging content from disk
Find it and delete it
Relatively easy if you know the key
NGINX Plus – cache purge capability
$ curl -X PURGE -D – "http://localhost:8001/*"
HTTP/1.1 204 No Content
Server: nginx/1.5.12
Date: Sat, 03 May 2014 16:33:04 GMT
Connection: keep-alive
X-Cache-Key: httplocalhost:8002/*

第21页

Controlling Caching
Get smart

第22页

Delayed caching

Saves on disk writes for very cool caches



Saves on upstream bandwidth and disk writes 
proxy_cache_min_uses number;
proxy_cache_revalidate on;
Cache revalidation

第23页

Control over cache time


Priority is:
X-Accel-Expires
Cache-Control
Expires
proxy_cache_valid
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404      1m;
Set-Cookie response header means no caching

第24页

Cache / don’t cache

Bypass the cache – go to origin; may cache result
No_Cache – if we go to origin, don’t cache result


Typically used with a complex cache key, and only if the origin does not sent appropriate cache-control reponses
proxy_cache_bypass string ...;
proxy_no_cache string ...;
proxy_no_cache $cookie_nocache $arg_nocache $http_authorization;

第25页

Multiple Caches


Different cache policies for different tenants
Pin caches to specific disks
Temp-file considerations – put on same disk!:
proxy_cache_path /tmp/cache1 keys_zone=one:10m levels=1:2 inactive=60s;
proxy_cache_path /tmp/cache2 keys_zone=two:2m  levels=1:2 inactive=20s;
proxy_temp_path path [level1 [level2 [level3]]];

第26页

Gotchas with NGINX caching
No ‘Vary’ support – use cache key
ETags works with Last-Modified, but not alone
Supports SSI, but not ESI

Other than that, you’re good to go!

第27页

Quick review – why cache?

第28页

Why is page speed important?
We used to talk about the ‘N second rule’:

10-second rule
(Jakob Nielsen, March 1997)
8-second rule 
(Zona Research, June 2001)
4-second rule 
(Jupiter Research, June 2006)
3-second rule 
(PhocusWright, March 2010)

第29页

Google changed the rules

“We want you to be able to get from one page to another as quickly as you turn the page on a book”

Urs Hölzle, Google

第30页

The costs of poor performance
Google: search enhancements cost 0.5s page load
Ad CTR dropped 20%

Amazon: Artificially increased page load by 100ms
Customer revenue dropped 1%

Walmart, Yahoo, Shopzilla, Edmunds, Mozilla… 
All reported similar effects on revenue

Google Pagerank – Page Speed affects Page Rank
Time to First Byte is what appears to count
http://www.strangeloopnetworks.com/assets/images/infographic2.jpg
http://www.thinkwithgoogle.com/articles/the-google-gospel-of-speed-urs-hoelzle.html
http://moz.com/blog/how-website-speed-actually-impacts-search-ranking


What does performance really mean to you?
Revenue
Ad CTR
Employee and partner satisfaction

What devices do your users use?
What network conditions are they under?

第31页

NGINX Caching lets you
Improve end-user performance
Consolidate and simplify your web infrastructure
Increase server capacity
Insulate yourself from server failures
1. Deliver all content at the speed of nginx
2. Compared to multiple point solutions
3. Cache for one second example
4. proxy_cache_use_stale 

第32页

Closing thoughts
38% of the world’s busiest websites use NGINX

Check out the blogs on nginx.com
Future webinars: nginx.com/webinars

Try NGINX F/OSS (nginx.org) or NGINX Plus (nginx.com)
支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。