2015-09-30 2 views
1

Вопрос о кешировании данных из вызовов внешнего API-интерфейса ReST.Redis/Memcached ReST-кэширование для внешней службы

В настоящее время существует служба ReST, настроенная для генерации и получения некоторых конкретных типов отчетов, которые должен потреблять пользовательский интерфейс. Однако эта услуга не предназначена для использования в больших объемах или для публики, и эти отчеты довольно статичны. Возможно, это происходит только каждые 10-20 минут. Веб-приложение находится на отдельном сервере.

Что я хотел бы сделать, используя memcached или Redis, когда запрос данных поступает от пользовательского интерфейса к веб-серверу, совершает вызов из веб-приложения на сервер отчетов до получить указанный отчет, преобразовать данные в соответствующий формат для пользовательского интерфейса, кэшировать его с отметкой времени и вернуть его в пользовательский интерфейс, чтобы последующие запросы были доступны в памяти на веб-сервере приложений без необходимости повторного использования, запрос с сервера отчетов. Мне также нужно будет проверить эту метку времени и сделать новый запрос, если кешированный отчет будет удерживаться дольше указанного времени. Данные, которые будут кэшироваться, являются довольно незначительными только некоторыми небольшими объектами JSON с только несколькими значениями, содержащими информацию, которую требует пользовательский интерфейс, и нет тонны этих объектов, я бы не удивился, если бы все они могли быть легко сохранены в памяти сразу же, поэтому тимпинг времени является единственной недействительностью, которая должна быть необходимой.

У меня почти 0 опыта здесь, когда дело доходит до кэширования/memcached/Redis. Есть ли преимущества для одного или другого? Что-то вроде этого возможно? Как я могу это реализовать? Есть ли другие варианты?

Цените помощь!

ответ

1

Серверное кэширование этих ответов RESTful запросов очень возможно и довольно распространено.

С любым кэшированием на сервере вы также должны много думать о том, действительно ли вам это нужно, так как это add complexity. Это, безусловно, может привести к значительному улучшению, но поскольку ваш объем использования низок, он может быть переполнен. Вы также можете использовать протоколы кэширования HTTP, чтобы избежать необходимости кэширования на сервере. Если данные не изменяются очень часто, и вы правильно используете eTags или измененные даты, а также промежуточный прокси-сервер, такой как AWS CloudFront, пользователи редко будут испытывать эту задержку.

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

Предполагая, что вы хотите кэшировать в памяти ...

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

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

Что-то еще?Есть много других баз данных в памяти, но я думаю, что Memcached и Redis, вероятно, лучше всего, если вы хотите избежать проблем с использованием передовых фреймворков без особой поддержки. Однако там есть что-то еще: скучные старые файлы. Если вы создаете отчеты, вам может потребоваться просто создать их как временные файлы. Если ваша ОС выполняет свою работу, файлы в конечном итоге будут кэшироваться.

+1

Спасибо! Да, я считал простые файлы, однако я чувствовал, что Memcached или Redis могут быть правильным выбором для упрощения. Меня интересовал Редис, поскольку это то, что я, вероятно, хотел бы узнать в будущем. Но похоже, что Memcached - это то, как я пойду в этом случае. Кэширование на стороне сервера необходимо, так как сервер, создающий отчеты, разрабатывается третьей стороной, не предназначенной для публичной поддержки, и разработчик выразил, что они не хотят иметь дело с объемом запросов, которые мы ожидаем. Большое спасибо за ваш ответ! – pipedreams2

 Смежные вопросы

  • Нет связанных вопросов^_^