使用Elasticache PHP会话的AWS DynamoDB会话

时间:2013-01-23 05:07:50

标签: php amazon-web-services memcached amazon-dynamodb amazon-elasticache

我有一个概念,我希望通过DynamoDB的冗余和Elasticache的速度让人们了解在AWS中运行会话。

  1. PHP在DynamoDB中存储会话。
  2. 当会话写入DynamoDB时,值也会写入Elasticache(可能在一个密钥对中存储为JSON,以便快速检索。
  3. PHP然后查询Elasticache以获取会话。
  4. 如果PHP无法在Elasticache中找到会话,则会检查DynamoDB - 从而为节点故障,群集故障和站点故障提供备份。如果找到会话,则将其写回Elasticache(如果可能),如果不是,则在DynamoDB中创建新会话。
  5. 好,坏,凌乱,复杂?

2 个答案:

答案 0 :(得分:5)

不,它不坏/复杂 - 这是一个非常标准的memcache用法,作为持久数据存储的直写缓存。但是,从每月AWS结算角度来看,这是一个非常昂贵的解决方案。

您是否只使用过DynamoDB进行基准测试?这是一个SSD支持的键值存储,应该足够快。我说“应该”,因为当我尝试对它做同样的事情时,我遇到了可怕的延迟问题。我们最终纯粹转向ElasticCache解决方案,并且很容易遇到节点故障的可能性。但这是针对现有的应用程序,该应用程序匆忙在AWS上使用,并使用了大量的会话对象。我没有时间重温这个想法。

答案 1 :(得分:4)

要添加到jamieb所说的内容,这里有一些链接:

如果您打算使用ElastiCache,我建议使用他们的auto-discovery feature,这样您只需担心一个memcache端点,无论实际有多少缓存节点。

如果您要使用DynamoDB,则应使用DynamoDB Session Handler提供的AWS SDK for PHP。以下是有关如何使用会话处理程序的简单代码示例:

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