2014-11-19 2 views
0

Во время нагрузочного тестирования нашего модуля мы обнаружили, что вызовы вставки большой квадратики занимают время (3-4 с). Я не уверен, что все в порядке. Мы используем java biguqery client libarary, и в среднем мы нажимаем 500 записей на вызов api. Мы ожидаем, что в наш модуль будет миллион записей в секунду, поэтому вставка большого количества запросов является узким местом для обработки этого трафика. В настоящее время требуется много часов для передачи данных. Сообщите мне, если нам нужна дополнительная информация о коде или сценарии или что-то еще.Взаимодействие с потоковыми вещами Bigquery, принимающее время

Благодаря Pankaj

ответ

3

Поскольку потоковый имеет ограниченный размер полезной нагрузки, см Quota policy это легче говорить о времени, как полезная нагрузка ограничена таким же образом к нам обоим, но я упомяну другие побочные эффекты тоже ,

Мы измеряем между 1200-2500 мс для каждого запроса потоковой передачи, и это было согласовано в течение последнего месяца, как вы можете видеть на диаграмме.

enter image description here

Мы видели несколько побочных эффектов, хотя:

  • запрос случайно терпит неудачу с типом «Backend ошибки»
  • запрос случайно терпит неудачу с типом «ошибка соединения»
  • просьбе случайным образом терпит неудачу с типом «тайм-аут» (смотрите здесь, поскольку только некоторые строки терпят неудачу, а не всю полезную нагрузку)
  • некоторая другая ошибка mes мудрецы не являются описательными, и они настолько расплывчаты, что они вам не помогают, просто повторите попытку.
  • мы видим сотни таких сбоев каждый день, поэтому они почти постоянны и не связаны с облачным здоровьем.

Для всех этих случаев мы открыли случаи в платной поддержке Google Enterprise, но, к сожалению, они не разрешили его. Он швы рекомендуемый вариант, чтобы взять для них экспоненциальный откат с повторением, даже поддержка, которую это нужно сделать. Что лично меня не радует.


подход вы выбрали, если занимает несколько часов, что означает it does not scale, и не будет масштабироваться. Вам необходимо пересмотреть подход с помощью async processes. Чтобы закончить раньше, вам нужно запустить несколько сотрудников, производительность потоковой передачи будет одинаковой. Просто имея 10 рабочих параллельно, это означает, что время будет в 10 раз меньше.

Обработка в фоновом режиме Задачи, связанные с привязкой или привязкой к привязке к IO, теперь являются распространенной практикой в ​​большинстве веб-приложений. Существует множество программ для создания фоновых заданий, некоторые из которых основаны на системе обмена сообщениями, например Beanstalkd.

В принципе, вам необходимо распределить задания вставки по закрытой сети, чтобы определить их приоритет и использовать (запустить). Ну, это именно то, что предоставляет Beanstalkd.

Beanstalkd дает возможность организовать рабочие места в трубах, каждая труба соответствует типу работы.

Вам нужен API/производитель, который может помещать задания на трубку, скажем, json-представление строки. Это была функция убийцы для нашего прецедента. Таким образом, у нас есть API, который получает строки и помещает их в трубку, это занимает всего несколько миллисекунд, так что вы можете достичь быстрого времени отклика.

С другой стороны, у вас есть куча заданий на некоторых трубах. Вам нужен агент. Агент/потребитель может зарезервировать работу.

Он также помогает вам в управлении заданиями и повторных попытках: когда работа успешно обрабатывается, потребитель может удалить задание из трубки. В случае неудачи потребитель может похоронить работу. Эта работа не будет возвращена в трубку, но будет доступна для дальнейшей проверки.

Потребитель может освободить работу, Beanstalkd вернет эту работу обратно в трубку и сделает ее доступной для другого клиента.

Клиенты Beanstalkd могут быть найдены на большинстве распространенных языков, web interface может быть полезен для отладки.

+0

Благодарим Pentium, мы используем другую систему обмена сообщениями kafka и делаем то же, что вы предложили. Увеличение числа рабочих, безусловно, является решением, о котором мы уже думали. Я просто хотел подтвердить от любого представителя Google, если это максимальная производительность api, которую мы можем получить из потокового apis. – pankajmi

Смежные вопросы