API потоковой передачи данных — высокая доступность
В моей архитектуре на AWS у меня есть сервис, работающий на экземпляре EC2, который вызывает API потоковой передачи Twitter для приема данных, т. е. приема твитов в реальном времени. Я называю этот сервис TwitterClient.
Twitter API использует своего рода долгий опрос по протоколу HTTP для доставки потоковых данных. В документации сказано, что между вашим приложением (в моем случае TwitterClient) и API открывается одно соединение, через которое отправляются новые твиты.
Затем TwitterClient передает твиты в режиме реального времени серверной части (используя потоки Kinesis Data) для обработки.
Проблема, с которой я столкнулся, заключается в том, что параллельная работа нескольких экземпляров EC2 приведет к тому, что дублирующиеся твиты будут приниматься, и каждый твит будет обрабатываться несколько раз. Однако только один экземпляр EC2 становится единственной точкой отказа.
Я не могу позволить себе простои, так как не могу пропустить ни одного твита.
Что нужно сделать, чтобы обеспечить высокую доступность?
Изменить: добавлено краткое описание того, как Twitter API доставляет потоковые данные.
2 ответа
Самый простой способ реализовать это — запустить несколько экземпляров EC2 параллельно в разных регионах.Вы, конечно, можете усложнить и использовать пульсацию между экземплярами, но это, вероятно, чрезмерная инженерия.
несколько экземпляров EC2 параллельно приведут к дублированию твитов, и каждый твит будет обработан несколько раз.
Твиты имеют уникальный идентификатор сообщения, который можно использовать для дедупликации.
Я не могу пропустить ни одного твита
Это ваша настоящая проблема. Twitter ограничивает вас определенным количеством запросов за 15-минутный период. Если предположить, что у вас есть разумные правила фильтрации (т. е. вы не пытаетесь прочитать весь поток твитов или даже поток твитов по широкой теме), этого должно быть достаточно для захвата всех твитов.
Однако этого может быть недостаточно, если вы используете несколько экземпляров. Вы можете попробовать использовать два ключа API (при условии, что Twitter позволяет это) или настроить частоту опроса так, чтобы несколько экземпляров могли работать одновременно.
Остерегайтесь, однако: насколько я знаю, нет никаких гарантий. Если вам нужен гарантированный доступ ко всем релевантным твитам, вам нужно поговорить с Twitter (и быть готовым заплатить им за эту привилегию).
Вы можете настроить запуск 2 EC2 за балансировщиком нагрузки, сохраняя одновременно только один экземпляр EC2 активным, а другой — пассивным (или резервным). 2-й будет активен, когда 1-й отключен.