0

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

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

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

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

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

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

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

4

2 回答 2

1

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

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

推文具有可用于重复数据删除的唯一消息 ID。

我不能错过任何一条推文

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

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

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

于 2021-01-08T15:39:02.020 回答
0

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

于 2021-01-08T13:40:06.753 回答