Proxy 出站请求的缓存服务

Proxy 出站请求的缓存服务,proxy,architecture,microservices,http-proxy,Proxy,Architecture,Microservices,Http Proxy,我的应用程序中有各种各样的服务,它们向web发出外部请求以获取一些数据,比如服务A向imdb.com/query发出请求,服务B向reddit.com/query发出请求。我想在这些服务和web服务之间为这些传出请求添加一个服务,以便 服务可以使用可配置的缓存周期缓存响应 服务是可检查的,它可以记录请求、响应时间和与请求相关的各种元数据,可能还可以选择缓存后端(内存数据库、关系数据库、文件?) 服务不应该关心请求的模式,除非它们是出站http/https请求(客户端接口不应该更改,除非它发送请

我的应用程序中有各种各样的服务,它们向web发出外部请求以获取一些数据,比如服务A向imdb.com/query发出请求,服务B向reddit.com/query发出请求。我想在这些服务和web服务之间为这些传出请求添加一个服务,以便

  • 服务可以使用可配置的缓存周期缓存响应

  • 服务是可检查的,它可以记录请求、响应时间和与请求相关的各种元数据,可能还可以选择缓存后端(内存数据库、关系数据库、文件?)

  • 服务不应该关心请求的模式,除非它们是出站http/https请求(客户端接口不应该更改,除非它发送请求的目标)

我可以通过这种方式集中缓存和日志记录

在搜索后找不到任何有用的东西,尽管我觉得这是非常常见的情况。(我一开始就想到使用前向代理,但它们不容易使用,而且设置和扩展都很痛苦——如果我错了,请告诉我)。不确定是否有更好的术语来描述这种情况(请参见编造的标题:)

有没有这样一个工具,saas,OSS可以满足这些需求?也许我从完全错误的角度看待这个问题?

推荐了一个名为:

Squid是支持HTTP、HTTPS、FTP等的Web缓存代理。它通过缓存和重用频繁请求的网页来减少带宽并缩短响应时间。Squid具有广泛的访问控制,是一款出色的服务器加速器。它运行在大多数可用的操作系统上,包括Windows,并根据GNU GPL获得许可

似乎是另一种选择()。另请参阅,以获取各种HTTP代理工具的详细列表

这两种方法是否满足您的特定用例?

推荐一种称为:

Squid是支持HTTP、HTTPS、FTP等的Web缓存代理。它通过缓存和重用频繁请求的网页来减少带宽并缩短响应时间。Squid具有广泛的访问控制,是一款出色的服务器加速器。它运行在大多数可用的操作系统上,包括Windows,并根据GNU GPL获得许可

似乎是另一种选择()。另请参阅,以获取各种HTTP代理工具的详细列表


这两个选项是否满足您的特定用例?

不确定您为什么需要为此提供服务。如果将数据链接到Redis,您几乎可以编写自己的缓存服务

Redis是一个内存中的数据库,具有出色的响应时间。唯一的问题是,您需要一个相同数据的永久存储库,以防redis崩溃,您仍然需要访问数据

提供一个nodeJS示例,希望对您有所帮助。是的,如果需要,您还可以在那里配置时间段

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);
                    });
                }
            });
        }
    });
};

不知道你为什么需要这方面的服务。如果将数据链接到Redis,您几乎可以编写自己的缓存服务

Redis是一个内存中的数据库,具有出色的响应时间。唯一的问题是,您需要一个相同数据的永久存储库,以防redis崩溃,您仍然需要访问数据

提供一个nodeJS示例,希望对您有所帮助。是的,如果需要,您还可以在那里配置时间段

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);
                    });
                }
            });
        }
    });
};