[TYPO3-german] Caching von Webserviceantworten

Stephan Schuler Stephan.Schuler at netlogix.de
Tue Aug 15 11:35:41 CEST 2017


Hallo Fabian.

So funktioniert das Caching-Framework nicht. Erstens machst Du einen Großteil dessen was das CF für Dich tun soll selbst und zweitens läufst Du Gefahr, irgendwann für eine gewisse Zeit keine Daten zu haben.

https://docs.typo3.org/typo3cms/CoreApiReference/ApiOverview/CachingFramework/FrontendsBackends/Index.html
Du willst primär FrontendInterface::has(), FrontendInterface::get()  und FrontendInterface::remove() aufrufen. Jeweils ist Dein Cache-Content ein Array aus allen Objekten die für ein Plugin relevant sind.

Der Cache im CF hat eine Lifetime. Wenn der Scheduler nicht rechtzeitig läuft – sagen wir, weil der SOAP-Server hängt, PHP in ein Timeout läuft und die Daten eben einfach nicht gespeichert werden – ist der Cache-Inhalt weg und Dein Plugin fliegt auf die Nase. Die einzige Möglichkeit die Du hast: Die Lifetime so hoch zu setzen, dass das nicht passiert. Dann hast Du das Lifetime-Feature ausgehebelt und baust es im Prinzip durch den Scheduler nach.

Der zweite Punkt: Du hast doppelte Daten. Wenn Du zwei Plugins mit unterschiedlicher Konfiguration hast, bekommen Die nach Deiner Vorstellung unterschiedliche Cache-Identifier. Wenn sich die Daten dieser beiden Plugins überschneiden, hast Du die Objekte in beiden Caches unabhängig voneinander. Wenn Du es jetzt durch einen laggy SOAP-Server o.ä. schaffst, dass der Scheduler-Run für das eine Plugin klappt aber der für das zweite abbricht, zeigt Deine Seite vielleicht in den beiden Plugins unterschiedliche Informationen für das gleiche SOAP-Objekt an.

Dann kommt der Flush. Es erfordert sehr viel Disziplin, wirklich nie und unter keinen Umständen ein „Clear all caches“ durchzuführen. Dass der Button aus dem rechten oberen Backend-Bereich verschwunden ist hat da schon sehr geholfen. Trotzdem sehe ich immer noch „Admin-Redakteure“, die jetzt übers Install-Tool „Clear all Caches“ drücken, wenn im Frontend mal was hängt. Bei mir passiert das „Clear all Caches“ immer, wenn ich einen neuen Code-Stand deploye. Je nach Projekt zwischen einmal die Woche und mehrmals täglich. Lässt sich nicht ändern, wenn neuer PHP-Code kommt sind Caches tödlich.
Und was passiert, wenn man „Clear all Caches“ drückt? Natürlich wird das CF geleert. Dein Frontend hat erst mal keine Daten und darf auf den nächsten Scheduler-Run warten, im schlimmsten Fall dauert es dann eine Stunde, bis die Tabellen im Frontend wieder Daten bekommen.

Du möchtest lokale Datenhaltung im CF simulieren. Das CF ist aber keinesfalls für lokale Datenhaltung gedacht. Leg ins CF nur solche Daten, die Du wirklich zu jeder Zeit rekonstruieren kannst. Und gestalte Deinen eigenen PHP-Code so, dass nichts davon abhängt, dass die Daten im CF liegen. Wenn Du willst, bau Dir ein Service-Objekt das Du „ServiceObject::getDataByConfig($config)“ fragst. Dieser Aufruf darf die Daten aus dem CF nehmen wenn sie drin sind, wenn nicht muss er sie vom SOAP-Server holen, ins CF legen und dann zurückgeben. Für den Aufrufer dieser Methode muss vollkommen transparent sein, ob der Service die Daten aus dem Cache hat oder live abgeholt hat. Nur so lässt sich das CF verwenden ohne dass Du früher oder später auf Probleme stößt. Genau das ist dann die Stelle, die das Frontend blockiert, wenn der SOAP-Server lahm ist.

Mein Vorschlag bezieht sich *nicht* auf das CF. Bau ein Extbase Domain Model mit Domain-Objekten, sinnvollem Datenbank-Layout für Dein Model und einem Repository, das Du im Plugin entsprechend Deinen Anforderungen fragen kannst. Der Scheduler füllt die Datenbank asynchron. Ich würde den Scheduler nicht über Extbase sondern über den DataHandler mit der Datenbank reden lassen, aber das ist Implementierungsdetail. Diese Daten siehst Du dann auch im TYPO3 Backend. Wenn Du möchtest, dass Deine Redakteure sie nicht bearbeiten können, verweiger ihnen entsprechende Berechtigungen.

Sicherlich gibt es auch in dieser Ausprägung noch den ein oder anderen Anwendungsfall für das CF, aber bitte ausschließlich im Frontend und nicht, wenn es um die Synchronisation der Daten zwischen SOAP-Request und TYPO3-Datenbank geht.

Beste Grüße,


Stephan Schuler
Web-Entwickler | netlogix Web Solutions

Telefon: +49 (911) 539909 - 0
E-Mail: Stephan.Schuler at netlogix.de
Web: websolutions.netlogix.de



----------------------------
Neu: Wir sind Amazon Web Services Partner. Mehr erfahren:
https://websolutions.netlogix.de/technologie/amazon-web-services-aws
----------------------------




netlogix GmbH & Co. KG
IT-Services | IT-Training | Web Solutions
Neuwieder Straße 10 | 90411 Nürnberg
Telefon: +49 (911) 539909 - 0 | Fax: +49 (911) 539909 - 99
E-Mail: info at netlogix.de | Web: http://www.netlogix.de

netlogix GmbH & Co. KG ist eingetragen am Amtsgericht Nürnberg (HRA 13338)
Persönlich haftende Gesellschafterin: netlogix Verwaltungs GmbH (HRB 20634)
Umsatzsteuer-Identifikationsnummer: DE 233472254
Geschäftsführer: Matthias Schmidt





More information about the TYPO3-german mailing list