Die Grenzen einer Standardinfrastruktur, die von Mautic empfohlen wird
Wie auf dem Open-Source-Projekt GitHub von Mautic vorgeschlagen, wird empfohlen, eine LAMP-Stack-Infrastruktur zu wählen. Wir haben diese Option verworfen, weil die Performance sehr schnell an ihre Grenzen gestoßen wäre, sobald wir mehr als eine Handvoll von Kunden hätten. Das hätte unseren Dienst unbrauchbar gemacht. Außerdem haben wir bei Webmecanik die Software einiger Unternehmen übernommen, die Mautic Open Source mit einer umfangreichen Kontaktbasis nutzten, beispielsweise weil sie sehr schnell an die von Mautic empfohlene Infrastrukturgrenze gelangt sind.
Ein Ansatz für horizontale Skalierbarkeit
Um dem entgegenzuwirken, haben wir uns für die gemeinsame Nutzung von Ressourcen mehrerer VMs entschieden, damit es keine Grenze für die Leistungsfähigkeit eines Webservers gibt.
Wir haben uns daher für Folgendes entschieden:
- einen Load Balancer einzurichten
- die Performance der bestehenden Datenbanken für unsere Kunden zu steigern, die das Programm standardmäßig nutzen
- eine neue Hochleistungsdatenbank zu installieren, in die wir die Datenbanken unserer anspruchsvollsten Kunden verschoben haben
Heute besteht unsere Infrastruktur aus 6 Applikationsservern, darunter 5 VMs mit hoher Verfügbarkeit und 1 dedizierter Server, 2 Dateiservern (Filern), darunter 1 VM mit hoher Verfügbarkeit und 1 dedizierter Server, unserem Load Balancer sowie unseren zwei Datenbanken. Wir sind nun in der Lage, es ist ganz trivial, einen neuen Applikationsserver zu installieren.
Die Datenbanken hingegen können noch weiter an Leistung zulegen, bevor es notwendig wird, neue zu installieren.
Anders gesagt: Für uns ist es jetzt leicht, bei jedem neuen Kunden horizontal zu skalieren. Und wenn wir eine neue Datenbank installieren müssen, werden wir eine Strategie zur Partitionierung der Datenbanken umsetzen, die es uns ermöglicht, die Daten problemlos auf mehrere Server zu verteilen.
Wir schulen unsere Kunden – sie nutzen die Software immer stärker
Aufgrund der erfolgreichen Nutzung der Software durch unsere Kunden stellte eine weitere Herausforderung, die die Mautic-Software mit sich brachte, die Verteilung der geplanten Aufgaben dar. Denn für jede installierte Instanz ist es erforderlich, mehrere geplante Tasks einzurichten, um das Update der Segmente, Kampagnen sowie den Versand der E-Mails zu ermöglichen.
Je mehr Kunden die Plattform nutzen, desto länger und zahlreicher werden die zu verarbeitenden Aufgaben.
In dieser neuen Infrastruktur konnten wir nicht zulassen, dass jeder Applikationsserver diese Aufgaben parallel ausführt, da dies zu einer Wettbewerbssituation geführt hätte. Wir haben uns daher entschieden, einen der Web-Applikationsserver zur Seite zu legen, um uns auf die geplanten Aufgaben der gesamten Infrastruktur zu konzentrieren. Wir hatten also ein System eingeführt, das die maximale Anzahl geplanter Tasks in der Ausführung begrenzte. Dieses System ermöglichte uns, in normalen Situationen einen qualitativ hochwertigen Service zu gewährleisten und einen reduzierten Service, der verhinderte, dass das System in Phasen mit hoher Aktivität vollständig ausfällt. Dieses System hat uns lange begleitet, war jedoch vom Dimensionieren einer einzigen Maschine abhängig und damit nur von kurzer Dauer.
Wir haben uns an die Arbeit gemacht, um ein neues System zu entwickeln, das es uns ermöglichen würde, diese Aufgaben auf unserer gesamten Infrastruktur zu verteilen. Intern haben wir dieses System so genannt: den Sequencer.
Der Sequencer musste zahlreiche Probleme lösen:
- Wie kann man eine Aufgabe auf die Maschine senden, die am verfügbaren ist?
- Wie verarbeitet man Aufgaben, die in einen Fehlerzustand laufen?
- Und wie verhindert man, dass dieselbe Aufgabe gleichzeitig auf mehreren Maschinen ausgeführt wird?
Der Sequencer wurde kürzlich in unserer Infrastruktur ausgerollt. Dank der positiven Reaktion unserer Infrastruktur können wir nun mehr Instanzen aufnehmen und sogar unsere Performance verbessern.