0

Я пытаюсь написать пользовательский Source с использованием SDK Python Dataflow для чтения данных JSON параллельно с конечной точкой REST.HttpIO - Потребление внешних ресурсов в преобразовании потока данных

E.g. для заданного набора идентификаторов, мне нужно, чтобы извлечь данные из: https://foo.com/api/results/1 https://foo.com/api/results/2 ... https://foo.com/api/results/{maxID}

ключевых особенности мне нужно является мониторингом & ограничения скорости: несмотря на то, мне нужно параллелизм (либо поток/процесс на основе или с использованием асинхронной/сопрограммы) , Мне также нужно убедиться, что моя работа остается «вежливой» в отношении конечной точки API - эффективно избегая принудительного DDoS.

Использование psq, я должен быть в состоянии осуществить какой-то ограничение по скорости механизма, но тогда я бы потерять способность контролировать прогресс & ETA с использованием Dataflow Service Monitoring

Кажется, что, хотя они хорошо работают вместе , мониторинг не унифицирован между облачным документооборотом Google и облачным пабом Google/Sub (который использует мониторинг Google Stackdriver)

Как мне следует построить массово-параллельный рабочий поток HTTP-клиентов, который реализует ограничение скорости и имеет веб-интерфейс мониторинг?

ответ

1

В настоящее время Dataflow не имеет встроенного способа глобального ограничения скорости, но вы можете использовать Source API для этого. Основная концепция заключается в том, что каждый раскол источника будет обрабатываться не более чем одним потоком, поэтому вы можете реализовать локальную скорость, ограничивающую отдельно для каждого разделения.

Это решение вообще не использует Pub/Sub, поэтому вы можете использовать интерфейс мониторинга потока данных исключительно. Если вы хотите настроить оповещения на основе определенных событий в вашем конвейере, вы можете сделать что-то вроде this

+0

Ограничение скорости каждой нити недостаточно, хотя, если я точно не знаю, сколько потоков выполняется в любой момент времени. Есть ли способ рассказать, сколько потоков выполняется во время выполнения конвейера? –

+0

По умолчанию пакетный поток данных использует один поток для каждого рабочего (если вы используете виртуальные машины n1-standard-1). Это дает вам верхнюю границу по количеству потоков, активно читающих ваши конечные точки – danielm