何时在黑暗中使用轮询和流式传输

When to use polling and streaming in launch darkly

我最近开始使用 launch darkly(LD)。我正在探索 LD 如何更新其功能标志。

如前所述Here,有两种方法。

  1. 流媒体
  2. 轮询

我只是在想在什么情况下哪种实现会更好。经过对streaming vs polling的一些研究,发现Streamingpolling有以下优点。

我很确定上述所有优势都是有代价的。所以,

  1. 通过轮询使用流式传输有什么缺点吗?
  2. 在什么情况下应该首选轮询?或者反过来?
  3. 我应该根据什么因素来决定是直播还是投票?

流媒体

流式传输要求您的应用程序始终处于活动状态。在无服务器环境中可能并非如此。此外,流媒体解决方案通常依赖于始终在后台打开的连接。这可能代价高昂,因此功能标志提供商倾向于限制您可以对其基础设施保持开放的并发连接数。如果您仅在少数应用程序实例中使用功能标志,这可能不是问题。但是,如果您想将功能标志更新流式传输到移动应用程序或大量微服务,您将很容易达到限制。

轮询

轮询听起来没那么花哨,但它是一种可靠且强大的老派模式,几乎适用于所有环境。

网络挂钩

还有第三种选择:webhooks。基本思想是您在自己的一端创建一个 HTTP 端点,只要发生功能标志值更新,他的功能标志服务就会调用该端点。通过这种方式,您可以获得有关功能标志值更改的 "notification"。例如 ConfigCat 支持这个模型。 ConfigCat 可以通过调用您的 webhook 和(可选)将新值推送到您的终端来通知您的基础设施。 Webhooks 相对于流媒体的优势是维护成本低,因此功能标志服务提供商不会对其进行太多限制(例如 ConfigCat 可以为您提供无限的 webhooks)。

如何决定

我将如何使用上述 3 个选项实际上取决于您的用例。一般的经验法则是:默认使用轮询并向组件添加准实时通知(通过流式传输或通过 webhook),了解功能标志值更新至关重要。

除了@Zoltan 的回答外,我还从 LaunchDarkly 的 Effective Feature management E book(第 36 页)

中找到了以下内容

在任何网络系统中,都有两种分发信息的方法。

轮询是端点(客户端或服务器)定期请求更新的方法。流式传输是第二种方法,当中央机构将新值推送到所有端点时,因为它们 change.Both 选项有利有弊。

但是,在基于轮询的系统中,您面临着一个没有吸引力的权衡:要么您不经常轮询并且 运行 应用程序的不同部分具有不同标志状态的风险,要么您轮询非常频繁,并且在系统负载、网络带宽和支持高需求的必要基础设施方面承担高成本。

另一方面,流式架构提供了速度优势和一致性保证。流式处理更适合大规模和分布式系统。在此设计中,每个客户端都与功能管理系统保持 运行 连接,该系统会立即将发生的任何更改发送给所有客户端。

投票专家:

  • 简单
  • 轻松缓存

轮询缺点:

  • 效率低下。所有客户端都需要暂时连接,无论是否有变化。

  • 更改需要大约两倍的轮询间隔才能传播到所有客户端。

  • 由于轮询间隔较长,系统可能会造成“裂脑”情况,即新标志和旧标志状态同时存在时间.

流媒体专家:

  • 大规模高效。每个客户端仅在必要时才接收消息。

  • 快速传播。更改可以实时推送给客户端。

流媒体缺点:

  • 需要中央服务为每个客户端维护连接

  • 假定网络可靠

对于我的用例,我决定在不需要经常更新标志(长轮询间隔)并且不关心不一致的地方使用轮询(裂脑) .

对于需要即时标志更新和一致性的应用程序,流式处理很重要。