用户连通性:投入生产两年 — 经验教训与新模式

发布: (2025年12月24日 GMT+8 14:23)
4 min read
原文: Dev.to

Source: Dev.to

引言

这是我之前关于 用户连通性:在线和离线用户状态的实时 Web 解决方案 的文章的后续。自从我首次将用户连通性解决方案部署到生产环境,已经快两年了。最初的实验已经成为我架构的基石。

最近,我遇到了由多个 API 进程引起的复杂数据库死锁问题。经过分析,我发现可以利用我的事件驱动架构来解决。通过将特定任务拆分并异步处理,我彻底消除了死锁。

事件分发器 的目标很简单:一个监听 Redis 过期事件且仅此而已的中心服务。

事件分发器的优势

  • 可追踪性 – 所有事件都经过同一点,便于追踪问题。
  • 日志记录 – 每个接收到的事件都会记录到 Azure Cosmos DB 并标记其状态。
  • 可伸缩性 – 工作函数可以根据队列深度独立扩展。
  • 可靠性 – 单一、受良好监控的监听器降低了漏掉事件的风险。

在运行该架构两年后,我对使用 Azure 服务实现类似方案的人员有两点关键观察。

关键观察

1. 为 Redis 监听器使用 Premium 计划

为什么?
Consumption 计划存在冷启动延迟和连接寿命限制。当 Function App 处于空闲状态时,它可能会进入休眠,从而错过 Redis 的事件。使用 Premium 计划时,Function App 始终保持在线,拥有长连接——没有冷启动,也不会错过事件。自从迁移到 Premium 后,我没有看到过任何丢失的事件。

你可能会问:原来的用户连通性方案是如何在 Consumption 计划上工作的?
它能够运行,但错过事件的风险更高。

2. Azure 托管 Redis 的限制

有一个重要限制:Azure 托管的 Redis 服务器无法完整配置以可靠地发送过期事件。当底层服务器重启或循环时,它们会丢失配置,进而停止发送过期事件。

我已向微软报告了此问题。他们确认已列入待办事项,但截至目前仍没有解决方案。如果你的架构依赖 Redis 键的过期事件,请在迁移到 Azure 托管 Redis 之前注意此限制。

收获

  • 为 Redis 监听器使用 Premium 计划,以避免冷启动和事件丢失。
  • 如果依赖过期事件,请对 Azure 托管 Redis 持谨慎态度,因为服务器重启时配置可能会丢失。

希望这些经验能帮助其他人更好地利用此架构。

Back to Blog

相关文章

阅读更多 »

Redis Pub/Sub 与 Redis Streams

Redis 提供了多种在服务之间处理消息的方式——其中 Pub/Sub 和 Streams 是两个关键的内置选项。虽然它们看起来相似……

数据库分片 vs 分区

数据库分片与分区的区别 什么是数据库分片 - 水平数据分布 – 数据被拆分为多个分片,每个分片存储在不同的…