6

DynamoDBの冗長性とElasticacheの速度を使用して、AWSでセッションを実行することについて人々の意見を聞きたいというコンセプトがあります。

  1. PHPはセッションをDynamoDBに保存します。
  2. セッションがDynamoDBに書き込まれると、値はElasticacheにも書き込まれます(検索全体を高速化するために、1つのキーペアにJSONとして保存される可能性があります。
  3. 次に、PHPはElasticacheにセッションを照会します。
  4. PHPがElasticacheでセッションを見つけることができない場合、DynamoDBをチェックします。したがって、ノード障害、クラスター障害、およびサイト障害のバックアップを提供します。セッションが見つかった場合は(可能であれば)Elasticacheに書き戻され、そうでない場合はDynamoDBに新しいセッションが作成されます。

良い、悪い、乱雑、複雑に??

4

2 に答える 2

5

いいえ、それは悪い/複雑ではありません-これは、永続データストアのライトスルーキャッシュとしてのmemcacheのかなり標準的な使用法です。ただし、これは毎月のAWS課金の観点からは非常に高価なソリューションです。

DynamoDBだけを使用してベンチマークを実行しましたか?これは、SSDでサポートされたKey-Valueストアであり、十分に高速である必要があります。同じことをしようとしたときにひどいレイテンシーの問題があったので、私は「すべき」と言います。最終的には、純粋にElasticCacheソリューションに移行し、ノード障害の可能性がありました。しかし、これは、急いでAWSに集中し、途方もなく大きなセッションオブジェクトを使用していた既存のアプリケーション用でした。私はその考えを再考する時間がありませんでした。

于 2013-01-23T05:38:55.817 に答える
4

jamiebが言ったことに追加するために、ここにいくつかのリンクがあります:

ElastiCacheを使用する場合は、自動検出機能を使用することをお勧めします。これにより、実際にキャッシュノードがいくつあるかに関係なく、1つのmemcacheエンドポイントについてのみ心配する必要があります。

DynamoDBを使用する場合は、 AWS SDKforPHPが提供するDynamoDBセッションハンドラーを使用する必要があります。セッションハンドラーの使用方法の簡単なコードサンプルを次に示します。

<?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();
于 2013-01-23T21:58:51.510 に答える