Данные о наилучшей стратегии кэширования, которые часто обновляются (представление Redis / Memcached против Nginx / Varnish vs Materialized) - PullRequest
0 голосов
/ 24 сентября 2018

В настоящее время я использую сервер AWS EC2 Ubuntu, который извлекает данные из экземпляра базы данных Postgres RDS.Один из SQL-запросов, используемых в функции представления для конкретной страницы, содержит много объединений и выполняется довольно медленно.Я попытался обрезать запрос и удалил некоторые объединения, которые могут быть немного ненужными, но загрузка все равно занимает немного больше времени, чем хотелось бы (не менее 6 секунд).В настоящее время я смотрю на возможные стратегии кэширования, которые помогут ускорить обслуживание страницы.

Я рассмотрел использование Материализованного Представления, однако данные, которые выбираются исходной функцией представления, обновляются в среднем каждые 30 секунд, и меня беспокоит, что реализация триггера или обычного задания cron для обновления MatViewчасто оказывает негативное влияние на базу данных и может быть не самой лучшей стратегией для данных, которые регулярно обновляются и изменяются (если кто-то не может предложить другой способ обновления строк в MatView, который не включает в себя выполнение запроса, который выглядит очень похоже наоригинал)

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

Я несколько запутался, какая стратегия кэширования лучше всего подходит для этой ситуации.Будет ли Redis / Memcached на экземпляре Elasticache слишком тяжеловесным по сравнению с реализацией Nginx / Varnish на экземпляре EC2?Считается ли плохой идеей пытаться кэшировать данные, которые часто изменяются в кэше Nginx?

1 Ответ

0 голосов
/ 24 сентября 2018

Грубо, вы бы использовали низкоуровневый кеш, такой как Redis или Elasticache, для кеширования необработанных данных (например, результат запроса SQL);тогда как для кэширования всей HTML-страницы, на которой отображаются данные, вы использовали бы кэш более высокого уровня, например Nginx или Varnish.То, какой из них подходит, зависит от вашего варианта использования.Если у вас есть одна простая страница (или фрагмент страницы), которая содержит медленные данные, и этот контент отображается одинаково для всех пользователей, тогда может подойти кэш высокого уровня.Если контент подвергается множеству небольших изменений и форматов, которые делают кеш целой страницы очень фрагментированным, то кеш более низкого уровня будет уместным.

В действительности, эти технологии не привязаны к этому жестковысокий / низкий уровень разделения: вы можете хранить целые страницы в Redis и отдельные фрагменты данных в Varnish, так что это не так просто.Но в общем, решите что вы хотите кэшировать, прежде чем решить как кэшировать его.

Даже если вы решили, что кэшировать, выбор правильной технологии будетзависит от множества соображений.Elasticache в AWS имеет то преимущество, что полностью управляется и, таким образом, сэкономит ваше обслуживание, но, вероятно, будет самым дорогим в работе (по крайней мере, в малом / среднем масштабе).Кэширование Nginx с бэкэндом файловой системы, вероятно, будет самым быстрым и дешевым для реализации, но не будет хорошо масштабироваться (и будет неудобно проводить рефакторинг по мере увеличения вашего масштаба).Varnish и Redis, вероятно, лучше всего реализовывать как отдельные экземпляры EC2, поэтому расположитесь где-то посередине.

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