WedX - журнал о программировании и компьютерных науках

Вызов API, но не для каждого пользователя

Я хотел бы сделать что-то похожее на это: Rails способ вызова внешнего API из поля зрения?

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

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

09.08.2020

  • какой ресурс вы хотели бы сохранить из-за предела квоты? Кэшированный запрос может избежать попадания в базу данных, но это все еще HTTP-запрос. 09.08.2020

Ответы:


1

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

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

def method_to_call
   Rails.cache.fetch("some_method", expires_in: 1.hour) do
      SomeThing.to_cache
   end
end

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

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

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

Когда вы доберетесь до больших масштабов кэширования, вам, возможно, придется подумать об инфраструктуре размещения экземпляра Redis. Вам нужен выделенный сервер? Является ли докер жизнеспособным вариантом для производственного Redis? Можете ли вы разместить экземпляр Redis в том же экземпляре приложения? Все эти возможные накладные расходы благоприятствуют первоначальному подходу, но, опять же, он зависит от ваших потребностей.

09.08.2020
  • Это круто! Большое спасибо за помощь :) Неважно на каком юзере, все равно результат от API тот же. У нас просто очень ограниченная квота :) 10.08.2020
  • Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

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

    Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
    В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]