Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
Varnish Cache 
and its usage in the real world 
Ivan Chepurnyi 
CTO 
Interactiv4
About me 
Ivan Chepurnyi 
Meet Magento 
• Technical Consultant, Owner at EcomDev B.V. 
• Started as one of the first five ...
Varnish 
is not a cache backend 
Ivan Chepurnyi Meet Magento
Varnish 
is a frontend caching proxy 
Ivan Chepurnyi Meet Magento
Simple Workflow 
Ivan Chepurnyi 
Meet Magento 
First call to a page
Simple Workflow 
Ivan Chepurnyi 
Meet Magento 
Subsequent requests
How Varnish Works 
hash pipe 
fetch 
Ivan Chepurnyi 
Meet Magento 
recv 
hit miss pass 
deliver 
• recv – request is recei...
What can we do with it? 
• Cache static pages (Homepage, CMS, Contacts, etc) 
Ivan Chepurnyi 
Meet Magento 
• Cache catalo...
Is it possible to clear Varnish 
cache based on product, category, 
store, etc? 
YES!!! 
Ivan Chepurnyi Meet Magento
The Secret is in 
Cache Object structure 
Ivan Chepurnyi Meet Magento
Cached Object in Varnish 
Ivan Chepurnyi 
Meet Magento 
Cached Object 
Response Headers 
Response Body 
Cache Metadata 
Ca...
We just going to supply object ID with 
its type in response headers, so it later 
on can be used to flush pages 
containi...
But is it possible to make cache lifetime 
dynamic per product, category, etc? 
YES!!! 
Ivan Chepurnyi Meet Magento
You can supply a response header, 
that contains a TTL of the page. 
Ivan Chepurnyi Meet Magento
So what should be done to implement 
Varnish in Magento with all the 
benefits? 
Ivan Chepurnyi Meet Magento
Varnish in Magento 
• Collect current page objects, that are shown on the page. 
Ivan Chepurnyi 
Meet Magento 
Also add th...
But I have good news: 
I alredy developed a module that gives you 
a solid foundation for using Varnish in your 
project! ...
EcomDev_Varnish 
Ivan Chepurnyi 
Meet Magento 
Download URL: http://bit.ly/ecomdev_varnish 
Requires: 
• Varnish 3.0 
• Mi...
Before you start using it… 
Ivan Chepurnyi 
Meet Magento 
• Make a list of dynamic blocks in your project: 
– Shopping Car...
Making an element dynamic on varnish 
cached page 
Ivan Chepurnyi Meet Magento
Code Sample Dynamic Block 
Layout File 
Ivan Chepurnyi 
Meet Magento 
<default_varnish> 
<reference name=”parentBlock”> 
<...
Available Dynamic Cookies 
• quote_checksum – checksum of the current quote contents 
• customer_checksum – checksum based...
How does it work? 
• Your original block gets wrapped by a custom div with some 
Ivan Chepurnyi 
Meet Magento 
JS code 
• ...
Adding custom TTL for a page 
Ivan Chepurnyi Meet Magento
Code Sample Custom TTL 
Code Block 
Ivan Chepurnyi 
Meet Magento 
// Somewhere in your code you just simply call it 
// Va...
Making custom page cacheable 
Ivan Chepurnyi Meet Magento
Code Sample Custom Page 
config.xml 
Ivan Chepurnyi 
Meet Magento 
<config> 
<varnish> 
<pages> 
<layout_handle_name 
tran...
Varnish vs Full Page Cache 
Ivan Chepurnyi 
Meet Magento 
Varnish 
• Avg. time to first byte 30ms 
• Dedicated software 
•...
But why do I need to use 
EcomDev_Varnish? 
Ivan Chepurnyi Meet Magento
EcomDev_Varnish vs the others 
• Cache lifetime specified on Magento code level, without 
Ivan Chepurnyi 
Meet Magento 
ch...
The choice is up to you! 
Ivan Chepurnyi Meet Magento
We are hiring!!! Join Us 
join@interactiv4.com 
Ivan Chepurnyi Meet Magento
Thank You! 
Ivan Chepurnyi Meet Magento
Questions? 
Email: ivan@ecomdev.org 
Website: http://www.ecomdev.org 
LinkedIn: http://nl.linkedin.com/in/ivanchepurnyi 
T...
Nächste SlideShare
Wird geladen in …5
×

Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the real world

464 Aufrufe

Veröffentlicht am

Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the real world

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Иван Чепурный - Meet Magento Ukraine - Varnish Cache and its usage in the real world

  1. 1. Varnish Cache and its usage in the real world Ivan Chepurnyi CTO Interactiv4
  2. 2. About me Ivan Chepurnyi Meet Magento • Technical Consultant, Owner at EcomDev B.V. • Started as one of the first five developers in original Magento core team • Magento Developer Coach in Europe • Main areas of my expertise: – System Architecture – Performance Optimization – Test Driven Development – Complex Customizations
  3. 3. Varnish is not a cache backend Ivan Chepurnyi Meet Magento
  4. 4. Varnish is a frontend caching proxy Ivan Chepurnyi Meet Magento
  5. 5. Simple Workflow Ivan Chepurnyi Meet Magento First call to a page
  6. 6. Simple Workflow Ivan Chepurnyi Meet Magento Subsequent requests
  7. 7. How Varnish Works hash pipe fetch Ivan Chepurnyi Meet Magento recv hit miss pass deliver • recv – request is received from client • pipe – direct output of backend data (streaming) • hash – request is cacheable, lookup cache entry • pass – request is not cacheable • hit – cache entry is found • miss – cache entry not found • fetch – retrieval of data from backend • deliver – return data to client
  8. 8. What can we do with it? • Cache static pages (Homepage, CMS, Contacts, etc) Ivan Chepurnyi Meet Magento • Cache catalog pages: – Category listings – Product search results – Product view pages • Cache page parts: – CMS Blocks – Header – Footer
  9. 9. Is it possible to clear Varnish cache based on product, category, store, etc? YES!!! Ivan Chepurnyi Meet Magento
  10. 10. The Secret is in Cache Object structure Ivan Chepurnyi Meet Magento
  11. 11. Cached Object in Varnish Ivan Chepurnyi Meet Magento Cached Object Response Headers Response Body Cache Metadata Cache Content
  12. 12. We just going to supply object ID with its type in response headers, so it later on can be used to flush pages containing our object. Ivan Chepurnyi Meet Magento
  13. 13. But is it possible to make cache lifetime dynamic per product, category, etc? YES!!! Ivan Chepurnyi Meet Magento
  14. 14. You can supply a response header, that contains a TTL of the page. Ivan Chepurnyi Meet Magento
  15. 15. So what should be done to implement Varnish in Magento with all the benefits? Ivan Chepurnyi Meet Magento
  16. 16. Varnish in Magento • Collect current page objects, that are shown on the page. Ivan Chepurnyi Meet Magento Also add them into response headers. • Create a connector to a Varnish admin protocol, that will be used for flushing of the page by object ids. • Implement auto-updated AJAX blocks for: – Shopping cart – Wishlist – Customer Account links
  17. 17. But I have good news: I alredy developed a module that gives you a solid foundation for using Varnish in your project! Ivan Chepurnyi Meet Magento
  18. 18. EcomDev_Varnish Ivan Chepurnyi Meet Magento Download URL: http://bit.ly/ecomdev_varnish Requires: • Varnish 3.0 • Minimal changes to your theme Supports: • Flush of cache on update of product, category, cms page, csm block, price rules • Client side cacheable AJAX placeholders (Cart, Wishlist, etc) • Possibility to make a cache based on customer segment • Cache for logged in users
  19. 19. Before you start using it… Ivan Chepurnyi Meet Magento • Make a list of dynamic blocks in your project: – Shopping Cart – Login blocks – Special Promo for Customer • Validate possible visitor segments of your project: – Customer group – Language / Country • Make a list of themes you need to modify
  20. 20. Making an element dynamic on varnish cached page Ivan Chepurnyi Meet Magento
  21. 21. Code Sample Dynamic Block Layout File Ivan Chepurnyi Meet Magento <default_varnish> <reference name=”parentBlock”> <action method="unsetChild”> <block>dynamicBlockAlias</block> </action> <block as="dynamicBlockAlias” name=”dynamicBlockPlaceholder" template="ecomdev/varnish/wrapper/placeholder.phtml" type="core/template"> <action method="append"> <block>dynamicBlock</block> </action> <action method="setBlockName"> <block>dynamicBlock</block> </action> <action method="setCookie"> <cookie>dynamicCookie</cookie> </action> <action method="setWrapperId"> <htmlId>elementId</htmlId> </action> </block> </reference> </default_varnish> • parentBlock – name of the parent block • dynamicBlockAlias – alias of the dynamic block in parent block • dynamicBlockPlaceholder – unique name of your placeholder • dynamicBlock – name of the original dynamic block • dynamicCookie – name of the cookie for dynamic blocks • elementId – HTML ID for the placeholder div, that is going to be used as container
  22. 22. Available Dynamic Cookies • quote_checksum – checksum of the current quote contents • customer_checksum – checksum based on the customer Ivan Chepurnyi Meet Magento identification, if logged in customer gets changed • is_logged_in – boolean flag of the logged in state of the visitor • segment_checksum – checksum of the current customer segment: – customer group id – store view
  23. 23. How does it work? • Your original block gets wrapped by a custom div with some Ivan Chepurnyi Meet Magento JS code • When customer visits a page, JS checks for a cookie value and compares it with latest saved one in local/session storage • If it is different it requests /varnish/ajax/reload for retrieving dynamic content and saves it to local/session storage • If it is the same, it just updates block from local/session storage
  24. 24. Adding custom TTL for a page Ivan Chepurnyi Meet Magento
  25. 25. Code Sample Custom TTL Code Block Ivan Chepurnyi Meet Magento // Somewhere in your code you just simply call it // Varnish module will take the lowest value in array of TTL that were added Mage::helper(‘ecomdev_varnish’) ->addTtl($timeInSeconds);
  26. 26. Making custom page cacheable Ivan Chepurnyi Meet Magento
  27. 27. Code Sample Custom Page config.xml Ivan Chepurnyi Meet Magento <config> <varnish> <pages> <layout_handle_name translate="label" module=”your_module"> <label>Your Page Name</label> </layout_handle_name> </pages> </varnish> <default> <varnish> <pages> <layout_handle_name_time>360</layout_handle_name_ time> </pages> </varnish> </default> </config> • layout_handle_name – full name of the layout handle that should be cacheable • your_module – name of the module used for translation of label • Your Page Name – name of your pages, that will be shown in System Configuration - Varnish Cache • 360 – default cache lifetime of the page
  28. 28. Varnish vs Full Page Cache Ivan Chepurnyi Meet Magento Varnish • Avg. time to first byte 30ms • Dedicated software • Tools to monitor cache usage • Scalable • Requires adaptation of themes for dynamic parts • Possibility to flush group of pages Magento FPC implementation • Avg. time to first byte 300-400ms • Magento code level • N/A • Only as another backend node • Most of the time it is not required • N/A
  29. 29. But why do I need to use EcomDev_Varnish? Ivan Chepurnyi Meet Magento
  30. 30. EcomDev_Varnish vs the others • Cache lifetime specified on Magento code level, without Ivan Chepurnyi Meet Magento changing VCL • By using collectors & processors, it can be easily extended to support additional entities • Client-side cacheable dynamic parts • Cache enabled for all kind of visitors • Saves your money on hardware
  31. 31. The choice is up to you! Ivan Chepurnyi Meet Magento
  32. 32. We are hiring!!! Join Us join@interactiv4.com Ivan Chepurnyi Meet Magento
  33. 33. Thank You! Ivan Chepurnyi Meet Magento
  34. 34. Questions? Email: ivan@ecomdev.org Website: http://www.ecomdev.org LinkedIn: http://nl.linkedin.com/in/ivanchepurnyi Twitter: https://twitter.com/IvanChepurnyi

×