Ich versuche, Heroku für eine PHP-App zu verwenden, die Redis verwendet. Ich habe die verschiedenen Addons für Redis gesehen. Mit Redis To Go zum Beispiel können Sie in Ihrem PHP-Code als URL des Redis-Servers eine Umgebungsvariable $ _ENV ['REDISTOGO_URL'] verwenden.
Die meisten dieser Add-ons haben ihre eigenen Preisschemata, die ich gerne vermeiden würde. Ich bin ein wenig verwirrt darüber, wie Heroku funktioniert. Gibt es eine Möglichkeit, Redis auf meinen eigenen Dynos ohne die Addons zu installieren?
Wie zum Beispiel, haben Sie einen Arbeiter-Dyno, der als Server fungiert, und einen anderen, der als Client fungiert? Wenn möglich, wie würde ich vorgehen:
Installieren und Ausführen des Redis-Servers auf einem Dyno? Ist das genauso? Installation auf einer anderen Unix-Box? Kann ich es einfach installieren und installieren, was ich will?
Lassen Sie sich mit einem Dyno verbinden ein anderer mit einem IP / Port über TCP? Haben die Arbeiterprüfstände ihre eigenen? Referenzierbare IP-Adressen oder benannte URLs, die ich verwenden kann? Kann ich sie irgendwie dynamisch von PHP bekommen?
Der PHP-Code für einen Redis-Client setzt voraus, dass es einen Host und einen Port gibt, mit dem Sie eine Verbindung herstellen können, aber Sie haben keine Ahnung, was es wäre?
%Vor%Das Ausführen von Redis auf einem Dyno ist eine interessante Idee. Sie müssen wahrscheinlich ein Redis Buildpack erstellen, damit Ihre Dynos die Funktion redis herunterladen und ausführen können. Als "redis hat keine Abhängigkeiten außer einem funktionierenden GCC-Compiler und libc" sollte dies technisch möglich sein.
Hier sind jedoch einige Probleme, denen Sie begegnen könnten:
Heroku-Dynos haben keine statische IP-Adresse
Selbst wenn Sie Redis auf einem Prüfstand einrichten und ausführen, ist mir keine Möglichkeit bekannt, diese Prüfpunkt-Instanz zu lokalisieren und sie an Redis-Anforderungen zu senden. Das bedeutet, dass Ihr Redis-Server wahrscheinlich auf dem gleichen Prüfstand wie Ihr Webserver / Ihre Hauptanwendung laufen muss.
Dies auch bedeutet, dass wenn Sie versuchen, Ihre App durch Erstellen weiterer Web-Dynases zu skalieren, Sie auch weitere lokale Redis-Instanzen erstellen. Daten werden nicht zwischen ihnen geteilt. Dies erscheint mir nicht als ein besonders skalierbares Design, aber wenn Ihre App klein genug ist, um nur einen Web-Dyno zu benötigen, kann es funktionieren.
Heroku-Dynas haben ein ephemeres Dateisystem
Standardmäßig schreibt Redis seine RDB-Datei und das AOF-Protokoll auf die Festplatte. Sie müssen diese Daten regelmäßig sichern, damit Sie sie nach dem Neustart Ihres Dynomeys abrufen und wiederherstellen können. Weitere Informationen finden Sie in der Dokumentation zur Persistenz von Redis .
Heroku-Dynas werden oft neu gestartet
Sie müssen Ihren Redis-Server jedes Mal starten können, wenn der Dyno startet und die Daten wiederherstellen.
Heroku Dynos haben 512 MB RAM
Wenn Ihr Redis-Server auf demselben Prüfstand läuft wie Ihr Webserver, subtrahieren Sie den für Ihre Hauptanwendung benötigten Arbeitsspeicher. Wie viel Redis-Speicher benötigen Sie?
Hier sind einige Fragen, die versuchen, Redis Speicherverbrauch zu schätzen und zu verfolgen:
-
Insgesamt: Ich empfehle Ihnen, auf 12 Factor Apps nachzulesen, um ein wenig mehr über die beabsichtigte Anwendung von heroku zu erfahren Modell.
Die kurze Version besteht darin, dass Dynos unabhängige Mitarbeiter sind, die einfach erstellt und verworfen werden können, um den Bedarf zu decken, und dass Dynos auf verschiedene Ressourcen zugreifen, um Daten zu lesen oder zu schreiben und Ihre App zu bedienen. Eine Redis-Instanz ist ein Beispiel für eine Ressource. Wie Sie aus den obigen Punkten sehen können, erhalten Sie mit Hilfe eines Redis-Add-ons etwas, das garantiert statisch, stabil und zugänglich ist.
Lesematerial:
redis hat eine Client-Server-Architektur, die Sie auf einem Rechner (in Ihrem Fall dyno) installieren und von jedem Client aus darauf zugreifen können.
Weitere Hilfe zu Bibliotheken finden Sie hier
oder Sie können diese Redis documentaion durchgehen, die eine einfache Fallstudie zur Implementierung eines Twitter-Klons mit Redis-Anzeigen-Datenbank und PHP