PHP Usergroup Berlin
如果无法正常显示,请先停止浏览器的去广告插件。
相关话题:
#zalando
1. PHP Usergroup Berlin
6. April 2010
Ein Leben mit und ohne Magento
2. Wer wir sind ...
Volker Pilz (Zalando) Daniel Nowak (Rocket Internet)
xing.com/profle/Volker_Pilz xing.com/profle/Daniel_Nowak
Senior Software Developer Senior Software Developer
Davor: VZ Netzwerke Ltd. Davor: Captain Ad, Infopark
Zalando
6.4.2010
Folie 2 von 28
3. 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
Zalando
6.4.2010
Folie 3 von 28
4. Grundproblem
Zalando
6.4.2010
Folie 4 von 28
5. 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
Zalando
6.4.2010
Folie 5 von 28
6. 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
Zalando
6.4.2010
Folie 6 von 28
7. Herausforderung
Scaling from this ...
… to this
Zalando
6.4.2010
Folie 7 von 28
8. 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
Zalando
6.4.2010
Folie 8 von 28
9. 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
Zalando
6.4.2010
Folie 9 von 28
10. 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
Zalando
6.4.2010
Folie 10 von 28
11. 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
Zalando
6.4.2010
Folie 11 von 28
12. 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
Zalando
6.4.2010
Folie 12 von 28
13. Zalando
6.4.2010
Folie 13 von 28
14. Cache Marker
●
●
●
Post-Processing
mit Markern
preg_replace_call
back
Datenbasis:
Session, Cookies
usw.
Zalando
6.4.2010
Folie 14 von 28
15. Warum Solr/Lucene?
● Performanz
● Facetten-Suche
● Sprachunabhängigkeit
● Business-erprobt in großen Szenarien
● Fähigkeit zur Replikation / Skalierbarkeit
● OpenSource
Zalando
6.4.2010
Folie 15 von 28
16. Herausforderungen
1.Import der Daten
2.Anbindung an PHP
3.Loadbalancing / Failover
4.Zeitnahe Updates
5.Facetten
6.Volltext-Suche
Zalando
6.4.2010
Folie 16 von 28
17. 1. Import der Daten
●
●
Daten-Chaos in Magento
● Sortierung
● Produktanzeige
● Redundante und fehlerhafte Daten
Lösung: Verwendung des magento-eigenen
Flat-Table-Cache
Zalando
6.4.2010
Folie 17 von 28
18. 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)
Zalando
6.4.2010
Folie 18 von 28
19. 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
Zalando
6.4.2010
Folie 19 von 28
20. 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
Zalando
6.4.2010
Folie 20 von 28
21. 5. Facetten
●
●
●
Solr-Standard-Feature
Super-performant
… &facet=true&facet.field=color
Zalando
6.4.2010
Folie 21 von 28
22. 6. Volltext-Suche
●
●
Suggestions
Gewichtung der einzelnen Felder zueinander
(Farbe, Saison, Name, Beschreibung, …)
● Vertipper ( „Marc o'Polo“)
● Sortierung der Suchergebnisse
Zalando
6.4.2010
Folie 22 von 28
23. 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
Zalando
6.4.2010
Folie 23 von 28
24. 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
Zalando
6.4.2010
Folie 24 von 28
25. 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
Zalando
6.4.2010
Folie 25 von 28
26. 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
Zalando
6.4.2010
Folie 26 von 28
27. 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.
Zalando
6.4.2010
Folie 27 von 28
28. Danke
Q & A
Bei weiteren Fragen gerne per Mail an:
volker.pilz@zalando.de oder
daniel.nowak@rocket-internet.de
Zalando
6.4.2010
Folie 28 von 28