2014-12-01 5 views
0

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

О:

У меня есть два проекта на основе PHP: первый проект (CLIENT), который подключается ко второму (API) с помощью завитка. В проекте API выполняются некоторые вычисления, которые выполняются при отправке данных CLIENT.

Проблема:

Если проект API будет простои по любым вопросам или просто замедляет КЛИЕНТ не должен ждать, пока возвращает API результатов, поэтому он замедляет тоже. Проекты находятся в интенсивном развитии, поэтому расчеты также увеличатся.

Вопрос:

Как я могу избежать данной проблемы, совершенно API должен не влияет на производительность КЛИЕНТА. Может быть, есть какие-то шаблоны дизайна или что-то еще? Я читал о ASYNCH PHP, кэшируя шаблоны, но все еще не нашел решения. Если есть какие-либо решения (шаблоны), было бы здорово иметь примеры на практике!

P.S. Запрос не замедляется, замедляет вычисления. И я согласен, что в первую очередь их следует оптимизировать. P.P.S. Всего запросов более 60 в минуту (> ~ 60/мин).

ответ

1

Есть два подхода, оба работают, но имеют разные плюсы и минусы ...

  1. асинхронная обработка, а это означает, что клиент не ждет каждого отдельного вызова, пока не вернется (его возвращает ответ), но движется дальше и полагается на механизм, подобный обратному вызову или похожим на обработку ответа, когда он приходит. Это, например, то, что обычно делается в веб-клиентах с использованием javascript и ajax для удаленных вызовов. Это делает клиента значительно более свободным, но, очевидно, предполагает более сложную работу кода и пользовательского интерфейса.

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

+0

Благодарим за подробный ответ! Я думаю, что можно реализовать и то, и другое! Вначале опция asynch просто отправляет запрос, если тайник TTL истек и не ждет ответа, и механизм очереди принимает, что запрашивает операцию только очередей и отправляет ответ, когда это делается. – deividaspetraitis

+0

Осторожно: TTL не может возникать в типичных вызовах API. А также кэширование не имеет никакого отношения к асинхронной обработке. Асинхронный означает, что вы выполните _do_ запрос, но обработка ответа выполняется позже в фоновом режиме (обычно с помощью обратного вызова). Система очередности sno «посылает ответ», она обрабатывает ответ и принимает все действия, связанные с ним. – arkascha

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