When dynamic becomes static : the next step in web caching techniques

Embed Size (px)

DESCRIPTION

Although tools like Varnish can improve performance and scalability for static sites, when user-specific content is needed, a hit to the PHP/Ruby/Python/.Net backend is still required, causing scalability issues. We’ll look at a brand-new Nginx module which implements an ultra-fast and scalable solution to this problem, changing the way developers think about designing sites with user-specific content.

Citation preview

  • 1. When dynamic becomes static the next step in web caching techniques Wim Godden Cu.be Solutions

2. Disclaimer The next step As in : what you will be doing in the future Not as in : go home and run it ;-) Language of choice : PHP But : think Perl, Python, Ruby, Java, .Net, 3. Who am I ? Wim Godden (@wimgtr) 4. Where I'm from 5. Where I'm from 6. Where I'm from 7. Where I'm from 8. Where I'm from 9. Where I'm from 10. My town 11. My town 12. Belgium the traffic 13. Who am I ? Wim Godden (@wimgtr) Founder of Cu.be Solutions (http://cu.be) Open Source developer since 1997 Developer of OpenX, PHPCompatibility, ... Speaker at PHP and Open Source conferences 14. Who are you ? Developers ? System/network engineers ? Managers ? 15. To understand the present Understand the past 16. The Stone Age New blog post by : caveman003 17. Pre-PHP : draw it and make html 18. The Egyptian Era 19. Old-school PHP : 'rebuild-every-time' 20. The Industrial Revolution 21. PHP : let's cache 22. Extra ! Extra ! 23. PHP : dynamic content in static content 24. The Modern Era 25. PHP : multiple webservers 26. PHP : push updates to cache 27. Today 28. Adding reverse proxy caching 29. Website with ESI Article content page Page content Header Latest news Navigation 30. Website with ESI Article content page Page content Top header (TTL = 2h) Latest news Navigation (TTL = 1h) 31. Website with ESI Article content page Page content (TTL = 30m) Top header (TTL = 2h) Latest news (TTL = 2m) Navigation (TTL = 1h) 32. ESI how it works GET /pageGET /page 33. ESI how it works ...

... GET /pageGET /page 34. ESI how it works

Login

GET /top 35. ESI how it works ...

... GET /pageGET /page 36. ESI how it works ...

Login

... GET /pageGET /page 37. Going to /page/id/732

38. Article content page Varnish - ESI 39. Varnish - what can/can't be cached ? Can : Static pages Images, js, css Static parts of pages that don't change often (ESI) Can't : POST requests Very large files (it's not a file server !) Requests with Set-Cookie User-specific content 40. ESI no caching on user-specific content ? Logged in as : Wim Godden 5 messages TTL = 5minTTL=1h TTL = 0s ? 41. Nginx Web server Reverse proxy Lightweight, fast 13.46% of all Websites 42. Nginx No threads, event-driven Uses epoll / kqueue Low memory footprint 10000 active connections = normal 43. ESI on Nginx Logged in as : Wim Godden 5 messages NEWSMenu 44. ESI SLIC on Nginx 45. Requesting /page (1st time) Nginx Shared memory 1 2 3 4 /page /page 46. Requesting /page SLIC subrequests (1st time) Nginx 1 2 3 /menu /news /top (in SLIC session) 47. Requesting /page (next time) Nginx Shared memory 1 2 /page /menu /news /top (in SLIC session) /page 48. New message is sent... POST /send DB insert into... set(...) top (in SLIC session) 49. Advantages No repeated GET hits to webserver anymore ! At login : POST warm up the cache ! No repeated hits for user-specific content Not even for non-specific content 50. News added addnews() method DB insert into... set(...) Memcache key /news 51. Advantages No repeated GET hits to webserver anymore ! At login : POST warm up the cache ! No repeated hits for user-specific content Not even for non-specific content No TTLs for non-specific content 52. How many Memcached requests ? Logged in as : Wim Godden 5 messages 53. First release : ESI Part of the ESI 1.0 spec Only relevant features implemented Extension for dynamic session support But : unavailable for copyright reasons 54. Rebuilt from scratch : SLIC Control structures : if/else, switch/case, foreach Variable handling Strings : concatenation, substring, Exception handling, header manipulation, JSON support ! 55. SLIC code samples You are logged in as : You are logged in as : 56. SLIC code samples

57. SLIC code samples 58. Approaches full block

You are logged in as :

You have 5 messages

Logged in as : Wim Godden 5 messages 59. Approaches individual variables

You are logged in as :

You have messages

Logged in as : Wim Godden 5 messages 60. Approaches JSON

You are logged in as :

You have messages

Logged in as : Wim Godden 5 messages 61. Identifying the user In Nginx configuration : slic_session_cookie Defined by language (or configurable) slic_session_identifier Defined by you Example for PHP : slic_session_cookie PHPSESSID slic_session_identifier UID 62. Identifying the user Nginx + SLIC Cookie : PHPSESSID = jpsidc1po35sq9q3og4f3hi6e2 get UID_jpsidc1po35sq9q3og4f3hi6e2432 63. Retrieving user specific content Nginx + SLIC Cookie : PHPSESSID = jpsidc1po35sq9q3og4f3hi6e2 get userData_432 64. Why Nginx ? Native Memcached support Excellent and superfast subrequest system Including parallel subrequests Handles thousands of connections per worker With minimal memory footprint Integrates with php-fpm Additional features (chroot, slow request log, offline processing, ...) Graceful rolling upgrades 65. What's the result ? 66. Figures 2nd customer : No. of web servers : 72 8 No. of db servers : 15 4 Total : 87 12 (86% reduction !) Last customer : No. of total servers : +/- 1350 Expected reduction : 1350 380 Expected savings : 1.5 Million per year 67. Why is it so much faster ? 68. A real example : vBulletin 69. A real example : vBulletin Post isModerator session variable isAdmin session variable 70. A real example : vBulletin DB Server Load Web Server Load Max Requests/sec (1 = 282) 0 5 10 15 20 25 30 35 Standard install With Memcached Nginx + SCL + memcached 71. Code changes Required Template conversion Push-to-DB Push-to-DB + Push-to-Cache Choice : If user is logged in push updates to cache If user is not logged in warm up cache on login 72. Availability Good news : It will become Open Source It's solid : ESI version stable at 4 customers PHP version (currently for dev, later for docs and learning) Bad news : First customer holds copyrights Total rebuild Open Source release No current projects, so spare time Anyone feel like sponsoring ? Beta : Aug 14 (?) Stable : Oct 14 (?) - on Github 73. So... 74. Questions ? 75. Questions ? 76. Contact Twitter @wimgtr Web http://techblog.wimgodden.be Slides http://www.slideshare.net/wimg E-mail [email protected]