Beiträge

OXID EE MySQL Master/Slave Setup

oxid-news

Hintergrund

Der OXID eShop unterstützt in der Enterprise Edition (EE) MySQL Master/Slave Datenbank-Setups, was für sog. „Read-/Write-Splitting“ genutzt werden kann. Dadurch ist es möglich, Datenbank-Abfragen auf mehrere Datenbank-Server zu verteilen, um damit im Idealfall an Datenbank-Performance zu gewinnen und Shops gerade zu Lastzeiten schneller zu machen.
Read-/Write-Splitting kann ebenso helfen, das Shop-Frontend performant zu halten, wenn z.B. gerade Massen-Updates über ERP- oder PIM-Schnittstellen im Shop-Backend laufen, welche mit vielen Insert-Statements nicht selten Datenbank-Locks auslösen, die sich dann auch auf das Frontend auswirken können. Im schlimmsten Fall ist der Shop zeitweise nicht mehr aufrufbar, weil gleichzeitig zu den laufenden Insert- und Update-Statements aus einer gelockten Datenbank-Tabelle gelesen werden soll.

Master/Slave Setup in OXID

Im OXID eShop ist die Konfiguration der Master-/Slave-Verteilung sehr einfach, hier genügt es, in der allgemeinen Shop-Konfigurationsdatei „config.inc.php“ die einzelnen Server einzutragen.

Hierzu gibt es zwei Variablen, die gesetzt werden müssen:

$this->aSlaveHosts = array('localhost', '192.168.0.10:3306', '192.168.0.11:3307');
$this->iMasterSlaveBalance = 0;

Im Array „aSlaveHosts“ können beliebig viele IP-Adressen (mit optionalem Port) eingetragen werden. Auch der Master wird hier als erster Wert hinterlegt.
Der zweite Parameter, „iMasterSlaveBalance“ legt fest, wie die Verteilung der Abfragen zwischen Master und Slave ist.
Ein Wert von „0“ bedeutet hier, dass alle Abfragen auf den Slaves stattfinden und auf den Master nur schreibend zugegriffen wird.

Für Shops mit regelmässig laufenden Artikeldaten-Updates über Schnittstellen zu Warenwirtschaftssystemen usw. sollte diese Einstellung verwendet werden, damit sichergestellt ist, dass auch bei Massen-Updates die Lesezugriffe aus dem Shop-Frontend nicht in Mitleidenschaft gezogen werden.

Das Setup der Datenbankserver an sich geht über den Umfang dieses Artikels hinaus, hierzu finden sich z.B. sehr gute Infos unter https://www.thomas-krenn.com/de/wiki/MySQL_Replikation

Tipps und Tricks für das MySQL Master/Slave Setup

Der OXID EE Shop selbst ist bereits sehr gut für die Master-/Slave-Aufteilung optimiert, sobald Slaves konfiguriert sind, hält sich der Shop strikt an die definierte Aufteilung und führt z.B. Lesezugriffe immer auf den Slaves aus.

Für eigene Erweiterungen des Shops sollte man sich hier am OXID Standard orientieren, hier ist es v.a. wichtig, für Lese- oder Schreibzugriffe die richtigen Methoden des OXID Datenbank-Adapters zu verwenden.

Prinzipiell gilt: für Lesezugriffe sollte man immer die „select()“-Methode der „oxDb“-Klasse nutzen, da nur diese wirklich standardmässig dezidiert auf die Slaves zugreift.

$oRs = oxDb::getDb()->select("SELECT * FROM oxarticles WHERE oxartnum = '12345'"); // liest vom Slave

Man kann allerdings als dritten Parameter „false“ übergeben, um dennoch vom Master zu lesen – Standard ist jedoch „true“ und damit „Slave:

public function select($sSql, $aParams = false, $blType = true)

Auch die Methoden „getOne()“, „getArray()“, „getAssoc()“, „getRow()“ und „getAll()“ selektieren standardmässig von den Slaves, können aber ebenfalls per Parameter auf den Master „umgebogen“ werden bei Bedarf.

Nutzt man hingegen die Methoden „execute()“ oder „query()“, geht das SQL-Statement ausnahmslos an den Master-Server!

$oRs = oxDb::getDb()->query("SELECT * FROM oxarticles WHERE oxartnum = '12345'"); // liest vom Master

Problematisch sind bei Master-/Slave-Setups oft SQL-Fehler, welche zu Fehlermeldungen auf Datenbank-Ebene führen. MySQL ist hier meist recht rigoros und beendet die Synchronisation zwischen Master und Slaves. Diese muss dann vom System-Administrator wieder manuell aktiviert werden.

Man sollte das System also erst auf Herz und Nieren testen und die Synchronisation im Testbetrieb beobachten, um zu entscheiden, ob es hier kritische Stellen im Shop gibt und regelmässige SQL-Fehler auftauchen.

Handelt es sich um temporäre, „unwichtigere“ Daten (z.B. Session-Einträge, Captcha-Codes o.ä.), kann man ggf. in Erwägung ziehen, die betroffenen Tabellen aus der Synchronisation herauszunehmen bzw. MySQL-Fehler für diese Tabellen bei der Synchronisation zu ignorieren, siehe z.B. https://dev.mysql.com/doc/refman/5.7/en/replication-options-slave.html#option_mysqld_slave-skip-errors
Ausserdem kann helfen, die Slaves explizit als „read_only“ zu konfigurieren, damit es keine „versehentlichen“ Schreibversuche auf die Slaves gibt.

MySQL Master/Slave in OXID – Fazit

Mit der Option für Master-/Slave-Setups bietet OXID gerade für große Shops mit regelmässigen, umfangreichen Datenänderungen über Drittsysteme einen erheblichen Performance-Hebel.
Weiss man um die technischen Hintergründe des OXID-Datenbankadapters und kennt die möglichen Fehlerquellen auf Seiten der MySQL-Datenbank-Synchronisation, spricht nichts dagegen, dieses Feature im produktiven Einsatz zu nutzen.
Hat man dann noch einen technisch versierten Hoster an seiner Seite, kann eigentlich nichts mehr schiefgehen :)

Hoffentlich hat dieser Artikel dazu beigetragen, die technischen Hintergründe in Bezug auf OXID EE und das Mysql Master-/Slave-Setup zu erhellen!

 

Blog Einträge

shoptimax und Pixelboxx schließen Partnerschaft – Vorstellung des neuen Produkts smxIRIS

Ab sofort arbeiten die Digital Asset Management-Experten der Pixelboxx GmbH und die Experten des Nürnberger E-Commerce-Lösungsanbieters shoptimax GmbH Hand in Hand. Ziel der Zusammenarbeit ist es, die Pflege, Ausgabe und den Abruf von Bildern für Anbieter und Konsumenten im Web effizienter und komfortabler zu gestalten. Dank des innovativen Web Image-Publishing-Produkts smxIRIS können unter anderem Bild-Publikationsprozesse beschleunigt und unterschiedliche Bildschirmgrößen von PCs, Smartphones oder Tablets on-the-fly bedient werden.

Das neue Web Image Publishing Produkt von shoptimax: smxIRIS

Das neue Web Image Publishing Produkt von shoptimax: smxIRIS

Für Anbieter jeglicher Online-Angebote, insbesondere aber von Onlineshops, stellt die Bearbeitung und schnelle Bereitstellung zahlreicher Varianten von (Produkt-)Bildern nicht nur eine finanzielle Herausforderung dar. Oft wirkt sich die Abfrage von Bildern auch auf die Geschwindigkeit des Online-Shops und anderer Webseiten aus. Die User sind mit den Ladezeiten unzufrieden und brechen den Shop- oder Webseitenbesuch ab – dies gilt insbesondere für die immer wichtiger werdende Gruppe der mobilen Nutzer. Dank smxIRIS können nun Bild-Publikationsprozesse deutlich beschleunigt und vereinfacht werden.

Was ist smxIRIS und was kann es?

Mit smxIRIS (smx Intermedia Realtime Image Server) hinterlegen Sie auf einem externen Server einmalig Quell- bzw. Masterbilder, deren Auslieferung auf Ihre Webseite nach von Ihnen vorher festgelegten Regeln in Echtzeit erfolgt. Es ist somit nicht mehr notwendig, all Ihre Bilder vorher aufwändig zu bearbeiten und in verschiedenen Versionen mehrfach abzuspeichern. Auf Basis eines einzigen Ursprungsbildes berechnet smxIRIS automatisch die optimale Auflösung für jede Bildschirmgröße. Ihre visuelle Botschaft und die visuelle Qualität bleiben gleichwertig erhalten. Neben den Brot- und Butterfunktionen Konvertierung und Skalierung, bietet smxIRIS die direkte, regelbasierte Transformation mit einer Vielzahl von Bild-, Text- und Wasserzeichenoperationen an. Dank smxIRIS sparen Sie also Arbeitsaufwand, Geld und beschleunigen die Publikationsprozesse Ihrer Bilder. Letzteres erhöht zudem die Reaktionszeit Ihrer Seite – was unter anderem Google mit einem besseren Ranking Ihrer Seite belohnt.

Erweiterung auf weltweiten, cloudbasierten Zugriff

Sind Ihre Ansprüche international? Auch das ist dank einer möglichen größeren CDN (Content Delivery Network)-Lösung kein Problem. Mehrere Server in einer Cloud liefern Ihre Bilder schnell und in hoher Qualität international aus.

Sie wollen smxIRIS in Aktion erleben?

Damit Sie sich von der Effizienz und Leistungsstärke des Produkts smxIRIS selbst überzeugen können, bietet shoptimax in Kooperation mit Pixeboxx kostenlose Webinare an. Anhand eines Demo-Shop-Systems erklären die Experten von shoptimax und Pixelboxx die Vorteile des dynamischen Web Image-Publishing im Allgemeinen uns zeigen konkrete Anwendungsfälle in Aktion. Wir gehen unter anderem darauf ein, wie Quellbilder on-the-fly skaliert, freigestellt, gelabelt oder mit einem Wasserzeichen versehen werden können und sämtliche Änderungen in Echtzeit und ohne Performanceverluste an ihren Bestimmungsort ausgeliefert werden.

Für die Teilnahme am Webinar stehen zwei Termine zur Auswahl (der ursprünglich am 17. Mai 2017 stattfindende Termin muss leider aufgrund von Krankheit abgesagt werden):

14. Juni 2017, 11.00 Uhr

und

04. Juli 2017, 11.00 Uhr

Sie können sich hier für einen der zwei Webinar-Termine anmelden.

Ausführliche Informationen zu smxIRIS erhalten Sie außerdem auf der smxIRIS-Produkt-Webseite.

Zudem sind ausführliche persönliche Beratungsgespräche während der Pixelboxx Kunden- und Partnertage am 01. und 02. Juni 2017 in Mörfelden (Nahe Frankfurt a. M.) möglich. Weitere Informationen sowie die Möglichkeit zur Anmeldung gibt es hier. Pixelboxx und shoptimax freuen sich auf Ihren Besuch!

Kooperation von Pixelboxx und shoptimax.

Kooperation von Pixelboxx und shoptimax.

Zierfisch oder Wal – lokale Software-Entwicklung mit Docker

Pünktlich zum 4. Geburtstag von Docker möchte ich ein kleines Fazit ziehen, ob und wie sich Docker-Container für die lokale Entwicklung im Agentur-Alltag mit sehr heterogenen Entwicklungs-Systemen (Windows Home / Pro, von 7 bis 10, Mac OS, Linux) der einzelnen Mitarbeiter bewähren können, welche Vorteile, aber auch Schwachstellen und Probleme es ggf. bei der täglichen Arbeit gibt und ob es sich lohnt, auf den blauen Wal zu setzen.

Die Anfänge

Vor knapp zwei Jahren fing ich an, mich erstmals mit Docker auseinanderzusetzen. Damals wie heute ging es dabei zentral darum, mit möglichst wenig Aufwand eine einheitliche, einfach aufzusetzende lokale Entwicklungsumgebung für verschiedene Software-Projekte zu haben, die idealerweise systemunabhängig zur Verfügung stehen sollte.

Lösungen mit MAMP, XAMP, LAMP usw. waren kaum beherrschbar, die Versionen der einzelnen Komponenten (Webserver, Datenbank, PHP-Umgebung, etc.) auf den Systemen der Mitarbeiter wucherten vor sich hin, unterschiedlichste Projekte stellten auch unterschiedlichste Anforderungen (ZendGuard Loader, ioncube Loader, Opcode-Caches, diverse PHP-Versionen, NodeJS, etc. etc.). Oder es wurde gar gemeinsam gleichzeitig auf nur einem Test-System entwickelt, die Mitarbeiter überschrieben sich „fröhlich“ gegenseitig ihre Änderungen. Gab es irgendwo einen Fehler im Code mussten alle warten, bis der Schuldige das Problem behoben hatte und das System wieder lief… kurzum: totale Anarchie :)

Für jedes Projekt aber eigene VMs zu „basteln“ war ebenso zeitaufwändig wie hardware-hungrig… was also tun? Docker schien eine gute Lösung zu sein, mit Docker Toolbox war es auch für Windows und Mac OS verfügbar, es gab vorgefertigte Docker-Images für Apache, PHP, Mysql auf Docker Hub usw.

Allerdings war Docker Compose noch im Entstehen, grafische Tools zur Container-Administration waren Mangelware, einzelne Container wurden also auf der Kommandozeile über „docker run …“ gestartet. Für „richtige“ Entwickler natürlich ok, für Template- und Frontend-Kollegen eher „so naja“ … ;)
Der Einstieg war also eher holprig, erste Container waren der einfacheren Administration halber „all-in-one“, also entgegen der Docker-Prinzipien liefen Apache, mehrere PHP-Versionen über „phpbrew“, Mysql, NodeJs usw. in einem gemeinsamen Container und waren damit eigentlich schon fast ein „VM-Ersatz“.

Weiterlesen

Shopware als eines der ersten Shopsysteme mit dem gestern erschienenen PHP 7 kompatibel

Schöppingen, 04.12.2015 – Gestern ist mit dem Major Release 7.0 die neueste, unter Entwicklern lang erwartete Version der beliebten Skriptsprache PHP erschienen. Shopware ist als eines der ersten Shopsysteme, die auf der Sprache aufbauen, mit PHP 7 kompatibel – und das bereits seit der im September vorgestellten Shopware 5.1. Davon profitieren nicht nur Entwickler, sondern vor allem auch die Nutzer des Shopsystems.

Shopware und PHP7

„Der größte Vorteil der Kompatibilität mit PHP 7 ist die Performance-Steigerung. Unsere Messungen haben ergeben, dass Shopware nun in vielen Bereichen doppelt so schnell ist wie vorher. So wird beispielsweise der Theme Cache unter PHP 7 in nur circa zwei Sekunden erstellt, während dieser Prozess unter der Vorgängerversion PHP 5.6 noch etwa fünf Sekunden dauerte. Bei Tests zu anderen Prozessen ergaben sich immerhin noch Verbesserungen von mindestens 25 bis 30 Prozent“, sagt Stefan Hamann, Vorstand und Leiter der Entwicklung der shopware AG.

In der neuen Version der Skriptsprache stecken laut einschlägiger Meldungen knapp 10.000 Änderungen gegenüber der vor mehr als einem Jahrzehnt herausgebrachten Version PHP 5. Mehrfach war seit dieser Version vergeblich versucht worden, eine Version 6 herauszubringen, die jedoch, um Verwirrungen zu vermeiden, einfach übersprungen worden sei. Nun sei PHP 7 laut Herstellerangaben 14-mal schneller als PHP 5. Außerdem habe man nun eine konsistente 64-Bit-Unterstützung für Windows und eine stark überarbeitete Zend-Engine, um nur einige Verbesserungen zu nennen. Alles in allem sind die Änderungen beim neuen PHP 7 genug, um auf heise.de von „einer neuen Zeitrechnung für die Skriptsprache“ zu sprechen.

Und zwar eine Zeitrechnung, die auch bei Shopware eine große Rolle spielt: „Als einer der Innovationstreiber im deutschen eCommerce ist es uns wichtig, bei der Entwicklung von Shopware immer auf die neuesten Technologien zu setzen. Das gibt unseren Kunden ein großes Maß an Sicherheit und erlaubt uns, das System immer schnell den neuesten Standards anpassen zu können“, begründet Stefan Hamann.