Лучший подход для веб-службы PHP с несколькими клиентами и предотвращение паники в кэше - PullRequest
0 голосов
/ 21 июня 2019

У меня есть существующий веб-сервис PHP, который используется для выполнения сложных вычислений, выполнение которых занимает около 10 секунд. Конкретный шаблон использования клиента состоит в том, что несколько клиентов почти всегда запрашивают один и тот же расчет в течение 10-секундного окна.

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

Теоретически, мы хотели бы просто выполнить первый запрос клиента и вычислить результат, а затем поместить вычисленный результат в кэш. Если последующие клиентские запросы приходят и ищут этот результат:

а) Если результат уже кэширован - Отлично! б) Если результат еще не кэширован, но обрабатывается, дождитесь его появления в кэше, прежде чем возвращать это значение клиенту.

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

Мы еще не приняли решение о кеше, поэтому также открыты для предложений по использованию кеша. Громкость низкая, поэтому в памяти все в порядке. Существуют ли какие-либо реализации кеша, которые фактически позаботятся о проблеме и заблокируют чтение кеша, когда другой поток фактически работает над заполнением записи в кеш?

Кэширование - это правильно? Стоит ли вместо этого использовать очередь?!

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

1 Ответ

0 голосов
/ 21 июня 2019

С точки зрения решений, которые вы можете реализовать, я бы обратился к рабочему потоку, чтобы выполнить вычисления на основе очереди входящих запросов.Таким образом, для первого запроса работник проверяет кэш (промах), вычисляет значение, сохраняет в кэше и возвращает значение.Любой последующий запрос из очереди будет затем получать кэшированное значение от рабочего.

Теперь, если вам не нравятся рабочие потоки и очереди, вы можете добиться того же с помощью мьютекса в «проверить кэш, выполнить вычисления, сохранитьв кеше »блок кода.

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

...