微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

数据流API-高可用

如何解决数据流API-高可用

在我在 AWS 上的架构中,我有一个在 EC2 实例上运行的服务,该服务调用 Twitter 流 API 进行数据摄取,即实时推文的摄取。我将此服务称为 TwitterClient。

Twitter API 使用一种基于 HTTP 协议的长轮询来传送流数据。文档说 - 在您的应用(在我的例子中是 TwitterClient)和 API 之间打开了一个连接,通过该连接发送了新的推文。

TwitterClient 然后将实时推文传递到后端(使用 Kinesis 数据流)进行处理。

我面临的问题是 - 并行运行多个 EC2 实例将导致摄取重复的推文,并且每条推文都将被多次处理。但是,只有一个 EC2 实例成为单点故障。

我无法承受停机时间,因为我不能错过任何一条推文。

我应该怎么做才能确保高可用性?

编辑:添加了 Twitter API 如何提供流数据的简要说明

解决方法

实现这一点的最简单方法是并行运行多个 EC2 实例,在不同的区域。您当然可以变得更复杂,并在实例之间使用心跳,但这可能是过度设计的.

多个 EC2 实例并行将导致摄取重复的推文,并且每条推文将被多次处理

推文有一个唯一的消息 ID,可用于进行重复数据删除。

我不能错过一条推文

这才是你真正的问题。 Twitter 将您限制为每 15 分钟的一定数量的请求。假设您有合理的过滤规则(即,您不会尝试阅读整个推文流,甚至不是针对广泛主题的推文流),那么这应该足以捕获所有推文。 >

但是,如果您运行多个实例,这可能还不够。您可以尝试使用两个 API 密钥(假设 Twitter 允许这样做)或将轮询频率调整为允许多个实例同时运行的频率。

但是请注意:据我所知,没有保证。如果您需要保证可以访问每条相关推文,则需要与 Twitter 交谈(并准备为特权付费)。

,

您可以设置在负载均衡器后面运行 2 个 EC2,一次仅保持一个 EC2 实例处于活动状态,而其他实例则作为被动(或备份)实例。当 1st 关闭时,2nd 将处于活动状态。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。