EC2 медленнее, чем общий хост? - PullRequest
0 голосов
/ 14 ноября 2011

Я построил приложение в php, где функция анализирует около 10000 текстовых файлов, извлекает из них материал и помещает его в базу данных mysql. Сам код является просто циклом for, где каждый файл загружается через file_get_contents(), а после окончания этой итерации unset() из памяти. Анализ файла - это задание cron, и весь этот php-файл выполняет всю эту обработку.

Проблема, однако, в том, что приложение было построено (изначально) полностью на общем сервере, и все работало очень хорошо. Я не заметил каких-либо задержек или значительных задержек, как и пользователи, однако, чтобы он мог справиться с большей нагрузкой, я перенес все на сервер EC2 (микроэкземпляр).

Проблема, с которой я сталкиваюсь сейчас, заключается в том, что каждый раз, когда я запускаю cronjob (обрабатываю файлы ежечасно), он тормозит весь сервер настолько, что загрузка обычной страницы занимает около 5-8 секунд, что приводит к поражению цель перемещения его в EC2.

Сам по себе cron - очень долгий процесс. Вот некоторые результаты тестов процесса скрипта (каждый час)

SQL Insertion Time: 23.138303995132 seconds
Memory Used: 10.05 MB
Execution: 411.00507092476 seconds

Но в начале каждого часа сервер сильно замедляется в течение 7 минут, несмотря на то, что у него более выделенное аппаратное ускорение по сравнению с общим сервером (я думаю, по крайней мере). Графики с панели мониторинга EC2 показывают, что загрузка ЦП близка к 100%, но я не понимаю, как она достигает этого уровня.

Может ли кто-нибудь помочь мне определить причину, по которой это может происходить? Я не заметил даже малейшей задержки, когда cron работает на общем сервере, но для EC2 ситуация совершенно иная.

Пожалуйста, не стесняйтесь спрашивать меня обо всем, что я пропустил, упоминая.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

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

Мы используем EC2 для всех наших производственных коробок. Я не могу сказать достаточно хороших слов об этой платформе. Я никогда не вернусь к другому хозяину.

Кроме того, если вы хотите написать свой код на C ++, он будет работать намного быстрее. Я написал простую вставку mysql с этим кодом здесь . Он многопоточный, поэтому вы можете асинхронно запускать обновления или вставки mysql.

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

Надеюсь, это поможет ...

PS. Я бы хотел помочь вам написать версию C ++ для вашего использования ... просто потому, что это весело! : -)

0 голосов
/ 14 ноября 2011

Скважина EC2 разработана для масштабирования.

Поскольку ваш код выполняется в 1 цикле, чтобы открывать каждый файл один за другим, это не способствует масштабируемому дизайну.

Попробуйте изменить свои коды, чтобы разбить их так, чтобы файлы обрабатывались одновременно различными экземплярами сценария php. Таким образом, каждая копия скрипта может запускаться в потоке самостоятельно. Если у вас есть несколько серверов (или экземпляров серверов в EC2), вы можете запустить их на разных компьютерах, чтобы ускорить его еще больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...