用于php会话处理的慢DynamoDB

时间:2015-01-30 22:17:20

标签: php amazon-dynamodb

我们正在使用DynamoDB来同步ELB下多台EC2机器之间的会话。

我们注意到这种方法减慢了很多脚本。

具体来说,我制作了一个js,它在服务器上调用10次3个不同的PHP脚本。

1)第一个只是一个echo timestamp();往返时间约为50毫秒。 2)第二个是一个php脚本,通过mysqli连接到RDS MySQL并花费相同的时间(大约50-60ms)。 3)第三个脚本使用官方AWS文档中描述的DynamoDB会话保持方法,大约需要150毫秒(慢3倍!!)。

我每晚都在清理垃圾(正如文档所说),DynamoDB指标似乎没问题(附在下面)。

我使用的代码是:

use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\Session\SessionHandler;
ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");
ini_set('session.gc_probability', 0);

require 'aws.phar';

$dynamoDb = DynamoDbClient::factory(array(
    'key'    => 'XXXXXX',
    'secret' => 'YYYYYY',
    'region' => 'eu-west-1'
));

$sessionHandler = SessionHandler::factory(array(
    'dynamodb_client' => $dynamoDb,
    'table_name'      => 'sessions',
    'session_lifetime'         => 259200,
    'consistent_read'          => true,
    'locking_strategy'         => null,
    'automatic_gc'             => 0,
    'gc_batch_size'            => 25,
    'max_lock_wait_time'       => 15,
    'min_lock_retry_microtime' => 5000,
    'max_lock_retry_microtime' => 50000,
));

$sessionHandler->register();

session_start();

我做错了什么,或者在整个时间内检索会话是否正常?

感谢。

1 个答案:

答案 0 :(得分:0)

在AWS论坛中复制AWS工程师的信件:https://forums.aws.amazon.com/thread.jspa?messageID=597493

  

这里有几件事需要检查:

     
      
  1. 您是否在与DynamoDB表位于同一区域的EC2上运行应用程序?
  2.   
  3. 您是否启用了OPcode缓存,以确保SDK使用的类不需要从磁盘加载并在每次   脚本运行?
  4.         

    使用Apache等Web服务器并连接到DynamoDB会话   将要求在每个请求上建立新的SSL连接。   这是因为PHP(当前)不允许您重用cURL   请求之间的连接句柄。一些数据库驱动程序允许   对于请求之间的持久连接,可以解释   性能差异。

如果您跟进AWS论坛主题,AWS工程师应该能够帮助您解决问题。如果要保持打开状态,也会监视此线程。