Dieser Artikel wird von einer unserer Schwester -Sites, Cloudspring, geteilt. Wenn Sie es hilfreich finden, sollten Sie sie unbedingt besuchen!
In diesem Tutorial wird Ihnen angezeigt, wie Sie Amazon DynamoDB als Lagereinrichtung für PHP -Sitzungen verwenden. Diese Methode wird sehr nützlich, wenn Ihre Anwendungen die elastischen Lastausgleichs- und Autoscaling -Dienste nutzen. Sie benötigen das Amazon AWS -Konto für die Verwendung von EC2, Elastic Last Balancer und DynamoDB als Voraussetzung, um entlang des Tutorials zu spielen.
Key Takeaways
- Amazon DynamoDB kann als Lagereinrichtung für PHP -Sitzungen verwendet werden.
Elastic Last Balancer fungiert als Frontend für einen oder viele virtuelle Server und verteilt Anfragen unter ihnen. Durch das AutoScaling kann das System mehr Klone der Webserver starten, wenn ein hoher Verkehr vorhanden ist, und einiges abzubauen, wenn der Verkehr sinkt. -
PHP -Sitzungsdaten sollten außerhalb des virtuellen Servers gespeichert werden. Eine Option besteht darin, Sitzungen in einer Datenbank wie DynamoDB zu speichern, eine leistungsstarke und schnelle NoSQL -Datenbank, die von Amazon verwaltet wird. -
Die Amazondynamodb -Klasse des offiziellen PHP -SDK ist so ausgestattet, sich als Sitzungsmanager zu registrieren. Das AWS SDK für PHP erleichtert Entwicklern, Anwendungen zu erstellen, die die kostengünstige, skalierbare und zuverlässige AWS-Cloud aufnehmen. -
Was ist ein elastischer Lastausgleich
Elastic Last Balancer fungiert als Frontend für einen oder viele Ihrer virtuellen Server. Es akzeptiert Anfragen und verteilt sie auf virtuelle Server. Virtuelle Server können durch Klonen einer Maschinenvorlage (AMI) erstellt werden oder bei Bedarf zerstört werden. Verarbeitungsleistung Wenn Ihre Anwendung variiert werden kann, indem die virtuellen Server dynamisch addiert oder reduziert werden.
und autoscaling?
Wenn sich das Autoscaling dem Spiel anschließt, kann das System auch:
Starten Sie mehr Klone der Webserver, wenn es einen hohen Datenverkehr gibt -
STALLEN EINIGE DER EINIGEN, WENN DER VERFAHREN UNTER VON EINE DEFEFIKATIVE Schwellenwert - fällt
- Beenden Sie ungesunde Instanzen und ersetzen Sie sie bei Bedarf
wie mache ich das?
Kann eine Ihrer Anwendungen in dieser Umgebung funktionieren? Ja, wenn es zwei kritische Anforderungen erfüllt:
- Da virtuelle Server dynamisch erstellt werden, sollten die Server nur den Anwendungscode und keine Daten enthalten. Dies kann mit einem DB -Dienst leicht machbar sind.
- Jeder Benutzersitzstatus sollte außerhalb des virtuellen Servers bestehen bleiben. Dies ist etwas schwieriger, da das PHP -Modul diese Daten standardmäßig in das Dateisystem des CHE -Webservers speichert.
Und das ist das Problem, das wir in dieser ... ähm, Sitzung lösen werden.
Was nicht zu tun: Sticky Sessions
Die Sticky Session ist eine Funktion des elastischen Last -Balancer -Dienstes, der die Sitzung eines Benutzers an eine bestimmte Anwendungsinstanz bindet, sodass alle Anfragen des Benutzers während der Sitzung an denselben virtuellen Server gesendet werden. Das Sitzungs -Cookie kann entweder vom Lastausgleich oder der Anwendung generiert werden. Dies wird jedoch als schlechte Praxis angesehen. Das Ideal wäre, die Anwendung als staatenlos zu entwerfen, aber dies ist nicht immer möglich.
Speichern Sie Ihre Sitzungen in einer Datenbank
Eine weitere Option ist: Speichern Sie unsere Sitzungen in einer Datenbank. Es könnte dieselbe externe SQL -Datenbank sein, die von der Anwendung oder einer Memcache -Instanz oder einer anderen NoSQL -Datenbank verwendet wird. In diesem Fall scheint DynamoDB sehr interessant zu sein, da es sich um eine leistungsstarke und schnelle NoSQL -Datenbank handelt. Sie wird von Amazon selbst verwaltet und ist auch von unseren virtuellen Servern einfach zugänglich. Außerdem ist die Amazondynamodb -Klasse des offiziellen PHP -SDK bereits ausgestattet, sich als Sitzungsmanager zu registrieren. Wenn Sie noch nie von DynamoDB gehört haben, empfehle ich Ihnen, dieses einleitende Video anzusehen.
Die Demo -Anwendung
Ich habe eine einfache Anwendung zusammengestellt, um den gesamten Mechanismus zu testen. Sie können den Quellcode aus unserem GitHub -Repository herunterladen. Wir werden diese Anwendung mit einem elastischen Lastausgleich und mindestens zwei Instanzen ausführen. Wir werden vorerst keine Autoscaling verwenden.
Die Anwendung fordert den Benutzer auf, einen Benutzernamen auszuwählen, der in der aktuellen Sitzung gespeichert ist und als „Login“ fungiert. Wenn in der Sitzung ein Benutzername vorhanden ist, kann der Benutzer eine Art „Profil“ einfügen, im Wesentlichen eine Reihe von Schlüssel-/Wertinformationen wie Name, Nachname, E -Mail usw. (sowohl Schlüssel als auch Wert sind Zeichenfolgen). All diese Logik ist in der Datei index.php enthalten.
Die Sitzung.php
Die Datei enthält eine einfache Sitzungsbibliothek. Mit dieser Bibliothek können wir Sitzungsdaten mit freundlichen Methoden wie $ session-> read ('slow_var') und $ session-> write ('slow_key', 'slow_value') verwalten. Dieses Sitzungsobjekt kann so konfiguriert werden, dass der Standard -PHP -Sitzungsmechanismus (falls wir ein lokaler Testserver sind) oder eine benutzerdefinierte Klasse verwenden. Der erste Schritt unserer Anwendungsdatei ist das Sitzungsstart:
<span>require_once 'lib/session.php';
</span><span>try {
</span> <span>// Engine can be PHP or AmazonDynamoDB
</span> <span>$session = new Session($config['session']['engine'], $config['session']['params']);
</span><span>} catch (Exception $e) {
</span> <span>exit($e->getMessage());
</span><span>} // end try</span>
Der Standard -Motorwert ist PHP, der keine Parameter benötigt. Wenn wir die Engine "Amazondynamodb" auswählen, führt der Sitzungskonstruktor einen zusätzlichen Code aus:
<span>switch ($engine) {
</span><span>case 'AmazonDynamoDB':
</span><span>// Load AWS SDK
</span><span>require_once 'AWSSDKforPHP/sdk.class.php';
</span><span>// Create a list of credential sets that can be used with the SDK.
</span><span>CFCredentials<span>::</span>set($params['credentials']);
</span><span>// Instantiate a DynamoDB client
</span><span>$dynamodb = new AmazonDynamoDB();
</span><span>$dynamodb->set_region($params['region']);
</span><span>// Instantiate, configure, and register the session handler
</span><span>$this->handler = $dynamodb->register_session_handler(array(
</span><span>'table_name' => $params['table_name'],
</span><span>'lifetime' => $params['lifetime'],
</span><span>));
</span><span>break;</span>
Zuerst laden wir das AWS -SDK, das bereits installiert und erreichbar sein muss, und dann werden unsere Anmeldeinformationen in die AWS -Umgebung geladen. Ab diesem Zeitpunkt können wir AWS -Klassen verwenden, sodass eine neue Instanz von Amazondynamodb erstellt und mit der richtigen Region eingerichtet wird, in der sich unsere Tabelle befindet. Schließlich sagen wir unser DynamoDB -Objekt, sich als Sitzungsmanager zu registrieren, das den Namen der Tabelle überholt, und das ist wirklich das, was wir brauchen.
In der Datei config.Php mitteilen wir die Anwendung, welche Engine wir verwenden möchten, auch unsere AWS -Anmeldeinformationen und DynamoDB -Einstellungen werden hier gespeichert. Im Index.php habe ich auch eine kleine Nutzungsfunktion aufgenommen, die, wenn wir nicht auf dem lokalen Server sind, den Namen der Instanz abholt, in der derzeit ausgeführt wird. Dies ist nützlich zu überprüfen, ob die Sitzung auf unseren Servern konsistent gehalten wird.
<span>function getServerName() {
</span> <span>$host = $_SERVER['SERVER_NAME'];
</span> <span>if ('localhost' != $host) {
</span> <span>// Maybe we are on EC2, trying to catch the current instance ID
</span> <span>$ch = curl_init('http://169.254.169.254/latest/meta-data/instance-id');
</span> <span>curl_setopt($ch, CURLOPT_FAILONERROR, true);
</span> <span>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</span> <span>curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
</span> <span>if ($ret = curl_exec($ch)) {
</span> <span>$host .= ' (instance ' . $ret . ')';
</span> <span>} // end if
</span> <span>curl_close($ch);
</span> <span>} // end if
</span> <span>return $host;
</span><span>} // end function</span>
Die Funktion getServerName () verwendet die EC2 -Metadaten -API, um den Namen der Instanz zu finden.
Führen Sie die App auf Ihrer Flotte aus
Um diese Anwendung zu testen, benötigen wir eine Flotte von mindestens zwei Webservern hinter einem Lastausgleich. Der von mir verwendete Server ist eine Ubuntu GNU/Linux -Instanz mit:
- Der Apache -Webserver
- php 5.3 (sowohl Befehlszeile als auch Apache -Modul),
- Das Curl -Programm und die PHP -Erweiterung
- Der Pear -Paket -Manager (erforderlich, um das SDK einfach zu installieren),
- Der AWS SDK für PHP (ich schlage die Installation durch Birne vor).
Wenn Sie wissen, wie man einen AMI baut, können Sie Ihre von Grund auf neu bauen. Sie können aber auch die verwenden, die ich vorbereitet und öffentlich gemacht habe: AMI-4B42443F. Diese Maschine enthält bereits den PHP -Quellcode für die Anwendung und alle anderen Abhängigkeiten. Sobald Sie Ihren AMI bereit haben ... lass uns gehen!
Initialisieren Sie den Sitzungsspeicher
Gehen Sie zu Ihrer AWS -Konsole, wählen Sie den DynamoDB -Service und Ihre Lieblingsregion (meine ist EU West - Irland). Klicken Sie auf die Schaltfläche "Tabelle erstellen".
Geben Sie "test_sesions" als Tabellenname ein und wählen Sie einen String -Primärschlüssel mit dem Namen "ID". Der Schlüsseltyp muss "Hash" sein. Wenn Sie einen anderen Namen auswählen, muss er später in der Datei config.php kopiert werden. Geben Sie "10" sowohl für die Felder Lese- als auch für die Kapazitätseinheiten ein (z. B. wie schnell ist Ihre Tabelle). Dies reicht aus, um zu testen.
Jetzt haben Sie eine NoSQL -Tabelle, in der jede Zeile über ein obligatorisches ID -Feld verfügt, kann jedoch eine variable Anzahl anderer verschiedene Felder von Typ -Zeichenfolge, Nummer, Zeichenfolge oder Zahlensatz haben. Das Session Manager -Objekt verwendet ein Zeichenfolgenfeld mit dem Namen "Daten", um die Variablen der Sitzung und ein Zahlenfeld mit dem Namen "Ablauf" für den Ablaufzeitstempel der Sitzung zu speichern.
Starten und Konfigurieren der Server
Wählen Sie nun den EC2 -Dienst und denselben Bereich aus, den Sie für die DynamoDB -Tabelle ausgewählt haben. Klicken Sie auf die Schaltfläche „Startinstanz“ entweder aus dem Dashboard oder im Abschnitt „Instanzen“. Wählen Sie Ihren benutzerdefinierten AMI oder mit dem klassischen Assistenten auf die Registerkarte „Community AMIS“ und geben Sie „AMI -4B42443F“ ein.
Im nächsten Bildschirm geben Sie für die Anzahl der Instanzen mindestens 2 “ein und wählen Sie Ihren Instanztyp aus, ich habe mich für Micro (T1.Micro) entschieden. Sie können "keine Präferenz" in der Dropdown -Abteilung für die Verfügbarkeitszone hinterlassen, aber in einer Produktionsumgebung ist es besser, wenn die verschiedenen Instanzen zwischen zwei oder mehr Zonen innerhalb derselben Region verteilt sind. Akzeptieren Sie die Standardeinstellungen sowohl für die Konfigurationsplatten "Instanzdetails" als auch für die "Speichergerät" und fahren Sie dann fort. Geben Sie ein oder mehrere optionale Tags ein, wenn Sie möchten. Wählen Sie einen Tastarir oder erstellen Sie einen neuen
und wählen Sie eine Sicherheitsgruppe, die mindestens HTTP auf Port 80 und SSH auf Port 22 ermöglicht.
Überprüfen Sie Ihre Einstellungen und starten Sie die Instanzen. Wenn der Fall der Instanzen "ausgeführt" ist, können sie über SSH konfiguriert werden. Jede Instanz hat einen öffentlichen DNS-Namen ähnlich wie EC2-XXX-xxx-xx-xx.region.compute.amazonaws.com. Sie müssen die Datei config.php in jeder von Ihnen erstellten Instanz bearbeiten. Stellen Sie eine Verbindung zur Instanz mit SSH oder mit einem SFTP -Kunden mit, indem Sie Ihren öffentlichen Schlüssel und den Benutzernamen „Ubuntu“ (wenn Sie mein öffentliches AMI verwendet haben):
$ ssh -i /path/to/key.pem ubuntu@ec2-x-x-x-x.region.compute.amazonaws.com
Ändern Sie das aktuelle Verzeichnis in /var /www, in dem sich die Testanwendung befindet. Bearbeiten Sie die Datei config.php, in der Sie Ihren AWS -Schlüssel und Ihren Geheimnis einfügen. Überprüfen Sie dann, ob Ihre DynamoDB -Tabelleneinstellungen übereinstimmen, Sie müssen die Region sicherlich mit dem entsprechenden Wert bearbeiten, der in dieser Referenz zu finden ist.
Erstellen Sie dann eine leere Datei namens Ping.html in /var /www: Diese Datei wird vom Last -Balancer verwendet, um die Erreichbarkeit jeder Instanz zu testen.
Einrichten des Lastausgleichs
Mit der Datenbank und allen vorhandenen Instanzen können wir jetzt den Frontend Load Balancer einrichten. Wählen Sie im Menü EC2 -Navigation unter "Netzwerk & Sicherheit" "Balancer" und klicken Sie auf die Schaltfläche "Lade Balancer laden".
Wählen Sie einen Namen für den Load Balancer und überprüfen Sie, ob die Listener -Konfiguration dem des Screenshot entspricht, in dem im Grunde genommen angegeben ist: Leiten Sie den gesamten HTTP -Datenverkehr auf Port 80 des Lastausgleichs an HTTP auf Port 80 der Instanzen weiter.
Geben Sie im Gesundheitswesen ein. Geben Sie im Feld Ping Pfad ein und lassen Sie die anderen Einstellungen als Standardeinstellung. Dies bedeutet: Rufen Sie alle 30 Sekunden die Ressource /ping.html -Ressource jeder Instanz an. Wenn die Reaktionszeit länger ist, dann schlägt der Scheck fehl gesund. Der Lastausgleich wird den Verkehr nicht an eine ungesunde Instanz weiterleiten, und wenn Autoscale vorhanden ist, können die ungesunden Instanzen beendet und durch neue frische ersetzt werden.
Mit dem nächsten Bildschirm können Sie auswählen, welche der aktuell ausgeführten Instanzen dem Lastausgleich hinzugefügt werden können. Wählen Sie die beiden zuvor erstellten Instanzen aus und gehen Sie weiter. Überprüfen Sie die endgültige Konfiguration und bestätigen Sie, ob es für Sie in Ordnung ist. Jetzt sollten Sie in der Lage sein, die Details des Load Balancer und den Status aller verbundenen Instanzen anzuzeigen.
Sie können die Anwendung testen, indem Sie den DNS-Namen des Load Balancers (so etwas wie YourName-12345678.region.elb.amazonaws.com) in einen Browser einbeziehen. Sie können auch eine Domäne oder Subdomain (z. B. dynamo.yourdomain.com) konfigurieren, indem Sie in Ihrem DNS -Panel einen CNAME hinzufügen, der der URL der Lastbalancer verweist. Es wird nicht empfohlen, die IP mit einem A -Datensatz zu verwenden, da die IP die Überstunden ändern kann.
Jedes Mal, wenn Sie das Formular einreichen oder die von Ihnen angeforderte Seite aktualisieren können, kann sie durch eine andere Instanz bearbeitet werden. Sie können überprüfen, welche Instanz Sie mit dem Namen des Dienstprogramms GetSerVername () dient.
Zusammenfassung
Und das ist alles vorerst. Wir haben ein wichtiges Thema im AWS -Ökosystem behandelt, aber dies ist nur der Anfang. All dieses Zeug ist vollständig programmierbar, zum Beispiel: Sie können Autoscaling hinzufügen und Ihre Instanzen so konfigurierbar und AWS-Anmeldeinformationen und andere Daten von einem vertrauenswürdigen Ort herunterladen. Oder Sie können die Cloud -Formation verwenden, um eine wiederverwendbare Vorlage für die gesamte Infrastruktur zu erstellen.
Der Ausgangspunkt ist die AWS -Homepage. Und jetzt, wenn Sie das Testen fertig haben, vergessen Sie nicht, alle Ihre Sachen zu beenden, wenn nicht glücklich, Codierung!
Bild über Fotolien
häufig gestellte Fragen (FAQs) auf Amazon DynamoDB und PHP -Sitzungen
Wie kann ich Lastausgleich mit Amazon DynamoDB- und PHP -Sitzungen implementieren? Mit Amazon DynamoDB- und PHP -Sitzungen können Sie dies erreichen, indem Sie den ELB -Service (Elastic Last Balancing) von Amazon verwenden. ELB verteilt den eingehenden Anwendungsverkehr automatisch über mehrere Ziele hinweg wie Amazon EC2 -Instanzen, Container und IP -Adressen. Es kann die unterschiedliche Last Ihres Anwendungsverkehrs in einer einzelnen Verfügbarkeitszone oder über mehrere Verfügbarkeitszonen hinweg verarbeiten. Für PHP -Sitzungen. Es bietet eine schnelle und vorhersehbare Leistung mit nahtloser Skalierbarkeit. Sie können Ihre Tabellen nach oben oder unten skalieren, um den Verkehr ohne Ausfallzeiten oder Leistungsverschlechterung anzupassen. DynamoDB bietet auch integrierte Sicherheits-, Sicherungs- und Wiederherstellungs- und In-Memory-Caching für Anwendungen im Internet. Für PHP erleichtert es Entwicklern, Anwendungen zu erstellen, die die kostengünstige, skalierbare und zuverlässige AWS-Cloud aufnehmen. In der SDK sind die AWS -PHP -Bibliothek und Code -Beispiele enthalten, die zeigen, wie die AWS SDK für PHP verwendet werden, um alle Funktionen zu nutzen, die von AWS -Diensten wie Amazon S3, Amazon EC2 und DynamoDB bereitgestellt werden. Sind einige gemeinsame DynamoDB mit PHP -Code -Beispielen? Dazu gehört das Erstellen einer Tabelle, das Schreiben von Elementen in eine Tabelle, das Lesen von Elementen aus einer Tabelle, das Aktualisieren von Elementen in einer Tabelle und das Löschen von Elementen aus einer Tabelle. Jeder dieser Operationen kann mit dem AWS SDK für Php.
durchgeführt werden
Wo finde ich PHP -Skripte für Amazon Store? Mit diesen Skripten können Sie die Dienste von Amazon in Ihre PHP -Anwendungen integrieren und Funktionen wie Produktsuche und Anzeige, Einkaufswagenverwaltung und Bestellverarbeitung bereitstellen. Ja, es gibt vollständige Beispiele für die Verwendung von DynamoDB mit PHP. Diese Beispiele enthalten typischerweise Code zum Erstellen einer Tabelle, das Schreiben von Elementen in die Tabelle, das Lesen von Elementen aus der Tabelle, das Aktualisieren von Elementen in der Tabelle und das Löschen von Elementen aus der Tabelle. Sie enthalten auch häufig Beispiele für den Umgang mit Fehlern und Ausnahmen. Verwenden von Try-Catch-Blöcken. Der AWS SDK für PHP löst Ausnahmen aus, wenn Operationen ausfällt, und Sie können diese Ausnahmen erfassen, um sie auf eine Weise zu verarbeiten, die zu Ihrer Anwendung passt. Es gibt verschiedene Möglichkeiten, die Leistung mit DynamoDB und PHP zu optimieren. Dazu gehören die Verwendung des vorgesehenen Durchsatzes zur Verwaltung der Kapazität, die Verwendung globaler sekundärer Indizes zur Beschleunigung von Abfragen und die Verwendung von DynamoDB Accelerator (DAX), um in einzeitiges Caching zu liefern.
dynamoDB bietet mehrere Sicherheitsfunktionen zum Schutz Ihrer Daten. Dazu gehören die Verschlüsselung in Ruhe, die Ihre Daten vor dem unbefugten Zugriff auf den zugrunde liegenden Speicher und die Verschlüsselung im Transit schützt, wodurch Ihre Daten zwischen Ihrer Anwendung und Dynamodb geschützt werden. DynamoDB?
DynamoDB bietet integrierte Unterstützung für Datensicherungen und Wiederherstellungen. Sie können jederzeit On-Demand-Backups erstellen und Ihre Tabellendaten bei Bedarf von diesen Sicherungen wiederherstellen. Auf diese Weise können Sie Ihre Daten vor versehentlicher Löschung oder Änderung schützen und Ihre Anwendung auch im Falle eines Fehlers reibungslos verlaufen.
Das obige ist der detaillierte Inhalt vonPHP Master | Amazon DynamoDB: PHP -Sitzungen mit Laderebalancer speichern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!