Стандартная среда AppEngine (Java 8) PushQueues иногда до 10 минут с задержкой - PullRequest
0 голосов
/ 07 мая 2019

Мы используем стандартную среду appengine (Java 8 // SDK версии 1.9.73) с pushQueues.

Это определение нашей очереди:

<queue>
            <name>push-device-send-queue-2</name>
            <rate>250/s</rate>
            <bucket-size>50</bucket-size>
            <max-concurrent-requests>1000</max-concurrent-requests>
            <retry-parameters>
                    <task-retry-limit>3</task-retry-limit>
                    <task-age-limit>2m</task-age-limit>
            </retry-parameters>
</queue>

Это наши параметры автоматического масштабирования:

    <instance-class>F4</instance-class>
    <automatic-scaling>
            <min-idle-instances>1</min-idle-instances>
            <max-idle-instances>1</max-idle-instances>
            <min-pending-latency>200ms</min-pending-latency>
            <max-pending-latency>3s</max-pending-latency>
            <max-concurrent-requests>15</max-concurrent-requests>
    </automatic-scaling>

Очередь запускается с помощью следующего кода:

TaskOptions options = TaskOptions.Builder
                            .withUrl("/pushDeviceSendQueue")
                            .header("charset", "UTF-8")
                            .method(Method.POST)
                            .payload(gson.toJson(data));
queue.addAsync(options);

в сервлете вызывается future.get (), который запускает код и обычно завершается примерно через 1-2 секунды.потом.Поэтому мы ожидаем, что к тому времени все задачи будут поставлены в очередь.

Мы настроили установку kibana для отслеживания задержек, возникающих между запуском сервлета и выполнением сервлета очередей.Большинство из них в порядке, но около 1% из них запускаются до 10 минут с опозданием (все метки времени составляют около 600 000 мс). Открытие https://console.cloud.google.com/cloudtasks при возникновении проблемы показывает отдельные задачи, находящиеся вочередь на указанное количество времени (7-10 минут), если возникнет проблема.

Забавно: запланированные задачи «обгоняют» одну проблемную задачу.Они просто выполняются менее чем за несколько секунд.Очередь в данный момент не максимальна, как вы можете видеть по нашим очень высоким настройкам очереди (пропускная способность).В основном выполняется только несколько задач (~ 5-10)

То, что мы ожидали, произойдет:

Все очереди задач, запланированные с помощью приведенного выше кода для запуска в течение секунд, а не 10 минут (что это за 10-минутный магический номер?)

Шаги для воспроизведения:

Запланируйте задачу, используя приведенный выше код.

Пожалуйста, ознакомьтесь с этим пояснительным отрывком из журнала.

enter image description here

Ссылка на ввод кода Google: https://issuetracker.google.com/issues/132135612

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...