6

Ho un concetto per cui voglio ottenere opinioni sulle persone per l'esecuzione di sessioni in AWS con la ridondanza di DynamoDB e la velocità di Elasticache.Sessioni DynamoDB AWS con sessioni PHP Elasticache

  1. PHP memorizza le sessioni in DynamoDB.
  2. Quando le sessioni vengono scritti DynamoDB i valori vengono scritti anche per Elasticache (eventualmente memorizzata come JSON in una coppia di chiavi per un veloce recupero intero.
  3. PHP poi interroga Elasticache per le sessioni.
  4. Se PHP non riesce a trovare un la sessione in Elasticache controlla DynamoDB, fornendo quindi un backup per l'errore del nodo, l'errore del cluster e l'errore del sito.Se la sessione viene trovata, riscritta su Elasticache (se possibile) e se non viene creata una nuova sessione in DynamoDB

Buono, cattivo, disordinato, complesso ??

risposta

5

No, non è male/complesso - si tratta di un uso piuttosto standard di memcache come cache write-through di un archivio dati persistente. Tuttavia, è una soluzione davvero costosa dal punto di vista della fatturazione mensile AWS.

Hai eseguito il benchmark utilizzando solo DynamoDB? È un archivio di valori-chiave con supporto SSD che dovrebbe essere abbastanza veloce. Dico "dovrebbe" però, perché ho avuto problemi con una latenza orribile quando ho tentato di fare la stessa cosa. Abbiamo finito per passare esclusivamente a una soluzione ElasticCache e semplicemente viviamo con la possibilità di fallimento del nodo. Ma questo era per un'applicazione esistente che era ad artiglio di scarpe su AWS in fretta e stava usando oggetti di sessione ridicolmente grandi. Non ho avuto il tempo di rivedere l'idea.

+0

Jamieb stiamo per "scarpa-clacson" un'applicazione esistente e vecchia in AWS. La quantità di dati della memoria di Session è ridicola (media di 30K e sessioni trovate fino a 100K) Come funziona la tua soluzione fino ad ora? Il tempo di attività/affidabilità è così grave su ElastiCache? – kali

4

da aggiungere a quanto jamieb detto, ecco alcuni link:

Se avete intenzione di utilizzare ElastiCache, io suggerisco di usare il loro auto-discovery feature in modo da avere solo preoccuparsi di una memcache endpoint indipendentemente dal numero di nodi di cache lì in realtà sono.

Se si intende utilizzare DynamoDB, è necessario utilizzare lo fornito da AWS SDK for PHP. Ecco un esempio di codice semplice su come utilizzare il gestore di sessione:

<?php 

// Load SDK via Composer autoloader 
require 'vendor/autoload.php'; 

// Instantiate the SDK with your config 
$aws = Aws\Common\Aws::factory('/path/to/config/file'); 

// Instantiate the DynamoDB client and register the session handler 
$db = $aws->get('dynamodb'); 
$db->registerSessionHandler(array(
    'table_name' => 'sessions', 
    'hash_key' => 'id', 
)); 

// Use PHP sessions like normal 
session_start(); 
$_SESSION['foo'] = 'bar'; 
session_commit();