Я мигрирую из хостинговой компании, которая в настоящее время размещает мое веб-приложение на основе PHP и базу данных MySQL на одном сервере. Их характеристики сервера приличные: сервер работает на SSD, 11 ГБ ОЗУ и 8-ядерный ЦП (GenuineIntel, версия QEMU Virtual CPU (cpu64-rhel6), 2399,996 МГц, 4096 КБ).
Я не могу переместить все сразу, поэтому просто хочу переместить базу данных в AWS RDS и обновить хост в моей конфигурации PHP до конечной точки AWS.
Я настроил это с помощью базовых пакетов, доступных в AWS для тестирования - t2.micro EC2 (для тестирования / тестирования сценариев PHP) и db.t2.micro RDS.
Все работает, но очень медленно, когда я подключаюсь с моего удаленного сервера, не AWS. Те же таблицы базы данных, в которых используется одна и та же версия MariaDB с одинаковым количеством строк в таблицах, дают следующие результаты:
AWS EC2 -> AWS RDS (fully AWS)
Connected via PDO in 0.04 seconds
Queried 1000 rows in 0.63 seconds
Remote Server -> AWS RDS (part AWS)
Connected via PDO in 0.16 seconds
Queried 1000 rows in 5.49 seconds
Remote Server -> Database running on same server (non AWS)
Connected via PDO in 0.00 seconds
Queried 1000 rows in 2.70 seconds
Как видите, установка AWS является самой быстрой, даже в пакетах бесплатного уровня.
Полностью удаленная настройка сервера медленнее, но все же не ужасна.
Удаленный сервер -> Настройка AWS самая медленная.
Поскольку я новичок в AWS, я был бы очень признателен, если бы кто-нибудь дал мне знать, если это ожидается. Всегда ли вызовы не AWS на AWS RDS будут намного медленнее?
Может ли что-то на любом сервере замедлять скорость?
PS. Удаленный сервер находится в Великобритании, и регион AWS установлен на EU-West, поэтому я не думаю, что это связано с задержкой на расстоянии.
EDIT
Рик Джеймс спросил в комментариях ниже о кеше запросов и т. Д. Кэширование отключено, но, чтобы убедиться, что я изменил свой скрипт, он выполняет следующие действия:
$mysqli = mysqli_connect($dbhost,$username,$password,$dbname) or die ("could not connect to mysql");
$tableCreate = "CREATE TABLE IF NOT EXISTS test_tbl (id int(11) NOT NULL auto_increment, RandomTxt TEXT, PRIMARY KEY (id))";
$queryResult = mysqli_query($mysqli , $tableCreate);
for ($i = 1; $i <= 1000; $i++) {
mysqli_query($mysqli,"INSERT INTO `test_tbl` (RandomTxt) VALUES ('abcdefghijklmnopqrstuvwxyz')" ) ;
}
$result = mysqli_query($mysqli , 'SELECT * FROM test_tbl') ;
$arrayResults = array() ;
while ($row = $result->fetch_assoc()) {
array_push($arrayResults , $row['RandomTxt']);
}
$dropTable = "DROP TABLE `test_tbl`";
$queryResult = mysqli_query($mysqli , $dropTable);
После каждого запроса у меня есть скрипт таймера PHP. Результаты этого обновленного скрипта:
AWS EC2 -> AWS RDS (fully AWS)
Db connection established at : 0.04184008
Table created at : 0.05363607
Data inserted into the table at : 3.64998102
Data is read from table and inserted into an array at : 3.65190291
Table dropped at : 3.66061902
Remote Server -> AWS RDS (part AWS)
Db connection established at : 0.08496714
Table created at : 0.11568093
Data inserted into the table at : 21.78033495
Data is read from table and inserted into an array at : 21.82050204
Table dropped at : 21.84762096
Remote Server -> Database running on same server (non AWS)
Db connection established at : 0.00079298
Table created at : 0.00664401
Data inserted into the table at : 0.15589213
Data is read from table and inserted into an array at : 0.16134501
Table dropped at : 0.16468596
Я просто хочу повторить, что я новичок в использовании AWS, и, если люди ожидают этих результатов, пожалуйста, дайте мне знать. Мне нужно знать, должно ли соединение с RDS с сервера, не принадлежащего AWS, быть достаточно быстрым для производственного использования, поскольку на данный момент это, конечно, не так.
РЕДАКТИРОВАТЬ 2
Я также побежал time nc -vz xxx.xxx.eu-west-1.rds.amazonaws.com 3306
, чтобы проверить время. Результат от не AWS-хоста был:
real 0m0.227s
user 0m0.014s
sys 0m0.005s
Результат от EC2 к RDS был:
real 0m0.112s
user 0m0.002s
sys 0m0.000s