Presentation is loading. Please wait.

Presentation is loading. Please wait.

Varnish Cache and its usage in the real world Ivan Chepurnyi Owner EcomDev BV.

Similar presentations


Presentation on theme: "Varnish Cache and its usage in the real world Ivan Chepurnyi Owner EcomDev BV."— Presentation transcript:

1 Varnish Cache and its usage in the real world Ivan Chepurnyi Owner EcomDev BV

2 Ivan Chepurnyi About me 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 Ivan Chepurnyi Meet Magento Varnish is not a cache backend

4 Ivan Chepurnyi Meet Magento Varnish is a frontend caching proxy

5 Ivan Chepurnyi Simple Workflow Meet Magento First call to a page

6 Ivan Chepurnyi Simple Workflow Meet Magento Subsequent requests

7 Ivan Chepurnyi How Varnish Works Meet Magento recv hit pass miss hash pipe deliver fetch 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 Ivan Chepurnyi What can we do with it? Meet Magento Cache static pages (Homepage, CMS, Contacts, etc) Cache catalog pages: –Category listings –Product search results –Product view pages Cache page parts: –CMS Blocks –Header –Footer

9 Ivan Chepurnyi Meet Magento Is it possible to clear Varnish cache based on product, category, store, etc? YES!!!

10 Ivan Chepurnyi Meet Magento The Secret is in Cache Object structure

11 Ivan Chepurnyi Cached Object in Varnish Meet Magento Cached Object Response Headers Response Body Cache Metadata Cache Content

12 Ivan Chepurnyi Meet Magento 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.

13 Ivan Chepurnyi Meet Magento But is it possible to make cache lifetime dynamic per product, category, etc? YES!!!

14 Ivan Chepurnyi Meet Magento You can supply a response header, that contains a TTL of the page.

15 Ivan Chepurnyi Meet Magento So what should be done to implement Varnish in Magento with all the benefits?

16 Ivan Chepurnyi Varnish in Magento Meet Magento Collect current page objects, that are shown on the page. 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 Ivan Chepurnyi Meet Magento But I have good news: I alredy developed a module that gives you a solid foundation for using Varnish in your project!

18 Ivan Chepurnyi EcomDev_Varnish Meet Magento Download URL: http://bit.ly/ecomdev_varnishhttp://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 Ivan Chepurnyi Before you start using it… 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 Ivan Chepurnyi Meet Magento Making an element dynamic on varnish cached page

21 Ivan Chepurnyi Code Sample Dynamic Block Meet Magento dynamicBlockAlias <block as="dynamicBlockAlias” name=”dynamicBlockPlaceholder" template="ecomdev/varnish/wrapper/placeholder.phtml" type="core/template"> dynamicBlock dynamicBlock dynamicCookie elementId Layout File 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 Ivan Chepurnyi Available Dynamic Cookies Meet Magento quote_checksum – checksum of the current quote contents customer_checksum – checksum based on the customer 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 Ivan Chepurnyi How does it work? Meet Magento Your original block gets wrapped by a custom div with some 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 Ivan Chepurnyi Meet Magento Adding custom TTL for a page

25 Ivan Chepurnyi Code Sample Custom TTL 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); Code Block

26 Ivan Chepurnyi Meet Magento Making custom page cacheable

27 Ivan Chepurnyi Code Sample Custom Page Meet Magento <layout_handle_name translate="label" module=”your_module"> Your Page Name 360 config.xml 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 Ivan Chepurnyi Varnish vs Full Page Cache 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 Ivan Chepurnyi Meet Magento But why do I need to use EcomDev_Varnish?

30 Ivan Chepurnyi EcomDev_Varnish vs the others Meet Magento Cache lifetime specified on Magento code level, without 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 Ivan Chepurnyi Meet Magento The choice is up to you!

32 Ivan Chepurnyi OpenSource Roadmap 2014 Meet Magento 1.Finalize EcomDev_Varnish module and make it open source; 2.EcomDev_PHPUnit refactoring for API based fixtures; Progress: 20% 3.Working on EcomDev_Index module, to provide alternative of standard indexation mechanism in Magento: –Flat Indexers (failover indexation) –UrlRewrites (full refactor of existing module) –Layered Navigation (Sphinx) –Better Search (Sphinx)

33 Ivan Chepurnyi Meet Magento Thank You!

34 Questions? Email: ivan@ecomdev.org Website: http://www.ecomdev.org LinkedIn: http://nl.linkedin.com/in/ivanchepurnyi Twitter: https://twitter.com/IvanChepurnyi


Download ppt "Varnish Cache and its usage in the real world Ivan Chepurnyi Owner EcomDev BV."

Similar presentations


Ads by Google