2016-01-23 3 views
4

Надеюсь, что этот вопрос правильный (если нет, вместо того, чтобы просто голосовать вниз, кто-то может указать мне, где я могу получить ответ).AWS S3, скорость и загрузка сервера

Я стараюсь быть передовым мыслителем и решать проблему, прежде чем она возникнет.

Сценарий

У меня есть небольшой сайт список рассылки, где каждую неделю я выкладываю ссылки на вещи Сети, связанные, что мне нравится, и найти полезным.

Существует последняя страница статьи, в которой показано все, что я добавил в базу данных в этом месяце. На данный момент имеется 6 разделов; Введение, Новости, дизайн, разработка, Twitter, Q & А. На сайте показаны эти вот так:

Раздел

  • Проверьте базу данных для всех записей, которые соответствуют {} месяц & & { Раздел}

  • Foreach {Раздел} возвращение {Title} {Desc} {Ссылка}

У меня обычно около 3 ссылок на каждый раздел. Это также означает db запросов на просмотр страницы.

Обеспокоенность

  • Когда/если доходы сайта в популярности, скажем, я получаю 5k шип посетителя Thats запросов 30000 дб, которые я не думаю, что мой хост-сервер будет либо как ни смотреть в другую сторону, вероятно, заканчивается тем, что меня обвиняют много, а мой сайт рушится.

Вопрос

Какой один из этих решений вы думаете, будет мудрейшим с точки зрения скорости и понижающих ресурсов сервера запросами:

  • 1) Использование PHP, чтобы сделать один запрос дб получение всех записей, добавление их в массив и последующее прохождение через массив для генерации секций

  • 2) Используйте cron для генерации всех записей месяцев, превратите их в JSON f Ile и разобрать, что JSON на странице загрузки, Host на моем сервере

  • 3) Используйте хрон, чтобы генерировать все месяцы записи, сделать их в файл JSON и разобрать, что JSON на странице загрузки, размещать их на AWS S3

  • 4) Используйте cron для создания всех записей в виде отдельных текстовых файлов, например, февраль-2016-интро-один.TXT и кроме того, что на S3, то на последней странице статьи получить текстовые файлы для каждого из них и разобрать их

Обсуждение

  • Если у вас есть какие-либо другие идеи, я был бы рад услышать их :)

Спасибо за ваше терпение, прочитав это, с нетерпением ждем ваших ответов.

+0

Не парься, будь счастлив. В самом деле. – user2182349

+0

Спасибо, я всегда счастлив. И тебе того же . – JamesG

ответ

0

Создайте кеш!

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

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

Что касается создания кеша - это может быть что-то простое, как сохранение результата в файле, но оно лучше работает, сохраняя его в памяти (глобальная переменная?). Я не человек PHP, но, похоже, есть команда apc_store().

2

CloudFront - это веб-сервис, который ускоряет распространение вашего статического и динамического веб-контента, например .html, .css, .php и файлов изображений, для конечных пользователей.

Мой совет - придерживаться задания cron и сохранять файл JSON на S3, а также использовать CloudFront для размещения файла из вашего ведра S3. Хотя хостинг с вашего сервера мне кажется самым быстрым, потому что он расположен всего в одном месте или регионе, скорость будет варьироваться в зависимости от того, где люди получают доступ. Если пользователь просматривает ваш сайт издалека, то у них будет более медленное время загрузки, чем у кого-то, кто ближе.

С CloudFront, файл (ы) распределен и кэшированный на 50+ краевых мест Амазонки по всему миру, давая вам самые быстрые и надежные сроки поставки.

Кроме того, в будущем, если вы хотите, чтобы ваши пользователи увидели новый контент сразу после его обновления, загляните в Лямбду. Он запускает код в ответ на события из других служб AWS. Поэтому всякий раз, когда ваша база данных обновляется (если это DynamoDB или RDS), вы можете автоматически генерировать новый файл JSON и сохранять его на S3. Он по-прежнему будет распространяться CloudFront после того, как вы получите это соединение.

Более подробную информацию о CloudFront here

Более подробная информация о Lambda here