Это хороший способ создания статической страницы для динамического контента на большом веб-сайте и как правильно управлять статической страницей - PullRequest
0 голосов
/ 29 октября 2018

У меня есть сайт с миллионами страниц. Содержимое страницы хранится в базе данных, но данные меняются не очень часто. поэтому для повышения производительности сайта и снижения затрат на развертывание веб-приложений я хочу сгенерировать статические страницы для динамического содержимого и обновить страницы, если содержимое изменилось. Но я очень обеспокоен тем, как управлять этим большим количеством страниц. как я должен хранить эти страницы? Возможно ли, что это вызовет проблемы ввода-вывода, когда веб-сервер обрабатывает много запросов? Есть ли лучшие решения для этой проблемы? Должен ли я использовать лак для решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Исходя из описания, ваша архитектура выглядит как Веб-страницы -> Услуги -> База данных . Страницы генерируются динамически на основе данных в базе данных.

Например, при поиске занятых сведений службы обращаются к базе данных, получают сведения о сотруднике и отображаются в пользовательском интерфейсе. Теперь, если вы создадите контент и сохраните его как веб-страницу для каждого сотрудника, это решение не будет масштабироваться. Кроме того, если информация о сотруднике будет изменена в базе данных, у вас будут устаревшие данные, если вы не воссоздаете страницу.

Моя рекомендация заключается в том, что архитектура должна иметь сервер кэширования, а новая архитектура должна выглядеть следующим образом: Веб-страницы -> Службы -> Сервер кэширования> База данных. Службы должны запрашивать базу данных, создавать страницу и хранить в кеше. Ключом кеша должен быть URL страницы, а значением должен быть контент страницы. Теперь, когда URL попадает в сервисы, сервисы получают страницу из кэша, а не попадают в базу данных. Если ключ недоступен в кеше, службы будут запрашивать базу данных и заполнять кеш ключом и значением.

" Ключ - это URL страницы. Значение - это содержимое страницы, на которой скрыта дата обновления. "

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

0 голосов
/ 22 ноября 2018

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

РЕДАКТИРОВАТЬ, чтобы покрыть комментарии:

  • если все узлы Varnish не работают, вы не можете получить свой контент, так же как если база данных не работает, или если ваши балансировщики нагрузки не работают. Просто имейте два лака с балансировкой нагрузки для высокой доступности, например, с поддержкой активности.
  • если перезапустить лак, кеш будет очищен, если только вы не используете Varnish Plus / Enterprise с MSE. Это может не быть проблемой, если вы не часто перезагружаетесь (изменения конфигурации не нуждаются в перезапуске), поскольку в базе данных все еще есть данные для повторного заполнения кэша.
  • В Varnish есть масса опций для аннулирования контента: чистка только для одного объекта, повторная проверка, запреты для целевых поддоменов или поддеревьев, xkeys для аннулирования на основе тегов.
...