Поскольку потоковый имеет ограниченный размер полезной нагрузки, см Quota policy это легче говорить о времени, как полезная нагрузка ограничена таким же образом к нам обоим, но я упомяну другие побочные эффекты тоже ,
Мы измеряем между 1200-2500 мс для каждого запроса потоковой передачи, и это было согласовано в течение последнего месяца, как вы можете видеть на диаграмме.
Мы видели несколько побочных эффектов, хотя:
- запрос случайно терпит неудачу с типом «Backend ошибки»
- запрос случайно терпит неудачу с типом «ошибка соединения»
- просьбе случайным образом терпит неудачу с типом «тайм-аут» (смотрите здесь, поскольку только некоторые строки терпят неудачу, а не всю полезную нагрузку)
- некоторая другая ошибка mes мудрецы не являются описательными, и они настолько расплывчаты, что они вам не помогают, просто повторите попытку.
- мы видим сотни таких сбоев каждый день, поэтому они почти постоянны и не связаны с облачным здоровьем.
Для всех этих случаев мы открыли случаи в платной поддержке Google Enterprise, но, к сожалению, они не разрешили его. Он швы рекомендуемый вариант, чтобы взять для них экспоненциальный откат с повторением, даже поддержка, которую это нужно сделать. Что лично меня не радует.
подход вы выбрали, если занимает несколько часов, что означает it does not scale
, и не будет масштабироваться. Вам необходимо пересмотреть подход с помощью async processes
. Чтобы закончить раньше, вам нужно запустить несколько сотрудников, производительность потоковой передачи будет одинаковой. Просто имея 10 рабочих параллельно, это означает, что время будет в 10 раз меньше.
Обработка в фоновом режиме Задачи, связанные с привязкой или привязкой к привязке к IO, теперь являются распространенной практикой в большинстве веб-приложений. Существует множество программ для создания фоновых заданий, некоторые из которых основаны на системе обмена сообщениями, например Beanstalkd.
В принципе, вам необходимо распределить задания вставки по закрытой сети, чтобы определить их приоритет и использовать (запустить). Ну, это именно то, что предоставляет Beanstalkd.
Beanstalkd дает возможность организовать рабочие места в трубах, каждая труба соответствует типу работы.
Вам нужен API/производитель, который может помещать задания на трубку, скажем, json-представление строки. Это была функция убийцы для нашего прецедента. Таким образом, у нас есть API, который получает строки и помещает их в трубку, это занимает всего несколько миллисекунд, так что вы можете достичь быстрого времени отклика.
С другой стороны, у вас есть куча заданий на некоторых трубах. Вам нужен агент. Агент/потребитель может зарезервировать работу.
Он также помогает вам в управлении заданиями и повторных попытках: когда работа успешно обрабатывается, потребитель может удалить задание из трубки. В случае неудачи потребитель может похоронить работу. Эта работа не будет возвращена в трубку, но будет доступна для дальнейшей проверки.
Потребитель может освободить работу, Beanstalkd вернет эту работу обратно в трубку и сделает ее доступной для другого клиента.
Клиенты Beanstalkd могут быть найдены на большинстве распространенных языков, web interface может быть полезен для отладки.
Благодарим Pentium, мы используем другую систему обмена сообщениями kafka и делаем то же, что вы предложили. Увеличение числа рабочих, безусловно, является решением, о котором мы уже думали. Я просто хотел подтвердить от любого представителя Google, если это максимальная производительность api, которую мы можем получить из потокового apis. – pankajmi