Ich arbeite an einem Composer-Paket für PHP-Apps. Das Ziel besteht darin, einige Daten nach Anforderungen, Warteschlangenaufträgen und anderen ausgeführten Aktionen zu senden. Meine anfängliche (und arbeitende) Idee ist, register_shutdown_function
zu benutzen, um es zu tun. Bei diesem Ansatz gibt es einige Probleme. Erstens erhöht sich dadurch die Antwortzeit der Seite, was bedeutet, dass der Aufwand für die Berechnung der Anforderung und das Senden der Daten über meine API höher ist. Ein weiteres Problem ist, dass lang laufende Prozesse, wie z. B. Warteschlangen-Worker, diese Methode lange Zeit nicht ausführen. Daher können zwischen dem Erstellen der Daten und dem Senden und Verarbeiten massive Datenlücken bestehen.Temporärer Speicher zum Sammeln von Daten vor dem Senden
Mein Gedanke ist, dass ich eine Art temporären Speicher verwenden könnte, um die Daten zu speichern und einen Cronjob zu haben, um es jede Minute zu senden. Das einzige Problem, das ich bei diesem Ansatz sehen kann, ist die Verwaltung der Nebenläufigkeit bei High IO. Da viele Prozesse alle (n) ms in die Datei schreiben, gibt es ein Problem beim Lesen der Datei und beim Entfernen von Zeilen, die bereits gesendet wurden.
Eine weitere Option, die ich verzweifelt vermeiden möchte, ist die Verwendung der Client-Datenbank. Dies könnte möglicherweise Leistungsprobleme verursachen.
Was wäre der bevorzugte Weg, dies zu tun?
Bearbeiten: das Paket ist im Wesentlichen ein Überwachungsagent.
Hier RabbitMQ und dergleichen dieses Problem recht elegant lösen würde. – Pete
Es tut es nicht. Dies ist ein Composer-Paket, das nicht von der Client-Infrastruktur abhängig sein sollte. – Ignas
Hm in Ordnung. Ist es dann eine Anforderung, dass jede Anfrage in dieselbe Datei schreibt? Ist dies nicht der Fall, schreibe jedes in eine eindeutige Datei und bearbeite diese im Batch mit dem Cronjob. Dies sollte Nebenläufigkeitsprobleme verhindern. – Pete