Кэширование XML-ответов - PullRequest
       4

Кэширование XML-ответов

0 голосов
/ 10 декабря 2010

У нас есть этот API для нашей системы заказов в нашем Call-центре, с которым связывается наш онлайн-заказ. Но многие запросы и ответы одинаковы, более или менее статичны, но сервер API генерирует их, а не просто предоставляет статический файл.

Что вы предлагаете как лучший подход для кэширования XML-ответов? Я посмотрел на Zend_Cache. Но из того, что я понимаю, я думаю, что это клиент / сессия, я хотел бы, чтобы все клиенты использовали один и тот же кеш.

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

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

Обновление: 13 декабря 2010 г. 10,45

Время запроса

2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /ccstatus [0.054742097854614]
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storestatus [0.063634157180786]
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storestatus [0.062693119049072]
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storestatus [0.062756061553955]
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storestatus [0.062740087509155]
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /storelocations [0.065214872360229]
2010-12-10T14:43:46+01:00 DEBUG (7): XML GET /coupons [0.070861101150513]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /packagedeals [0.51115489006042]
2010-12-10T14:43:47+01:00 DEBUG (7): XML POST /price [0.065691947937012]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /pizzas [0.10685706138611]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /bevtypes [0.059874057769775]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /bevsizes [0.056848049163818]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /items [0.070401191711426]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062546014785767]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.063254117965698]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062647104263306]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062632083892822]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062486886978149]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /items [0.059072017669678]
2010-12-10T14:43:47+01:00 DEBUG (7): XML GET /storestatus [0.062618970870972]
2010-12-10T14:43:48+01:00 DEBUG (7): XML POST /price [0.063409805297852]

Это запросы на один просмотр страницы, показывающий страницу побочных заказов, и корзина содержит 2 элемента.

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

Ответы [ 2 ]

4 голосов
/ 10 декабря 2010

Zend_Cache не основан на сеансе.Он имеет количество бэкэндов для хранения кэшированных данных в .Например, вы можете настроить сервер memcached в своей сети и хранить там XML.Вы можете кэшировать результаты вызова функции или всей страницы или произвольные ключи.

Вы можете найти ряд статей о Zend_Cache в Devzone

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

1 голос
/ 10 декабря 2010

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

Другие запросы - «запросы API» - если они действительно настолько статичны, как вы предлагаете, то они кажутся отличным кандидатом на прямой Zend_Cache с бэкэндом File или Memcached. Просто нужно выяснить алгоритм генерации уникального ключа для каждого статического API-запроса, который вы хотите кешировать.

Вы можете даже указать бесконечное время жизни в опциях веб-интерфейса и запустить задание cron, чтобы заполнить кэш с любой частотой, которую вы считаете достаточно разумной, чтобы сохранить контент свежим.

Просто мысли вслух.

ура!

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