SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
6. April 2010
Ein Leben mit und ohne Magento
PHP Usergroup Berlin
6.4.2010
Zalando
Folie 2 von 28
Wer wir sind ...
Daniel Nowak (Rocket Internet)
xing.com/profle/Daniel_Nowak
Senior Software Developer
Davor: Captain Ad, Infopark
Daniel Nowak (Rocket Internet)
xing.com/profle/Daniel_Nowak
Senior Software Developer
Davor: Captain Ad, Infopark
Volker Pilz (Zalando)
xing.com/profle/Volker_Pilz
Senior Software Developer
Davor: VZ Netzwerke Ltd.
Volker Pilz (Zalando)
xing.com/profle/Volker_Pilz
Senior Software Developer
Davor: VZ Netzwerke Ltd.
6.4.2010
Zalando
Folie 3 von 28
Zalando
●
Gegründet im Oktober 2008
●
Sitz in Berlin, Zinnowitzer Straße 1
●
ca. 10.000 verschiedene Artikel
●
ca. 160 Mitarbeiter
●
Davon ca. 23 in der Software-Entwicklung
●
Zalando Shop basierend auf Magento
Community Edition, Zalando Lounge basierend
auf Magento Enterprise Edition
6.4.2010
Zalando
Folie 4 von 28
Grundproblem
6.4.2010
Zalando
Folie 5 von 28
Typical Magento Scaling
●
Zu Beginn meist 1 Server: WS+DBS
auf einer Maschine
●
Dann 1 WS + 1 DBS
●
WS++
●
DBS: Master-Slave Replikation
●
Event. Server für: Memcache,
Static, Squid, Mail, Administration
6.4.2010
Zalando
Folie 6 von 28
Aktuelles Zalando Setup
●
14 Webserver
●
1 DB-Master + 7 DB-Slaves
●
4 Memcache Server
●
2 Service Server
●
3 Squid Server
●
2 Solr/Lucene Server
●
2 Admin Server
∑ 35 Server
6.4.2010
Zalando
Folie 7 von 28
Herausforderung
Scaling from this ...
… to this
6.4.2010
Zalando
Folie 8 von 28
Grundlegendes über Magento
●
Entwickelt von Varien Inc. (L.A.)
●
Version 1.0 vom 31.3.2008
●
Aktuell: Version 1.4.x (seit Februar 2010)
●
Best New Open Source Project 2008
●
magentocommerce.com
●
Ca. 1.500 Extensions auf Magento Connect
6.4.2010
Zalando
Folie 9 von 28
Vorteile von Magento
●
Aktuelle State-of-the-art Features
●
Open Source Software
●
Starke Community - CAB (Community Advisory
Board), Meet Magento, Foren usw.
●
Mächtiges Backend
●
Flexibilität & Erweiterbarkeit
●
Extensions mit Magento Connect
●
Zend Framework
6.4.2010
Zalando
Folie 10 von 28
Nachteile von Magento
●
Keine UnitTests (auch nicht bei wichtigen
Komponenten)
●
Schlechte Dokumentation (dementsprechend
fache Lernkurve für Neueinsteiger)
●
Hardwarehungrig und teilweise schlechte
Performance
●
Teure Enterprise-Version mit nützlichen
Features
6.4.2010
Zalando
Folie 11 von 28
Magento Performance
●
EAV (Entity-Attribute-Value) Prinzip ist langsam
=> Gegenmaßnahme: Flat Tables
●
Exzessive Instanziierung von Objekten
●
Teilweise verworrene Programmabläufe und viel
„Magic“
●
Vor allem bei Admin-Operationen wird lesend
auf den Master zugegriffen
●
Filterung/Suche generiert komplexe Queries
6.4.2010
Zalando
Folie 12 von 28
Projekt: Booster
●
Ziel: Schnelle Antwortzeiten bei gleichzeitiger
Reduzierung der Last auf den Web- und
Datenbank-Servern
●
Umsetzungszeit Phase 1 (ohne Volltext-Suche):
2 Wochen
●
Umsetzungszeit Phase 2 (mit Volltext-Suche):
1 Woche
●
4 Software-Entwickler
6.4.2010
Zalando
Folie 13 von 28
6.4.2010
Zalando
Folie 14 von 28
Cache Marker
●
Post-Processing
mit Markern
●
preg_replace_call
back
●
Datenbasis:
Session, Cookies
usw.
6.4.2010
Zalando
Folie 15 von 28
Warum Solr/Lucene?
●
Performanz
●
Facetten-Suche
●
Sprachunabhängigkeit
●
Business-erprobt in großen Szenarien
●
Fähigkeit zur Replikation / Skalierbarkeit
●
OpenSource
6.4.2010
Zalando
Folie 16 von 28
Herausforderungen
1.Import der Daten
2.Anbindung an PHP
3.Loadbalancing / Failover
4.Zeitnahe Updates
5.Facetten
6.Volltext-Suche
6.4.2010
Zalando
Folie 17 von 28
1. Import der Daten
●
Daten-Chaos in Magento
●
Sortierung
●
Produktanzeige
●
Redundante und fehlerhafte Daten
●
Lösung: Verwendung des magento-eigenen
Flat-Table-Cache
6.4.2010
Zalando
Folie 18 von 28
2. Anbindung an PHP
●
solr-php-client
http://code.google.com/p/solr-php-client/
●
Eigener Service-Wrapper
●
Alternative:
PECL-Extension
http://pecl.php.net/package/solr
●
JSON als Austauschformat (nicht XML oder
serialisierte PHP-Objekte)
6.4.2010
Zalando
Folie 19 von 28
3. Loadbalancing / Failover
●
2 Solr-Server (1x Master, 1x Slave)
●
Replikation (20 sec)
●
Failover und Loadbalancing übernimmt PHP-
Client
●
Tipp 1: Schema sollte von Anfang an mit
repliziert werden
●
Tipp 2: rand-Funktion durch mt_rand ersetzen
im Balancer
6.4.2010
Zalando
Folie 20 von 28
4. Zeitnahe Updates
●
Minütliche inkrementelle Updates
●
Relevant für Warenbestand
●
Events von Magento lösen Eintrag in Update-
Queue aus
●
Stündlicher Import der Gesamtdaten
●
Solr schreibt beim Update den kompletten
Eintrag für ein Produkt neu
6.4.2010
Zalando
Folie 21 von 28
5. Facetten
●
Solr-Standard-Feature
●
Super-performant
● … &facet=true&facet.field=color
6.4.2010
Zalando
Folie 22 von 28
6. Volltext-Suche
●
Suggestions
●
Gewichtung der einzelnen Felder zueinander
(Farbe, Saison, Name, Beschreibung, …)
●
Vertipper ( „Marc o'Polo“)
●
Sortierung der Suchergebnisse
6.4.2010
Zalando
Folie 23 von 28
Solr bei Zalando
●
ca. 16 MB Indexgröße zu 15-16 GB Magento-
Datenbank
●
ca. 10.000 Produkte
●
17 Felder
●
8 Facetten
●
8 Felder für Freitext-Suche
●
Index-Aufbau: < 4 sec
●
Durchschnittliche Antwortzeit: 20 ms
6.4.2010
Zalando
Folie 24 von 28
Performance: Grundlagen
●
Durchführung verschiedenster Last-Tests
●
Volltext-Suche
●
Feld-Suche
●
Mit / ohne Filter, Sortierung usw.
●
Test-Tool: JMeter
http://jakarta.apache.org/jmeter
●
Setup: 1 DB-Server, 1 Web-Server, 1 Solr-
Server, 1 Last-Test-Server
6.4.2010
Zalando
Folie 25 von 28
Performance: Ergebnis
●
Limitierender Faktor: Web-Server
●
ca. 120 req/s
●
Antwortzeiten unter 150 ms bei Feld-Suchen
●
Unter 300 ms bei Volltext-Suchen
●
Last auf dem Solr-Server: 1 CPU-Kern
ausgelastet (von 16 Kernen)
●
Ergebnis: Verhältnis Web-Server : Solr-Server in
etwa 16:1
6.4.2010
Zalando
Folie 26 von 28
Performance Optimierungen
●
Magento interner Cache (Konfguration, Layout,
CMS-Blöcke usw.)
●
MySQL Query Cache
==================================
●
loadCached-Methode bei Produkten (relevant
z.B. für Warenkorb, Checkout)
●
Zalando Frontend Cache
●
Zalando Booster
6.4.2010
Zalando
Folie 27 von 28
Ergebnisse
●
Reduzierung der Db-Server-Last auf ca. 5%
●
Reduzierung der Webserver-Last um ca. 50%
●
Lastspitzen können besser abgefangen werden
●
Flexiblere Möglichkeiten bei Suche/Filterung
●
Aber: höher Aufwand bei Layout-Änderungen,
neuen Produkt-Attributen, Such-Filtern, neuen
oder veränderten Kategorien usw.
6.4.2010
Zalando
Folie 28 von 28
Danke
Q & A
Bei weiteren Fragen gerne per Mail an:
volker.pilz@zalando.de oder
daniel.nowak@rocket-internet.de

Weitere ähnliche Inhalte

Andere mochten auch

Accountability - A evolução da responsabilidade pessoal [Palestra Papo de Con...
Accountability - A evolução da responsabilidade pessoal [Palestra Papo de Con...Accountability - A evolução da responsabilidade pessoal [Palestra Papo de Con...
Accountability - A evolução da responsabilidade pessoal [Palestra Papo de Con...Papo de Consultor
 
сучасний урок (досвід Фіалко Р.В.)
сучасний урок (досвід Фіалко Р.В.)сучасний урок (досвід Фіалко Р.В.)
сучасний урок (досвід Фіалко Р.В.)Рая Матерецька
 
Charla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScriptCharla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScriptRicardo Pallás Román
 
Aprende a medir tu ecommerce con GTM
Aprende a medir tu ecommerce con GTMAprende a medir tu ecommerce con GTM
Aprende a medir tu ecommerce con GTMCarlos Rabadán
 
Proposta de Consultoria
Proposta de ConsultoriaProposta de Consultoria
Proposta de ConsultoriaTR Consulting
 
The greatest vision of the bible dan 8
The greatest vision  of the bible     dan 8The greatest vision  of the bible     dan 8
The greatest vision of the bible dan 8Nick Pellicciotta
 

Andere mochten auch (10)

Accountability - A evolução da responsabilidade pessoal [Palestra Papo de Con...
Accountability - A evolução da responsabilidade pessoal [Palestra Papo de Con...Accountability - A evolução da responsabilidade pessoal [Palestra Papo de Con...
Accountability - A evolução da responsabilidade pessoal [Palestra Papo de Con...
 
сучасний урок (досвід Фіалко Р.В.)
сучасний урок (досвід Фіалко Р.В.)сучасний урок (досвід Фіалко Р.В.)
сучасний урок (досвід Фіалко Р.В.)
 
родинне дерево
родинне деревородинне дерево
родинне дерево
 
Наступність іі іі ступеня
Наступність іі іі ступеняНаступність іі іі ступеня
Наступність іі іі ступеня
 
Charla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScriptCharla congreso web introducción programación funcional en JavaScript
Charla congreso web introducción programación funcional en JavaScript
 
Aprende a medir tu ecommerce con GTM
Aprende a medir tu ecommerce con GTMAprende a medir tu ecommerce con GTM
Aprende a medir tu ecommerce con GTM
 
Proposta de Consultoria
Proposta de ConsultoriaProposta de Consultoria
Proposta de Consultoria
 
The greatest vision of the bible dan 8
The greatest vision  of the bible     dan 8The greatest vision  of the bible     dan 8
The greatest vision of the bible dan 8
 
11 god s (1)
 11 god s (1) 11 god s (1)
11 god s (1)
 
8 law make simple
8 law make simple8 law make simple
8 law make simple
 

Ähnlich wie PHP Usergroup Berlin: Zalando - Ein Leben mit und ohne Magento (2010)

Softwaremonitoring mit prometheus
Softwaremonitoring mit prometheusSoftwaremonitoring mit prometheus
Softwaremonitoring mit prometheusGeorg Öttl
 
TechDays 2016 - Der DevOps Kreislauf – Moderne Source Code Verwaltung und Pac...
TechDays 2016 - Der DevOps Kreislauf – Moderne Source Code Verwaltung und Pac...TechDays 2016 - Der DevOps Kreislauf – Moderne Source Code Verwaltung und Pac...
TechDays 2016 - Der DevOps Kreislauf – Moderne Source Code Verwaltung und Pac...Marc Müller
 
Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2panagenda
 
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...Marc Müller
 
Django trifft Flutter
Django trifft FlutterDjango trifft Flutter
Django trifft Flutterroskakori
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit AngularJens Binfet
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 PerformanceUlrich Krause
 
Skalierbare Flutter Architektur - eine Einführung
Skalierbare Flutter Architektur - eine EinführungSkalierbare Flutter Architektur - eine Einführung
Skalierbare Flutter Architektur - eine EinführungMarkus Kühle
 
Techniken in Magento 2
Techniken in Magento 2Techniken in Magento 2
Techniken in Magento 2daniel-rose
 
Fedora – Die Feature-Fabrik
Fedora – Die Feature-FabrikFedora – Die Feature-Fabrik
Fedora – Die Feature-FabrikChristoph Wickert
 
2012_10 SNoUG Building Social Software
2012_10 SNoUG Building Social Software2012_10 SNoUG Building Social Software
2012_10 SNoUG Building Social SoftwareRoman Weber
 
Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Tobias Kraft
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerGregor Biswanger
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...QAware GmbH
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookUlrich Krause
 
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzNode.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzKai Donato
 
2006 | Kollaboratives Wissensmanagement mit Plone
2006 | Kollaboratives Wissensmanagement mit Plone2006 | Kollaboratives Wissensmanagement mit Plone
2006 | Kollaboratives Wissensmanagement mit PloneJutta Horstmann
 
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Digicomp Academy AG
 

Ähnlich wie PHP Usergroup Berlin: Zalando - Ein Leben mit und ohne Magento (2010) (20)

Softwaremonitoring mit prometheus
Softwaremonitoring mit prometheusSoftwaremonitoring mit prometheus
Softwaremonitoring mit prometheus
 
TechDays 2016 - Der DevOps Kreislauf – Moderne Source Code Verwaltung und Pac...
TechDays 2016 - Der DevOps Kreislauf – Moderne Source Code Verwaltung und Pac...TechDays 2016 - Der DevOps Kreislauf – Moderne Source Code Verwaltung und Pac...
TechDays 2016 - Der DevOps Kreislauf – Moderne Source Code Verwaltung und Pac...
 
Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2Zurück in die Zukunft - DNUG 2014 - Track 5.2
Zurück in die Zukunft - DNUG 2014 - Track 5.2
 
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
BASTA Spring 2016 - Moderne Versionsverwaltung mit Git, und der neue Build-Se...
 
Django trifft Flutter
Django trifft FlutterDjango trifft Flutter
Django trifft Flutter
 
Progressive Web Apps mit Angular
Progressive Web Apps mit AngularProgressive Web Apps mit Angular
Progressive Web Apps mit Angular
 
AdminCamp 2011 Performance
AdminCamp 2011 PerformanceAdminCamp 2011 Performance
AdminCamp 2011 Performance
 
Skalierbare Flutter Architektur - eine Einführung
Skalierbare Flutter Architektur - eine EinführungSkalierbare Flutter Architektur - eine Einführung
Skalierbare Flutter Architektur - eine Einführung
 
Techniken in Magento 2
Techniken in Magento 2Techniken in Magento 2
Techniken in Magento 2
 
Dzug plone4
Dzug plone4Dzug plone4
Dzug plone4
 
Fedora – Die Feature-Fabrik
Fedora – Die Feature-FabrikFedora – Die Feature-Fabrik
Fedora – Die Feature-Fabrik
 
2012_10 SNoUG Building Social Software
2012_10 SNoUG Building Social Software2012_10 SNoUG Building Social Software
2012_10 SNoUG Building Social Software
 
Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?Enterprise 2.0 Portale mit Grails. Geht das?
Enterprise 2.0 Portale mit Grails. Geht das?
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
 
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
Make Agile Great - PM-Erfahrungen aus zwei virtuellen internationalen SAFe-Pr...
 
Dnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbookDnug35 ak-dev.071111-cookbook
Dnug35 ak-dev.071111-cookbook
 
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven EinsatzNode.js - Von der Entwicklugn bis zum produktiven Einsatz
Node.js - Von der Entwicklugn bis zum produktiven Einsatz
 
2006 | Kollaboratives Wissensmanagement mit Plone
2006 | Kollaboratives Wissensmanagement mit Plone2006 | Kollaboratives Wissensmanagement mit Plone
2006 | Kollaboratives Wissensmanagement mit Plone
 
Werkzeugkasten
WerkzeugkastenWerkzeugkasten
Werkzeugkasten
 
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
Fachreferat: Visual Studio 2012, Windows 8 und .NET 4.5
 

PHP Usergroup Berlin: Zalando - Ein Leben mit und ohne Magento (2010)

  • 1. 6. April 2010 Ein Leben mit und ohne Magento PHP Usergroup Berlin
  • 2. 6.4.2010 Zalando Folie 2 von 28 Wer wir sind ... Daniel Nowak (Rocket Internet) xing.com/profle/Daniel_Nowak Senior Software Developer Davor: Captain Ad, Infopark Daniel Nowak (Rocket Internet) xing.com/profle/Daniel_Nowak Senior Software Developer Davor: Captain Ad, Infopark Volker Pilz (Zalando) xing.com/profle/Volker_Pilz Senior Software Developer Davor: VZ Netzwerke Ltd. Volker Pilz (Zalando) xing.com/profle/Volker_Pilz Senior Software Developer Davor: VZ Netzwerke Ltd.
  • 3. 6.4.2010 Zalando Folie 3 von 28 Zalando ● Gegründet im Oktober 2008 ● Sitz in Berlin, Zinnowitzer Straße 1 ● ca. 10.000 verschiedene Artikel ● ca. 160 Mitarbeiter ● Davon ca. 23 in der Software-Entwicklung ● Zalando Shop basierend auf Magento Community Edition, Zalando Lounge basierend auf Magento Enterprise Edition
  • 5. 6.4.2010 Zalando Folie 5 von 28 Typical Magento Scaling ● Zu Beginn meist 1 Server: WS+DBS auf einer Maschine ● Dann 1 WS + 1 DBS ● WS++ ● DBS: Master-Slave Replikation ● Event. Server für: Memcache, Static, Squid, Mail, Administration
  • 6. 6.4.2010 Zalando Folie 6 von 28 Aktuelles Zalando Setup ● 14 Webserver ● 1 DB-Master + 7 DB-Slaves ● 4 Memcache Server ● 2 Service Server ● 3 Squid Server ● 2 Solr/Lucene Server ● 2 Admin Server ∑ 35 Server
  • 7. 6.4.2010 Zalando Folie 7 von 28 Herausforderung Scaling from this ... … to this
  • 8. 6.4.2010 Zalando Folie 8 von 28 Grundlegendes über Magento ● Entwickelt von Varien Inc. (L.A.) ● Version 1.0 vom 31.3.2008 ● Aktuell: Version 1.4.x (seit Februar 2010) ● Best New Open Source Project 2008 ● magentocommerce.com ● Ca. 1.500 Extensions auf Magento Connect
  • 9. 6.4.2010 Zalando Folie 9 von 28 Vorteile von Magento ● Aktuelle State-of-the-art Features ● Open Source Software ● Starke Community - CAB (Community Advisory Board), Meet Magento, Foren usw. ● Mächtiges Backend ● Flexibilität & Erweiterbarkeit ● Extensions mit Magento Connect ● Zend Framework
  • 10. 6.4.2010 Zalando Folie 10 von 28 Nachteile von Magento ● Keine UnitTests (auch nicht bei wichtigen Komponenten) ● Schlechte Dokumentation (dementsprechend fache Lernkurve für Neueinsteiger) ● Hardwarehungrig und teilweise schlechte Performance ● Teure Enterprise-Version mit nützlichen Features
  • 11. 6.4.2010 Zalando Folie 11 von 28 Magento Performance ● EAV (Entity-Attribute-Value) Prinzip ist langsam => Gegenmaßnahme: Flat Tables ● Exzessive Instanziierung von Objekten ● Teilweise verworrene Programmabläufe und viel „Magic“ ● Vor allem bei Admin-Operationen wird lesend auf den Master zugegriffen ● Filterung/Suche generiert komplexe Queries
  • 12. 6.4.2010 Zalando Folie 12 von 28 Projekt: Booster ● Ziel: Schnelle Antwortzeiten bei gleichzeitiger Reduzierung der Last auf den Web- und Datenbank-Servern ● Umsetzungszeit Phase 1 (ohne Volltext-Suche): 2 Wochen ● Umsetzungszeit Phase 2 (mit Volltext-Suche): 1 Woche ● 4 Software-Entwickler
  • 14. 6.4.2010 Zalando Folie 14 von 28 Cache Marker ● Post-Processing mit Markern ● preg_replace_call back ● Datenbasis: Session, Cookies usw.
  • 15. 6.4.2010 Zalando Folie 15 von 28 Warum Solr/Lucene? ● Performanz ● Facetten-Suche ● Sprachunabhängigkeit ● Business-erprobt in großen Szenarien ● Fähigkeit zur Replikation / Skalierbarkeit ● OpenSource
  • 16. 6.4.2010 Zalando Folie 16 von 28 Herausforderungen 1.Import der Daten 2.Anbindung an PHP 3.Loadbalancing / Failover 4.Zeitnahe Updates 5.Facetten 6.Volltext-Suche
  • 17. 6.4.2010 Zalando Folie 17 von 28 1. Import der Daten ● Daten-Chaos in Magento ● Sortierung ● Produktanzeige ● Redundante und fehlerhafte Daten ● Lösung: Verwendung des magento-eigenen Flat-Table-Cache
  • 18. 6.4.2010 Zalando Folie 18 von 28 2. Anbindung an PHP ● solr-php-client http://code.google.com/p/solr-php-client/ ● Eigener Service-Wrapper ● Alternative: PECL-Extension http://pecl.php.net/package/solr ● JSON als Austauschformat (nicht XML oder serialisierte PHP-Objekte)
  • 19. 6.4.2010 Zalando Folie 19 von 28 3. Loadbalancing / Failover ● 2 Solr-Server (1x Master, 1x Slave) ● Replikation (20 sec) ● Failover und Loadbalancing übernimmt PHP- Client ● Tipp 1: Schema sollte von Anfang an mit repliziert werden ● Tipp 2: rand-Funktion durch mt_rand ersetzen im Balancer
  • 20. 6.4.2010 Zalando Folie 20 von 28 4. Zeitnahe Updates ● Minütliche inkrementelle Updates ● Relevant für Warenbestand ● Events von Magento lösen Eintrag in Update- Queue aus ● Stündlicher Import der Gesamtdaten ● Solr schreibt beim Update den kompletten Eintrag für ein Produkt neu
  • 21. 6.4.2010 Zalando Folie 21 von 28 5. Facetten ● Solr-Standard-Feature ● Super-performant ● … &facet=true&facet.field=color
  • 22. 6.4.2010 Zalando Folie 22 von 28 6. Volltext-Suche ● Suggestions ● Gewichtung der einzelnen Felder zueinander (Farbe, Saison, Name, Beschreibung, …) ● Vertipper ( „Marc o'Polo“) ● Sortierung der Suchergebnisse
  • 23. 6.4.2010 Zalando Folie 23 von 28 Solr bei Zalando ● ca. 16 MB Indexgröße zu 15-16 GB Magento- Datenbank ● ca. 10.000 Produkte ● 17 Felder ● 8 Facetten ● 8 Felder für Freitext-Suche ● Index-Aufbau: < 4 sec ● Durchschnittliche Antwortzeit: 20 ms
  • 24. 6.4.2010 Zalando Folie 24 von 28 Performance: Grundlagen ● Durchführung verschiedenster Last-Tests ● Volltext-Suche ● Feld-Suche ● Mit / ohne Filter, Sortierung usw. ● Test-Tool: JMeter http://jakarta.apache.org/jmeter ● Setup: 1 DB-Server, 1 Web-Server, 1 Solr- Server, 1 Last-Test-Server
  • 25. 6.4.2010 Zalando Folie 25 von 28 Performance: Ergebnis ● Limitierender Faktor: Web-Server ● ca. 120 req/s ● Antwortzeiten unter 150 ms bei Feld-Suchen ● Unter 300 ms bei Volltext-Suchen ● Last auf dem Solr-Server: 1 CPU-Kern ausgelastet (von 16 Kernen) ● Ergebnis: Verhältnis Web-Server : Solr-Server in etwa 16:1
  • 26. 6.4.2010 Zalando Folie 26 von 28 Performance Optimierungen ● Magento interner Cache (Konfguration, Layout, CMS-Blöcke usw.) ● MySQL Query Cache ================================== ● loadCached-Methode bei Produkten (relevant z.B. für Warenkorb, Checkout) ● Zalando Frontend Cache ● Zalando Booster
  • 27. 6.4.2010 Zalando Folie 27 von 28 Ergebnisse ● Reduzierung der Db-Server-Last auf ca. 5% ● Reduzierung der Webserver-Last um ca. 50% ● Lastspitzen können besser abgefangen werden ● Flexiblere Möglichkeiten bei Suche/Filterung ● Aber: höher Aufwand bei Layout-Änderungen, neuen Produkt-Attributen, Such-Filtern, neuen oder veränderten Kategorien usw.
  • 28. 6.4.2010 Zalando Folie 28 von 28 Danke Q & A Bei weiteren Fragen gerne per Mail an: volker.pilz@zalando.de oder daniel.nowak@rocket-internet.de