【问题标题】:Solution for caching an api with specific behaviour缓存具有特定行为的 api 的解决方案
【发布时间】:2018-07-15 13:55:09
【问题描述】:

我正在开发一个服务于游戏的 rest api。每三分钟在服务器上运行一个作业,更新该游戏的重要信息。因此,在此作业运行后,我需要使缓存无效并使用最近的信息创建一个新的。

好的,我在我的应用程序 MemCached 上实现了,但是一位资深开发人员说有其他缓存非常重要。他建议我使用 Varnish,但我真的不知道它是否符合我的逻辑。

您对我如何实现这一目标有任何建议吗?

【问题讨论】:

标签: caching memcached varnish


【解决方案1】:

您可以使用Mcrouter 一个 memcached 协议路由器来复制您的 Memcache。 此配置可以处理您的请求:

{
"pools": {
    "A": {
        "servers": [
            // First Memcache address:
            "memcache_1_ip:11211",
            // Second Memcache address:
            "memcache_2_ip:11211"
        ]
    }
},
"route": {
    "type": "OperationSelectorRoute",
    "operation_policies": {
        "add": "AllSyncRoute|Pool|A",
        "delete": "AllSyncRoute|Pool|A",
        "get": "LatestRoute|Pool|A",
        "set": "AllSyncRoute|Pool|A"
    }
}

【讨论】:

  • 对。我的疑问是:McRouter 会像 V​​arnish 一样工作吗?我的意思是......我的应用程序和我的客户端之间的缓存?
  • 已经在这里提问了:unix.stackexchange.com/questions/277137/…
【解决方案2】:

Varnish 在您的情况下可以正常工作。当然,Memcached 用于缓存瞬态数据,而 Varnish 是一个完整的页面缓存,因此它非常适合减少后端应用程序的负载(无论它使用哪种语言,PHP 或其他任何语言)。

您无需对应用程序进行任何更改即可使用 Varnish 正确缓存内容(但是您也可以走这条路线,并调整您的应用程序以发送正确的缓存标头)。只需开发带有缓存策略说明的 VCL(清漆配置语言)文件。

不要对您在网上找到的 VCL 文件使用完整的复制粘贴。尽可能添加最小的片段,了解事情是如何工作的,Varnish 不会让你失望。重要的是:

  • 确保您的缓存因 API 令牌而异(如果您用于 API 身份验证)。您将在vcl_hash 过程中实现这一点。

  • 在您的工作中集成缓存清除以更新信息:清漆缓存可以通过使用PURGE HTTP 请求来清除(同样,您需要在vcl_recv 中为其开发必要的 VCL 代码程序)。

【讨论】:

    猜你喜欢
    • 2011-03-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 2013-09-07
    • 1970-01-01
    相关资源
    最近更新 更多