27.01.2015 Views

High Performance Multi-Server Magento in der Cloud

High Performance Multi-Server Magento in der Cloud

High Performance Multi-Server Magento in der Cloud

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Scal<strong>in</strong>g <strong>Magento</strong><br />

for the Global Market<br />

Kian Gould<br />

Foun<strong>der</strong> & CEO


Angry Birds


Angry Birds


Angry Birds


Angry Birds


The Angry Birds <strong>Magento</strong> Universe<br />

DRM <strong>Server</strong><br />

3 Storefronts<br />

(US, EU, ASIA)<br />

Custom<br />

Report<strong>in</strong>g<br />

Banner<br />

Management<br />

Catalog<br />

Rules<br />

Warehouse<br />

Inventory<br />

Splitshipp<strong>in</strong>g<br />

Custom Tax,<br />

Custom Shipp<strong>in</strong>g<br />

…<br />

Mail Service<br />

Giftcards<br />

Fullfillment<br />

Warehouse /<br />

Inventory<br />

Management<br />

Bra<strong>in</strong>tree


<strong>High</strong> Level Requirements<br />

• Innovative, highly-scalable e-commerce systems<br />

• <strong>High</strong> availability<br />

• Unusually high peaks (20x and more)<br />

• <strong>High</strong> Speed<br />

• Backend server <strong>in</strong>dependent from frontend servers<br />

• No down-times, ever.


Solution components


<strong>Cloud</strong> Services<br />

EC2 S3 RDS <strong>Cloud</strong>- Elasti- ELB Route 53<br />

Front<br />

Cache<br />

Amazon AWS Console<br />

Management<br />

Deployments<br />

Auto-Scal<strong>in</strong>g<br />

RightScale Services<br />

Monitor<strong>in</strong>g<br />

Logg<strong>in</strong>g<br />

Script<strong>in</strong>g API


<strong>Magento</strong> <strong>in</strong> the <strong>Cloud</strong>


Share noth<strong>in</strong>g<br />

JS/CSS<br />

Bundles<br />

Code<br />

Assets<br />

Product images,<br />

CMS images,<br />

Scaled images<br />

<strong>Server</strong><br />

Database<br />

Session<br />

Storage<br />

Cache


shop.angrybirds.com<br />

<strong>Cloud</strong>Front<br />

CDN for Assets<br />

S3<br />

Assets Storage<br />

Route 53<br />

DNS-Service<br />

<strong>Cloud</strong>Front<br />

CDN for Sk<strong>in</strong><br />

ELB<br />

Load Balancer<br />

Monitor<strong>in</strong>g<br />

Logg<strong>in</strong>g<br />

EC2<br />

EC2<br />

Varnish Array<br />

EC2<br />

Backend Array<br />

EC2<br />

EC2<br />

Frontend Array<br />

EC2<br />

Worker Array<br />

S3<br />

Deployment<br />

ElastiCache<br />

Cache Backend<br />

RDS<br />

MySQL<br />

DRM<br />

Giftcards<br />

Mail<br />

Bra<strong>in</strong>tree


shop.angrybirds.com<br />

Route 53<br />

DNS-Service<br />

ELB<br />

Load Balancer<br />

Deployment X<br />

EC2<br />

EC2<br />

Varnish Array<br />

EC2<br />

Backend Array<br />

EC2<br />

EC2<br />

Frontend Array<br />

EC2<br />

Worker Array<br />

S3<br />

Deployment<br />

RDS<br />

MySQL


shop.angrybirds.com<br />

Route 53<br />

DNS-Service<br />

Direct Access<br />

through<br />

Local Host entry<br />

ELB<br />

Load Balancer<br />

Deployment X+1<br />

Release Y<br />

EC2<br />

EC2<br />

Varnish Array<br />

Cache<br />

warm<strong>in</strong>g<br />

EC2<br />

EC2<br />

Backend Array<br />

EC2<br />

EC2<br />

Frontend Array<br />

EC2<br />

Worker Array<br />

S3<br />

Deployment<br />

RDS<br />

MySQL


Deployment / Rollback<br />

shop.angrybirds.com<br />

Route 53<br />

DNS-Service<br />

ELB<br />

Load Balancer<br />

ELB<br />

Load Balancer<br />

Deployment X<br />

Deployment X+1<br />

Release Y<br />

Varnish Array<br />

EC2<br />

EC2<br />

Frontend Array<br />

EC2<br />

Worker Array<br />

EC2<br />

EC2<br />

Backend Array<br />

EC2<br />

EC2


Downtime dur<strong>in</strong>g the deployment:


All Basket Content,<br />

active Log<strong>in</strong>s and Sessions<br />

are carried through each<br />

Deployment / Rollback


<strong>Magento</strong>, faster!


Areas of optimization<br />

<strong>Magento</strong> Frontend Cach<strong>in</strong>g


Frontend-Optimization<br />

JavaScript / CSS<br />

• Bundl<strong>in</strong>g (<strong>Magento</strong>)<br />

• M<strong>in</strong>ify<strong>in</strong>g (with YUI Compressor)<br />

• Gzip-Compression (Apache)<br />

• Timestamp <strong>in</strong> filename<br />

• Send Cache-Hea<strong>der</strong><br />

Aoe_JsCssTstamp<br />

CDN (<strong>Cloud</strong>front)<br />

• Product images (+ scaled versions), CMS Images etc.,...<br />

• Sk<strong>in</strong>s<br />

• JS/CSS


<strong>Magento</strong>-Optimizations<br />

Reduce Logg<strong>in</strong>g as much as possible<br />

Deactivate non-cacheable features wherever possible<br />

Cach<strong>in</strong>g<br />

Aoe_AsyncCache<br />

• Asynchronous Cache Clear<strong>in</strong>g Queue<br />

• Delete old Cache-entries<br />

Aoe_CacheCleaner<br />

Cookie Storage for Username and Basket content<br />

Ajax-Basket<br />

and... Profil<strong>in</strong>g, Profil<strong>in</strong>g, Profil<strong>in</strong>g,…<br />

(xdebug + kcachegr<strong>in</strong>d, Newrelic, xhprof)


Cach<strong>in</strong>g<br />

95% of all hits<br />

are cacheable!<br />

5% dynamic<br />

content<br />

Homepage<br />

Categories<br />

Products<br />

CMS<br />

Basket<br />

Checkout<br />

Profile


Cach<strong>in</strong>g<br />

Varnish<br />

<strong>Magento</strong><br />

Reverse Proxy


Solutions<br />

Aoe_Static<br />

Magneto_Varnish<br />

Cach<strong>in</strong>g +<br />

Purg<strong>in</strong>g<br />

Handl<strong>in</strong>g of<br />

dynamic Content


Lessons learned<br />

• 404s are very expensive<br />

=> cache or redirect<br />

• <strong>Cloud</strong>front with S3 Backend<br />

doesn’t support gzip<br />

=> deploy time bundel<strong>in</strong>g/compression<br />

• Don’t run reports on live database!<br />

• You can’t plan for everyth<strong>in</strong>g<br />

=> but you can be ready to solve anyth<strong>in</strong>g quickly. How<br />

=> cont<strong>in</strong>uous deployment


Cont<strong>in</strong>uous Integration<br />

und Deployment


Don’t be afraid of<br />

deploy<strong>in</strong>g to Live!


<strong>Magento</strong> Installationpackage<br />

Files*<br />

‣htdocs [<strong>Magento</strong> Source]<br />

‣.modman [Custom Packages]<br />

SVN<br />

GIT<br />

Installer<br />

Files<br />

‣media<br />

Database<br />

tables<br />

System-<br />

storage<br />

ChangeLog<br />

Sett<strong>in</strong>gs<br />

‣URLs<br />

‣DB-Parameters<br />

‣…<br />

Sett<strong>in</strong>gs


Deployment Pipel<strong>in</strong>e<br />

Build<br />

Installation on<br />

„Latest“<br />

System<br />

Unit-Tests<br />

Acceptance<br />

Tests<br />

<strong>Performance</strong><br />

Tests<br />

PHPUnit


Deployment Pipel<strong>in</strong>e<br />

Installation on<br />

<strong>Cloud</strong><br />

Integration<br />

<strong>Cloud</strong><br />

Deployment<br />

Copy to S3<br />

Deployment<br />

Tests<br />

Deployment<br />

System<br />

Stag<strong>in</strong>g<br />

AOE + Rovio<br />

Production


Launch!<br />

USA wakes up<br />

Space game<br />

Launch<br />

Array scales up<br />

Deployment of<br />

new Release


In real life…


visitors/day


(real) concurrent users!


or<strong>der</strong>s per second at peak!


@aoemedia<br />

Thank You!<br />

AOE media Inc.<br />

251 Rhode Island Street<br />

San Francisco, CA 94103<br />

USA<br />

Tel.: +1 415 230-0690<br />

Fax: +1 415 230-0699<br />

www.aoemedia.com<br />

sales@aoemedia.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!