Служба кэширования для исходящих запросов - PullRequest
1 голос
/ 02 октября 2019

В моем приложении есть различные сервисы, которые отправляют внешние запросы в Интернет для очистки некоторых данных, как в Сервисе A - запросы к imdb.com/query, а служба B - к reddit.com/query. Я хочу добавить службу между этими службами и сетью для этих исходящих запросов, чтобы

  • Служба могла кэшировать ответы с настраиваемым периодом кэширования.

  • Сервис доступен для проверки, он может регистрировать запросы, время отклика и различные метаданные, относящиеся к запросам, возможно, с возможностью выбора серверной части кэша (в памяти db, rdbms, файлы?)

  • Служба не должна заботиться о схеме запросов, за исключением того, что они являются исходящими http / https-запросами (интерфейс клиента не должен изменяться, кроме цели, к которой отправляется запрос)

Я могуцентрализовать кеширование и ведение журнала таким образом

Не смог найти ничего полезного после поиска, хотя мне кажется, что это очень распространенный сценарий. (Сначала я думал об использовании прямого прокси-сервера, но их нелегко использовать для настройки и расширения - скажи мне, если я не прав). Не уверен, что есть более подходящий термин для такого сценария (см. Заглавное название:))

Существует ли где-нибудь такой инструмент, saas, OSS, который может удовлетворить эти потребности? Может быть, я рассматриваю проблему с совершенно неверной точки зрения?

Ответы [ 2 ]

0 голосов
/ 12 октября 2019

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

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

Предоставление примера узла JS, надеюсь, это поможет. Да, вы также можете настроить период времени там, если хотите.

module.exports.findURlDataCached = function (db, redis, url, callback) {
    redis.get(title, function (err, reply) {
        if (err) callback(null);
        else if (reply) //Url and response exists in cache
        callback(JSON.parse(reply));
        else {
            //Url doesn't exist in cache - we need to query the main database
            db.collection('text').findOne({
                title: title
            }, function (err, doc) {
                if (err || !doc) callback(null);
                else {\\Url found in database, save to cache and
                    return to client
                    redis.set(url, JSON.stringify(doc), function () {
                        // Sets the expiry time by 24 hours from current time
                        redis.expireat(url, parseInt((+new Date)/1000) + 86400);
                        callback(doc);
                    });
                }
            });
        }
    });
};
0 голосов
/ 11 октября 2019

В этом ответе рекомендуется инструмент под названием Squid :

Squid - это кеширующий прокси для Интернета, поддерживающий HTTP, HTTPS, FTP и другие. Это уменьшает пропускную способность и сокращает время отклика за счет кэширования и повторного использования часто запрашиваемых веб-страниц. Squid обладает широким контролем доступа и является отличным ускорителем сервера. Он работает в большинстве доступных операционных систем, включая Windows, и распространяется по лицензии GNU GPL.

cntlm представляется еще одним вариантом ( source ). Также см. этот ответ , где приведен большой список различных инструментов прокси-сервера HTTP.

Соответствует ли какой-либо из них вашему конкретному варианту использования?

...