Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于php会话处理的慢速DynamoDB_Php_Amazon Dynamodb - Fatal编程技术网

用于php会话处理的慢速DynamoDB

用于php会话处理的慢速DynamoDB,php,amazon-dynamodb,Php,Amazon Dynamodb,我们使用DynamoDB来同步ELBs下多台EC2机器之间的会话 我们注意到这种方法会大大降低脚本的速度 具体来说,我制作了一个js,在服务器上调用10次3个不同的php脚本 1) 第一个只是一个echo timestamp();往返时间约为50毫秒。 2) 第二个是通过mysqli连接到RDS-MySQL的php脚本,需要相同的时间(大约50-60ms)。 3) 第三个脚本使用AWS官方文档中描述的DynamoDB会话保持方法,大约需要150ms(慢3倍!!) 我每天晚上都在清理垃圾(如文档所

我们使用DynamoDB来同步ELBs下多台EC2机器之间的会话

我们注意到这种方法会大大降低脚本的速度

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

1) 第一个只是一个echo timestamp();往返时间约为50毫秒。 2) 第二个是通过mysqli连接到RDS-MySQL的php脚本,需要相同的时间(大约50-60ms)。 3) 第三个脚本使用AWS官方文档中描述的DynamoDB会话保持方法,大约需要150ms(慢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();
我是做错了什么,还是一直在检索会话是正常的


谢谢。

在AWS论坛上复制AWS工程师的信件:

这里有几件事需要检查:

  • 您在EC2上运行的应用程序是否与DynamoDB表位于同一区域
  • 您是否启用了操作码缓存以确保SDK使用的类不需要在每次运行时从磁盘加载和解析 脚本是否运行
  • 使用Apache之类的web服务器并连接到DynamoDB会话 将需要在每个请求上建立新的SSL连接。 这是因为PHP(目前)不允许重用cURL 请求之间的连接句柄。有些数据库驱动程序确实允许 对于请求之间的持久连接,这可以解释 性能差异


    如果您继续关注AWS论坛线程,AWS工程师应该能够帮助您解决问题。如果您想保持此线程的打开状态,也会对其进行监视

    如果您的服务器位于同一区域,DynamoDB应该有一位数的毫秒延迟。当然,它们位于同一区域。同样的问题,每个页面需要额外的56ms。EC2和DynamoDb位于同一区域。