Медленная DynamoDB для обработки php-сессии

мы используем DynamoDB для синхронизации сеансов между несколькими компьютерами EC2 под ELB.

Мы заметили, что этот метод сильно замедляет работу скриптов.

В частности, я сделал JS, который вызывает 10 раз 3 различных сценариев PHP на сервере.

1) Первая — просто временная метка эха (); и занимает около 50 мс как время туда и обратно.
2) Второй — скрипт php, который подключается через mysqli к RDS MySQL и занимает столько же времени (около 50-60 мс).
3) Третий сценарий использует метод сохранения сеанса DynamoDB, описанный в официальной документации AWS, и занимает около 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

Решение

Копирование корреспонденции от инженера AWS на форумах AWS: https://forums.aws.amazon.com/thread.jspa?messageID=597493

Вот пара вещей, чтобы проверить:

  1. Вы запускаете свое приложение на EC2 в том же регионе, что и ваша таблица DynamoDB?
  2. Включили ли вы кэширование OPcode, чтобы гарантировать, что классы, используемые SDK, не нужно загружать с диска и анализировать каждый раз, когда ваш
    скрипт запускается?

Использование веб-сервера, такого как Apache, и подключение к сеансу DynamoDB
потребует установки нового SSL-соединения при каждом запросе.
Это потому, что PHP (в настоящее время) не позволяет вам повторно использовать cURL
соединение обрабатывает между запросами. Некоторые драйверы базы данных позволяют
для постоянных соединений между запросами, которые могут составлять
разница в производительности.

Если вы продолжите следить за веткой форумов AWS, инженер AWS сможет помочь вам с вашей проблемой. Этот поток также отслеживается, если вы хотите оставить его открытым.

0

Другие решения

Других решений пока нет …