【问题标题】:AWS DynamoDB Sessions with Elasticache PHP SessionsAWS DynamoDB 会话与 Elasticache PHP 会话
【发布时间】:2013-01-06 12:38:07
【问题描述】:

我有一个概念,我想通过 DynamoDB 的冗余和 Elasticache 的速度在 AWS 中运行会话获得人们的意见。

  1. PHP 将会话存储在 DynamoDB 中。
  2. 当会话写入 DynamoDB 时,值也会写入 Elasticache(可能以 JSON 格式存储在一个密钥对中,以便快速进行整个检索。
  3. PHP 然后向 Elasticache 查询会话。
  4. 如果 PHP 在 Elasticache 中找不到会话,它会检查 DynamoDB - 因此为节点故障、集群故障和站点故障提供备份。如果找到会话,则将其写回 Elasticache(如果可能),如果没有,则在 DynamoDB 中创建一个新会话。

好,坏,杂乱,复杂??

【问题讨论】:

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


    【解决方案1】:

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

    您是否只使用 DynamoDB 进行过基准测试?这是一个由 SSD 支持的键值存储,应该足够快。不过,我说“应该”,因为当我尝试对它做同样的事情时,我遇到了可怕的延迟问题。我们最终完全转向了 ElasticCache 解决方案,只是忍受了节点故障的可能性。但这是针对一个现有的应用程序,该应用程序匆忙地被硬塞到 AWS 上,并且使用了大得离谱的会话对象。我没有时间重新考虑这个想法。

    【讨论】:

    • Jamieb 我们即将将现有的旧应用程序“插入”到 AWS 中。 Session 存储了荒谬的数据量(平均为 30K,发现的会话高达 100K) 到目前为止,您的解决方案如何工作? ElastiCache 的正常运行时间/可靠性有那么差吗?
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-12
      • 1970-01-01
      • 2012-02-18
      • 2011-01-01
      • 2020-08-13
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      相关资源
      最近更新 更多