AWS DynamoDB会话与Elasticache PHP会话

AWS DynamoDB会话与Elasticache PHP会话,php,amazon-web-services,memcached,amazon-dynamodb,amazon-elasticache,Php,Amazon Web Services,Memcached,Amazon Dynamodb,Amazon Elasticache,我有一个概念,我想让人们对使用DynamoDB的冗余和Elasticache的速度在AWS中运行会话发表意见 PHP在DynamoDB中存储会话 当会话被写入DynamoDB时,值也被写入Elasticache(可能作为JSON存储在一个密钥对中,以便快速进行整个检索) PHP然后查询Elasticache中的会话 如果PHP在Elasticache中找不到会话,它将检查DynamoDB,从而为节点故障、群集故障和站点故障提供备份。如果找到会话,则将其写回Elasticache(如果可能),如果

我有一个概念,我想让人们对使用DynamoDB的冗余和Elasticache的速度在AWS中运行会话发表意见

  • PHP在DynamoDB中存储会话
  • 当会话被写入DynamoDB时,值也被写入Elasticache(可能作为JSON存储在一个密钥对中,以便快速进行整个检索)
  • PHP然后查询Elasticache中的会话
  • 如果PHP在Elasticache中找不到会话,它将检查DynamoDB,从而为节点故障、群集故障和站点故障提供备份。如果找到会话,则将其写回Elasticache(如果可能),如果没有,则在DynamoDB中创建新会话
  • 好的,坏的,混乱的,复杂的???

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


    你有没有测试过仅仅使用DynamoDB?它是一个SSD支持的键值存储,应该足够快。我说“应该”尽管如此,因为我在尝试对其执行相同操作时遇到了可怕的延迟问题。我们最终完全转向ElasticCache解决方案,并承受着节点故障的可能性。但这是针对一个现有应用程序的,该应用程序匆忙安装在AWS上,并使用了大得离谱的会话对象。我没有这样做有时间重新审视这个想法。

    为了补充jamieb所说的内容,这里有一些链接:

    如果您打算使用ElastiCache,我建议您使用他们的,这样您只需要担心一个memcache端点,而不管实际有多少个缓存节点

    如果要使用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();
    
    Jamieb我们即将把一个既有又旧的应用程序“shoe horn”到AWS中。会话存储的数据量惊人(平均为30K,找到的会话多达100K)。到目前为止,您的解决方案如何工作?ElastiCache的正常运行时间/可靠性是否如此糟糕?