Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Verwenden des DynamoDB-Sitzungshandlers mit Version 3 AWS SDK for PHP
Der DynamoDB Session Handler ist ein benutzerdefinierter Session-Handler für PHP, der es Entwicklern ermöglicht, Amazon DynamoDB als Sitzungsspeicher zu verwenden. Die Verwendung von DynamoDB als Sitzungsspeicher behebt Probleme, die bei der Sitzungsverarbeitung in einer verteilten Webanwendung auftreten, indem Sitzungen aus dem lokalen Dateisystem an einen gemeinsam genutzten Speicherort verschoben werden. DynamoDB ist schnell, skalierbar, einfach einzurichten und wickelt die Replikation Ihrer Daten automatisch ab.
Der DynamoDB-Sitzungshandler verwendet die session_set_save_handler()
Funktion, um DynamoDB-Operationen in die systemeigenen Sitzungsfunktionen
Weitere Informationen zum DynamoDB-Service finden Sie auf der Amazon DynamoDB DynamoDB-Homepage
Grundlegende Verwendung
Schritt 1: Registrieren Sie den Handler
Zuerst instanziieren und registrieren Sie den Sitzungs-Handler.
use Aws\DynamoDb\SessionHandler; $dynamoDb = new Aws\DynamoDb\DynamoDbClient([ 'region'=>'us-east-1' // Since version 3.277.10 of the SDK, ]); // the 'version' parameter defaults to 'latest'. $sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions' ]); $sessionHandler->register();
Schritt 2. Erstellen Sie eine Tabelle zum Speichern Ihrer Sitzungen
Bevor Sie den Sitzungs-Handler tatsächlich verwenden können, müssen Sie eine Tabelle erstellen, in der die Sitzungen gespeichert werden. Sie können dies im Voraus tun, indem Sie die AWSKonsole für Amazon DynamoDB
Beim Erstellen dieser Tabelle wählen Sie „id“ als Name des Primärschlüssels. Außerdem wird empfohlen, ein Time to Live-Attribut einzurichten, und zwar anhand des Attributs „expires“. So profitieren Sie von der Sitzungsspeicherbereinigung.
Schritt 3. Verwenden Sie PHP-Sitzungen wie gewohnt
Sobald der Sitzungshandler registriert ist und die Tabelle existiert, können Sie mit der superglobalen Variable $_SESSION
in die Sitzung schreiben und aus ihr lesen, genau wie Sie es normalerweise mit dem Standard-Sitzungshandler von PHP tun. Der DynamoDB Session Handler kapselt und abstrahiert die Interaktionen mit DynamoDB und ermöglicht es Ihnen, einfach die nativen Sitzungsfunktionen und die Schnittstelle von PHP zu verwenden.
// Start the session session_start(); // Alter the session data $_SESSION['user.name'] = 'jeremy'; $_SESSION['user.role'] = 'admin'; // Close the session (optional, but recommended) session_write_close();
Konfiguration
Sie können das Verhalten des Sitzungs-Handlers mithilfe der folgenden Optionen konfigurieren. Alle Optionen sind optional, aber Sie sollten sicher sein, dass Sie die Standardeinstellungen kennen.
-
table_name
-
Der Name der DynamoDB-Tabelle, in der die Sitzungen gespeichert werden sollen. Der Standardwert ist
'sessions'
. -
hash_key
-
Der Name des Hash-Schlüssels in der DynamoDB-Sitzungstabelle. Der Standardwert ist
'id'
. -
data_attribute
-
Der Name des Attributs in der DynamoDB-Sitzungstabelle, in der die Sitzungsdaten gespeichert sind. Der Standardwert ist
'data'
. -
data_attribute_type
-
Der Typ des Attributs in der DynamoDB-Sitzungstabelle, in der die Sitzungsdaten gespeichert sind. Dies ist standardmäßig
'string'
, kann aber optional als'binary'
festgelegt werden. -
session_lifetime
-
Die Lebensdauer einer inaktiven Sitzung, bevor der Speicher bereinigt werden soll. Wenn sie nicht angegeben ist, wird
ini_get('session.gc_maxlifetime')
als Wert für die Lebensdauer verwendet. -
session_lifetime_attribute
-
Der Name des Attributs in der DynamoDB-Sitzungstabelle, in dem die Ablaufzeit der Sitzung gespeichert ist. Der Standardwert ist
'expires'
. -
consistent_read
-
Ob der Sitzungs-Handler konsistente Lesevorgänge für die
GetItem
-Operation verwenden soll. Der Standardwert isttrue
. -
locking
-
Ob Sitzungssperren verwendet werden sollen. Der Standardwert ist
false
. -
batch_config
-
Konfiguration zum Stapellöschen bei der Speicherbereinigung. Diese Optionen werden direkt an DynamoDB-Objekte WriteRequestBatch übergeben. Lösen Sie die Speicherbereinigung manuell über
SessionHandler::garbageCollect()
aus. -
max_lock_wait_time
-
Maximale Zeit (in Sekunden), wie lange der Sitzungs-Handler warten soll, bis ihm eine Sperre erteilt wird, bevor er aufgibt. Die Standardwert ist
10
und wird nur für die Sitzungssperre verwendet. -
min_lock_retry_microtime
-
Minimale Zeit (in Mikrosekunden), wie lange der Sitzungs-Handler zwischen den Versuchen warten soll, eine Sperre zu erhalten. Die Standardwert ist
10000
und wird nur für die Sitzungssperre verwendet. -
max_lock_retry_microtime
-
Maximale Zeit (in Mikrosekunden), wie lange der Sitzungs-Handler zwischen den Versuchen warten soll, eine Sperre zu erhalten. Die Standardwert ist
50000
und wird nur für die Sitzungssperre verwendet.
Zur Konfiguration des Session Handlers geben Sie bei der Instanziierung des Handlers die Konfigurationsoptionen an. Der folgende Code ist ein Beispiel mit allen Konfigurationsoptionen.
$sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions', 'hash_key' => 'id', 'data_attribute' => 'data', 'data_attribute_type' => 'string', 'session_lifetime' => 3600, 'session_lifetime_attribute' => 'expires', 'consistent_read' => true, 'locking' => false, 'batch_config' => [], 'max_lock_wait_time' => 10, 'min_lock_retry_microtime' => 5000, 'max_lock_retry_microtime' => 50000, ]);
Preisgestaltung
Abgesehen von den Gebühren für Datenspeicherung und Datenübertragung werden die mit der Nutzung von DynamoDB verbundenen Kosten auf der Grundlage der bereitgestellten Durchsatzkapazität Ihrer Tabelle berechnet (siehe Preisdetails zu Amazon DynamoDB
Eine Lesekapazitätseinheit entspricht einem Strongly Consistent-Lesevorgang pro Sekunde oder zwei Eventually Consistent-Lesevorgängen pro Sekunde für Elemente mit einer Größe von bis zu 4 KB. Eine Schreibkapazitätseinheit entspricht einem Schreibvorgang pro Sekunde für Elemente von bis zu 1 KB.
Letztendlich korrelieren der Durchsatz und die Kosten für Ihre Sitzungstabelle mit dem erwarteten Datenverkehr und der Sitzungsgröße. In der folgenden Tabelle wird die Anzahl der Lese- und Schreiboperationen erläutert, die in Ihrer DynamoDB-Tabelle für jede der Sitzungsfunktionen ausgeführt werden.
Lesen über |
|
Lesen über |
|
Schreiben über |
|
Löschen über |
|
Speicherbereinigung |
|
Sperren von Sitzungen
Der DynamoDB Session Handler unterstützt pessimistisches Sperren von Sitzungen, um das Verhalten des Standard-Session-Handlers von PHP nachzuahmen. Standardmäßig ist diese Funktion im DynamoDB-Sitzungshandler deaktiviert, da sie zu einem Leistungsengpass werden und die Kosten in die Höhe treiben kann, insbesondere wenn eine Anwendung über Ajax-Anfragen oder Iframes auf die Sitzung zugreift. Überlegen Sie sorgfältig, ob Ihre Anwendung eine Sitzungssperre benötigt, bevor Sie diese aktivieren.
Um die Sitzungssperre zu aktivieren, setzen Sie die 'locking'
-Option auf true
, wenn Sie den SessionHandler
instanziieren.
$sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions', 'locking' => true, ]);
Müllabfuhr
Richten Sie in Ihrer DynamoDB-Tabelle mit dem Attribut „expires“ ein TTL-Attribut ein. Dies bereinigt Ihre Sitzungen automatisch und erspart Ihnen, sie selbst entfernen zu müssen.
Alternativ unterstützt der DynamoDB-Sitzungshandler die Sitzungsbereinigung mithilfe einer Reihe von Scan
Und-Operationen. BatchWriteItem
Aufgrund der Art, wie dieScan
-Operation funktioniert, und um alle abgelaufenen Sitzungen zu finden und zu löschen, kann der Speicherbereinigungsprozess eine Menge Durchsatz erfordern.
Aus diesem Grund unterstützen wir keine automatisierte Speicherbereinigung. Eine bessere Praxis ist es, die Speicherbereinigung so zu planen, dass sie außerhalb der Hauptverkehrszeiten stattfindet, in der eine Erhöhung des verbrauchten Durchsatzes den Rest der Anwendung nicht stört. Beispielsweise könnte ein nächtlicher Cron-Job ein Skript zur Ausführung der Speicherbereinigung auslösen. Dieses Skript müsste etwa Folgendes erledigen.
$sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions', 'batch_config' => [ 'batch_size' => 25, 'before' => function ($command) { echo "About to delete a batch of expired sessions.\n"; } ] ]); $sessionHandler->garbageCollect();
Sie können auch die 'before'
-Option mit 'batch_config'
verwenden, um Verzögerungen für die BatchWriteItem
-Operationen anzuwenden, die von der Speicherbereinigung ausgeführt werden. Dadurch verlängert sich die Zeit, die für die Garbage-Collection benötigt wird, aber es kann Ihnen helfen, die Anfragen des DynamoDB-Sitzungshandlers so zu verteilen, dass Sie während der Garbage-Collection in der Nähe oder innerhalb Ihrer bereitgestellten Durchsatzkapazität bleiben.
$sessionHandler = SessionHandler::fromClient($dynamoDb, [ 'table_name' => 'sessions', 'batch_config' => [ 'before' => function ($command) { $command['@http']['delay'] = 5000; } ] ]); $sessionHandler->garbageCollect();
Bewährte Methoden
-
Erstellen Sie Ihre Sitzungstabelle in einer AWS Region, die Ihren Anwendungsservern geografisch am nächsten liegt oder sich in derselben Region wie diese befindet. Dadurch wird die niedrigste Latenz zwischen Ihrer Anwendung und der DynamoDB-Datenbank gewährleistet.
-
Wählen Sie die bereitgestellte Durchsatzkapazität für Ihre Sitzungstabelle sehr sorgfältig aus. Berücksichtigen Sie den erwarteten Datenverkehr zu Ihrer Anwendung und die erwartete Größe Ihrer Sitzungen. Alternativ verwenden Sie für Ihre Tabelle den Lese-/Schreibkapazitäts-Modus „On-Demand“.
-
Überwachen Sie Ihren verbrauchten Durchsatz über die AWS Management Console oder mit Amazon und passen Sie Ihre Durchsatzeinstellungen nach Bedarf an CloudWatch, um den Anforderungen Ihrer Anwendung gerecht zu werden.
-
Halten Sie die Größe Ihrer Sitzungen klein (im Idealfall weniger als 1 KB). Kleine Sitzungen sind leistungsfähiger und erfordern weniger Durchsatzkapazität.
-
Verwenden Sie keine Sitzungssperren, es sei denn, Ihre Anwendung benötigt sie.
-
Anstatt die eingebauten Auslöser für die Speicherbereinigung von Sitzungen in PHP zu verwenden, planen Sie Ihre Speicherbereinigung über einen Cron-Job oder einen anderen Scheduling-Mechanismus so ein, dass sie außerhalb der Stoßzeiten stattfindet. Nutzen Sie die
'batch_config'
-Option.
Erforderliche IAM-Berechtigungen
Um DynamoDB verwenden zu können SessionHhandler, müssen Ihre konfigurierten Anmeldeinformationen berechtigt sein, die DynamoDB-Tabelle zu verwenden, die Sie in einem vorherigen Schritt erstellt haben. Die folgende IAM-Richtlinie enthält die Mindestberechtigungen, die Sie benötigen. Um diese Richtlinie zu verwenden, ersetzen Sie den Ressourcenwert durch den Amazon-Ressourcennamen (ARN) der Tabelle, die Sie zuvor erstellt haben. Weitere Informationen zum Erstellen und Anhängen von IAM-Richtlinien finden Sie unter Verwaltung von IAM-Richtlinien im IAM-Benutzerhandbuch.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "dynamodb:GetItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:Scan", "dynamodb:BatchWriteItem" ], "Effect": "Allow", "Resource": "arn:aws:dynamodb:<region>:<account-id>:table/<table-name>" } ] }