6

Mam koncepcję, w której chcę uzyskać opinie ludzi na temat uruchamiania sesji w AWS z redundancją DynamoDB i szybkością Elasticache.AWS Sesje DynamoDB z elastyczną siatką Sesje PHP

  1. PHP przechowuje sesje w DynamoDB.
  2. Gdy sesje są zapisywane DynamoDB wartości są również zapisywane Elasticache (możliwie przechowywany jako JSON w jednej pary kluczy do szybkiego całego wydobycia.
  3. PHP następnie odpytuje Elasticache na sesjach.
  4. Jeśli PHP nie może znaleźć sesja w Elasticache sprawdza DynamoDB - w związku z tym zapewnia kopię zapasową awarii węzła, awarii klastra i awarii witryny Jeśli sesja zostanie znaleziona jest zapisana z powrotem w Elasticache (jeśli to możliwe), a jeśli nie, to nowa sesja jest tworzona w DynamoDB

Dobra, zła, niechlujna, złożona?

Odpowiedz

5

Nie, to nie jest złe/skomplikowane - to dość standardowe użycie memcache jako pamięci podręcznej magazynu trwałego. Jest to jednak naprawdę drogie rozwiązanie z comiesięcznej perspektywy fakturowania AWS.

Czy dokonałeś testu porównawczego używając tylko DynamoDB? Jest to sklep z kluczami o wartości SSD, który powinien być wystarczająco szybki. Mówię "powinienem", ponieważ miałem problemy z okropnym opóźnieniem, gdy próbowałem zrobić to samo. Ostatecznie przenieśliśmy się wyłącznie do rozwiązania ElasticCache i po prostu żyliśmy z możliwością awarii węzła. Ale to było dla istniejącej aplikacji, która w pośpiechu była podkowiasta na AWS i używała absurdalnie dużych obiektów sesji. Nie miałem czasu ponownie przyjrzeć się tej idei.

+0

Jamieb mamy zamiar "podkowami" istniejącej i starej aplikacji do AWS. Sesja niesie ze sobą absurdalną ilość danych (średnio 30 tys. I odnaleziono sesje do 100 tys.) Jak działa twoje rozwiązanie? Czy czas pracy/niezawodność jest tak zły na ElastiCache? – kali

4

Aby dodać do tego, co jamieb powiedział, oto kilka linków:

Jeśli masz zamiar użyć ElastiCache, ja sugeruję, używając ich auto-discovery feature więc masz tylko martwić się o jeden memcache końcowym, niezależnie od tego, ile węzłów cache faktycznie są.

Jeśli zamierzasz używać DynamoDB, powinieneś użyć DynamoDB Session Handler dostarczonego przez AWS SDK for PHP. Oto prosty przykład kodu do korzystania z obsługi sesji:

<?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();