【问题标题】:Azure Redis Cache data loss?Azure Redis 缓存数据丢失?
【发布时间】:2016-02-19 16:51:38
【问题描述】:

我有一个 Node.js 应用程序,它通过 Websocket 连接接收数据并将每条消息推送到 Azure Redis 缓存。它将持久的消息数组存储在一个变量中以供下游使用,并定期从缓存中同步该数组。有点复杂,但稍后我想将写入缓存的应用程序的一半与从中读取的应用程序的一半分开..

在格林威治标准时间 02:00 左右,根据 Azure 门户统计数据,我似乎已经开始在同步时收到“缓存未命中”,这持续了几个小时,然后我在 05 年左右的某个时间再次开始收到“缓存命中” :00。

缓存未命中对应于 CPU 使用率的突然增加,在 05:00 左右达到峰值。当我说峰值时,我的意思是它达到了 81%,而之前的最大值约为 6%。

所以在 05:00 左右的某个时间,CPU 达到峰值,然后又恢复正常,“缓存未命中”消失了,但是查看缓存内存使用情况,我从使用的大约 37.4mb 下降到大约使用的 3.85mb(其中我怀疑是“空”状态),并且此应用程序正在使用的列表已清空。

应用程序对缓存运行的唯一函数是 LPUSH 和 LRANGE,没有任何功能可以删除数据,如果有人想知道,当 CPU 加速内存使用时,没有什么可以删除的表明出现了恶意添加的数据。

它只在基本计划中,所以我不期望它是无懈可击的或任何东西,但即使没有标准计划的复制功能,我也预计它不会完全自我清除 -我的印象是,Redis 会定期将自身写入磁盘,并在从错误中恢复时从中恢复。

所有这些都是我的提问方式:

  1. 有人知道这里可能发生了什么吗?

  2. 如果这是其他人能够意外触发自己的事情,我是否应该注意其他使用相同缓存的应用程序中可能会导致灾难性失败的陷阱?

  3. 我会欢迎一大群人告诉我标准计划不会受到此类问题的影响,因为我已经为此付出了代价,如果觉得那是正确的就好了打电话。

提前非常感谢..

【问题讨论】:

    标签: node.js azure azure-redis-cache


    【解决方案1】:

    这是我的想法:

    Azure Redis 缓存将信息存储在内存中。默认情况下,它不会在磁盘上保存“备份”,因此,您在内存中有信息,但由于某种原因服务器重新启动并且您丢失了数据。

    PS:看到这个反馈,目前还没有使用 azure-redis 缓存在磁盘上持久化信息的选项http://feedback.azure.com/forums/169382-cache/suggestions/6022838-redis-cache-should-also-support-persistence

    【讨论】:

    • 顺便说一句:内存中的事情与您选择的是基本计划还是标准计划无关。
    【解决方案2】:
    1. 确保您不使用基本计划。基本计划不考虑 SLA,根据我的经验,它经常丢失数据
    2. 标准计划提供 SLA 并使用 2 个 Redis 缓存实例。它非常稳定,不会丢失我们的数据,尽管这种情况仍然可能发生。
    3. 现在,如果您打算将 Azure Redis 用作数据库,但不用作缓存,则需要利用 Azure Redis 缓存高级层中已经提供的数据持久性功能:https://azure.microsoft.com/en-us/documentation/articles/cache-premium-tier-intro(请参阅 Redis 数据持久性)

    【讨论】:

      【解决方案3】:

      James,使用 Standards 实例应该可以大大提高可用性。

      对于基本层,对主节点的任何 Azure Fabric 更新(或硬件故障)都会导致您丢失所有数据。

      即使在标准层中,Azure Redis 缓存也不支持持久性(写入磁盘/blob)。但是标准层确实为您提供了一个复制的从节点,如果您的主节点出现故障,它可以接管。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 2019-05-17
        • 2021-07-02
        相关资源
        最近更新 更多