The Devil is in the Details How to Optimize Magento Hosting to Increase Online Sales
Introduction Will Bernstein Executive Vice President, Sales and Marketing
Outline 1. Case study: Zarpo.com solution engineering 2. Load testing results: lab vs. real-world testing 3. Best practices for Magento-optimized development 4. The link between performance and conversion
Case Study: Mystery of the Locked DB Zarpo.com is the first and largest flash sale travel website in Latin America Based in Sa o Paulo Brazil Zarpo s objective is to provide the best online user experience to demanding Latin American travelers Running a highly customized deployment of Magento Enterprise Edition
Case Study: Mystery of the Locked DB Monday, January 13, 2014 Catastrophic Event 12:37 PM: Critical ticket opened with ZeroLag Support Zarpo is badly down 12:48 PM: Initial trouble analysis complete MySQL crash Extremely high volume of queries locked up the DB 1:04 PM: ZeroLag engineer kills queries and restarts SQL site back online 1:22 PM: Queries continue to pound SQL for reasons unknown. ZeroLag staff keeps SQL online
Case Study: Mystery of the Locked DB Monday, January 13, 2014 4:27 PM: Root cause deep dive begins Team is assembled: DBA and senior Magento / Linux engineers
Case Study: Mystery of the Locked DB Monday, January 13, 2014 5:00 PM: DB diagnostics and configuration analysis begins 6:18 PM: Test environment is set up to focus on DB cache under load
Case Study: Mystery of the Locked DB Tuesday, January 14, 2014 8:15 AM: Root cause identified An AJAX call checks a custom cache When a travel deal gets sold or updated the cache is cleared and the next AJAX call kicks off a recache If a cache has not been built by the time next AJAX call happens, another cache rebuild gets launched Zarpo had recently released its mobile application and usage increased 800% causing a massive log jam of cache rebuilds
Case Study: Mystery of the Locked DB Tuesday, January 14, 2014 9:18 AM: Solution engineering begins
Case Study: Mystery of the Locked DB Tuesday, January 14, 2014 Developer briefing: ZeroLag recommends solution Add Ajax code that blocks all rebuilds if a rebuild is already in progress The Ajax call puts up a loading new deals clock for users during cache rebuilds As an added benefit, the clock contributes to the user experience by helping build customer anticipation for deals, consistent with the flash sale business model
Case Study: Mystery of the Locked DB Tuesday, January 14, 2014 Zarpo names the successful solution The McManus Magic Shield
Case Study: Mystery of the Locked DB Skype Room Chat Report from Zarpo [1/24/14, 9:41:45 AM] Alexis Manach: excellent news [1/24/14, 9:41:56 AM] Alexis Manach: the McManus magic shield is on.. [1/24/14, 9:42:09 AM] Alexis Manach: and working beautifully.. [1/24/14, 9:42:43 AM] Alexis Manach: this morning i triggered this big event recache with over 550 concurrent users online and site did not even move a little bit.
About ZeroLag Get the power of 1:1 Magento Platinum Hosting Partner Founded April 1999 Founder, CEO Greg Strelzoff 80 Employees We never throw developers under the bus!
Cameron King Linux Manager 02 Load Testing Results
Purpose To observe Magento performance under varying store sizes, cache configurations, and traffic levels Directly relates to questions we get asked on a weekly basis during the pre-sale process
Lab and store test setup Environment: single load test server Tool: Gatling Method: Blind test (unbiased) Tiers: Single web & DB, Dual web & DB Code: stock Magento EE 1.13, no plugins Test grid: Cache: Memcached, Redis Store sizes: 1K, 100K, 500K products Traffic: 100, 200, 300, 400, 500 concurrent browsers Success rate: 99% to consider valid test
Environment Response Time vs. Traffic www www www db db
Environment Response Time vs. Traffic At 100 concurrent browsers, the smaller environment performed best It depends on where the bottlenecks are! At low levels, CPU is not strained No benefit of extra CPU power from two web servers 50ms overhead due to shared PHP sessions (Memcached) and file system (NFS)
Cache Response Time vs. Traffic Redis Memcached
Lab Load Test Recap Environment sizing is important to performance Stock Magento is fast and scalable when deployed with best practices Memcached and Redis have similar performance profiles when under load This establishes a baseline on which we can compare some real-world sites
Real-World Testing Selected 5 representative Magento sites Tested during off-peak hours Abort testing at >1% failure rate Generate Gatling install script for each site Same testing procedure as Lab tests
Client Response Time vs. Traffic
Client Response Time vs. Traffic www db www Performs worse than the baseline Enabled Enterprise Edition Full Page Cache, but not fully utilized Replaced stock Magento frontend with Expression Engine
Client Response Time vs. Traffic www Performs better than the baseline Enabled a number of custom plugins Using Varnish and third-party plugin
Client Response Time vs. Traffic www www www db Performs better than the baseline Front-end designed for Magento Using Enterprise Edition FPC Using local HTTP Accelerator
Client Response Time vs. Traffic www db www Best scalability of all tested sites Most consistent performance Front-end designed for Magento Using Enterprise Edition FPC Using cloud-based HTTP accelerator
Client Response Time vs. Traffic
Client Response Time vs. Traffic www db Great single-user experience Very poor scalability A large number of complex plugins Significant development issues Multiple developers working on the site File-based Magento fast cache DB-based PHP sessions FPC incompatible with plugins/code CPU intensive site
Real-World Load Test Recap Code quality is the single greatest factor in determining performance of a Magento site Frontend Plugins Custom Code FPC, HTTP accelerators, clustering, and in-memory fast cache are excellent ways to improve scalability
Doug Goldberg Vice President, Magento Solutions 03 Best Practices in Magento Development
Common Bottlenecks Poorly Optimized Frontend Making performance-impacting changes Very large images Hundreds of very small images Uncombined JavaScript/CSS JavaScript/CSS out of order No browser caching Performance-intensive uncached page elements
Best Practices Reduce the number of HTTP requests, limit external requests Base install of Magento has < 40 calls Most Magento sites I have seen: 100+ calls Compress files JavaScript, images, HTML, CSS, etc. Images should not be over 50KB Minify JS Removes unnecessary spaces, tabs, and other selected characters Reduces overall size of the file Combine or merge JS and CSS
Best Practices, cont. Load CSS first, JavaScript last Page appears to be loaded on the user s machine while JavaScript is catching up and loading in the background Add expiration headers for static graphic files (Browser cache) 80% of page load time is downloading scripts, images, and CSS, which normally don t change very often Use CSS sprites Can cut page load time by reducing the amount of HTTP requests your page makes to the server, through the consolidation of your CSS background images
Best Practices, cont. Avoid redirects Site loads a header with a blank page, then loads new page Increases the time it takes to get the user to the page they actually want Use cache very aggressively Including Magento FPC if on Enterprise Edition Use CDN And even multiple zones for parallel downloads
04 A Glimpse into the Future
HipHop Virtual Machine HipHop for PHP: a series of execution engines and improvements created by Facebook Original motivation: save server resources given large PHP codebase of facebook.com As development progressed: realization that HipHop could substantially increase the speed of PHP applications in general Current version open-sourced in late 2011 Known as HHVM (HipHop Virtual Machine)
Case Study Magento and HHVM Car Part Kings Wanted to run HHVM and fpm on the same production site to compare performance How do you do that? Query parameter strings (?h=1)
What does that look like? fpm carpartkings.com/mann-cabin-air-filter-cu-2949-2.html HHVM carpartkings.com/mann-cabin-air-filter-cu-2949-2.html?h=1
How did it perform? fpm page load time = 2.16 seconds HHVM page load time = 1.14 seconds On the first day, conversion increased by 500% over the similar fpm pages Facebook has seen increases in web page generation throughput by factors of up to 6x vs. Zend PHP
Is HHVM ready for primetime? Not quite yet Car Part Kings, ZeroLag and the HHVM consultant got it working But it needed to be restarted 4 to 5 times a day Currently deactivated HHVM consultant working on a solution to eliminate crashes
Aaron Koch Vice President, Direct Sales 05 The Link Between Performance and Conversion
How performance impacts your business Why is performance critical? Studies show users are more likely to convert on a faster site Slow sites subconsciously erode user confidence User Experience is everything and there are two components: Visible user experience - look and feel of the site along with information architecture Invisible user experience - the passage of time itself Front-end innovation combined with back-end performance optimization delivers the best User Experience possible
How performance impacts your business Magento performance can set your revenue on fire
How performance impacts your business But slowing down suddenly can cost you dearly!
How performance impacts your business Consciously or not, visitors expect pages to load in two seconds or less A one-second delay reduces conversions by 7%* Even seemingly tolerable delays can add up to substantial lost revenue For example, a site which sells $100,000 per day can lose as much as $2.5 million annually for every extra second of page load delay* Small changes in site speed can have a huge impact on e-commerce sales *According to research conducted by Akamai and Gomez Advisors (now Compuware)
Relationship of load time and bounce rate Lost Opportunity
Evaluating your site Use free tools to analyze your Magento sites Knowing is half the battle WebPagetest (webpagetest.org) TTFB, image compression, caching, CDN Compare web sites page load times
Evaluating your site Use free tools to analyze your Magento sites Knowing is half the battle Gtmetrix (gtmetrix.com) Breakdown 25+ page speed components Provides performance improvement recommendations Also, Magento-specific recommendations
Evaluating your site Use free tools to analyze your Magento sites Knowing is half the battle YSlow (yslow.org) Waterfall chart shows each call to build the page, with associated load time Open Source; also available as browser plugin for Chrome, Firefox, more
Leave this room with a plan Choose a hosting company that you think will best support your business Implement a multi-layered strategy for optimization and caching Communicate with your hosting company and your solution partner; work together to improve performance Remember that your website is a tool, not a canvas
Thank you! ZeroLag.com 877-ZERO-LAG