Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Кэширование — это процесс временного хранения данных в области памяти, называемой кэшем, для последующего использования. Кэширование данных обеспечивает значительные преимущества в производительности, поскольку:
- Обеспечивает более быстрый поиск данных.
- Сокращает время обработки, избегая повторного создания данных.
- Предотвращает попадание API-запросов на бэкэнд-серверы, тем самым снижая нагрузку на эти серверы.
- Позволяет более эффективно использовать ресурсы системы/приложения.
- Улучшает время отклика API.
В тех случаях, когда нам часто приходится обращаться к данным, которые не слишком часто меняются, мы настоятельно рекомендуем использовать кэш для их хранения.
Apigee Edge предоставляет возможность хранить данные в кэше во время выполнения для обеспечения постоянного хранения и более быстрого доступа. Функция кэширования доступна через политики PopulateCache , LookupCache , InvalidateCache и ResponseCache .
В этом разделе рассмотрим политику кэширования ответов. Политика кэширования ответов в платформе Apigee Edge позволяет кэшировать ответы от бэкэнд-серверов. Если клиентские приложения многократно отправляют запросы к одному и тому же бэкэнд-ресурсу, и этот ресурс периодически обновляется, то мы можем кэшировать эти ответы, используя эту политику. Политика кэширования ответов помогает возвращать кэшированные ответы и, следовательно, избегать ненужной пересылки запросов на бэкэнд-серверы.
Политика кэширования ответов:
- Уменьшает количество запросов, поступающих на бэкэнд.
- Снижает пропускную способность сети
- Улучшает производительность API и время отклика.
Антипаттерн
Политика ResponseCache по умолчанию позволяет кэшировать HTTP-ответы с любым возможным кодом состояния. Это означает, что кэшируются как успешные, так и ошибочные ответы.
Вот пример политики кэширования ответов с конфигурацией по умолчанию:
<!-- /antipatterns/examples/1-1.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache"> <DisplayName>TargetServer ResponseCache</DisplayName> <CacheKey> <Key Fragment ref="request.uri" /></CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutInSec ref="flow.variable.here">600</TimeoutInSec> </ExpirySettings> <CacheResource>targetCache</CacheResource> </ResponseCache>
Политика кэширования ответов по умолчанию кэширует ответы с ошибками. Однако кэширование ответов с ошибками без тщательного обдумывания негативных последствий нецелесообразно, поскольку:
- Сценарий 1 : Сбои происходят на временный, неизвестный период, и мы можем продолжать отправлять сообщения об ошибках из-за кэширования даже после устранения проблемы.
ИЛИ
- Сценарий 2 : Сбои будут наблюдаться в течение фиксированного периода времени, после чего нам придется изменить код, чтобы избежать кэширования ответов после устранения проблемы.
Давайте рассмотрим это подробнее на примере двух рассматриваемых сценариев.
Сценарий 1: Временный сбой в работе бэкэнда/ресурсов.
Предположим, что сбой на бэкэнд-сервере произошел по одной из следующих причин:
- Временный сетевой сбой
- Серверная часть сильно перегружена и временно не может отвечать на запросы.
- Запрошенный серверный ресурс может быть временно удален/недоступен.
- Серверная часть отвечает медленно из-за длительного времени обработки данных и т.д.
Во всех этих случаях сбои могут продолжаться неопределенный период времени, после чего мы можем начать получать успешные ответы. Если мы кэшируем ответы об ошибках, то можем продолжать отправлять пользователям ответы об ошибках, даже если проблема с бэкэнд-сервером будет устранена.
Сценарий 2: Длительный или постоянный сбой в работе бэкэнда/ресурсов.
Предположим, нам известно, что сбой в бэкэнде длится фиксированный период времени. Например, вам известно, что либо:
- В течение 1 часа определенный ресурс бэкэнда будет недоступен.
ИЛИ
- Сервер бэкэнда отключен/недоступен в течение 24 часов в связи с внезапным сбоем сайта, проблемами масштабирования, техническим обслуживанием, обновлением и т. д.
Используя эту информацию, мы можем соответствующим образом установить время истечения срока действия кэша в политике кэширования ответов, чтобы не кэшировать ответы об ошибках на более длительный срок. Однако, как только сервер/ресурс снова станет доступен, нам придется изменить политику, чтобы избежать кэширования ответов об ошибках. Это связано с тем, что в случае временного/единичного сбоя на сервере мы будем кэшировать ответ, и в итоге возникнет проблема, описанная в сценарии 1 выше.
Влияние
- Кэширование ответов об ошибках может привести к отправке ответов об ошибках даже после того, как проблема была решена на бэкэнд-сервере.
- Пользователи могут потратить много усилий на поиск причины проблемы, не зная, что она вызвана кэшированием ответов об ошибках с бэкэнд-сервера.
Передовая практика
- Не сохраняйте ответы об ошибках в кэше ответов. Убедитесь, что элемент
<ExcludeErrorResponse>в политике ResponseCache имеет значениеtrue, чтобы предотвратить кэширование ответов об ошибках, как показано в приведенном ниже фрагменте кода. При такой конфигурации будут кэшироваться только ответы со стандартными кодами успеха от 200 до 205 (если коды успеха не изменены).<!-- /antipatterns/examples/1-2.xml --> <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ResponseCache async="false" continueOnError="false" enabled="true" name="TargetServerResponseCache"> <DisplayName>TargetServerResponseCache</DisplayName> <CacheKey> <KeyFragment ref="request.uri" /> </CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutinSec ref="flow.variable.here">600</TimeoutinSec> </ExpirySettings> <CacheResource>targetCache</CacheResource> <ExcludeErrorResponse>true</ExcludeErrorResponse> </ResponseCache>
- Если по какой-либо конкретной причине вам необходимо кэшировать ответы об ошибках, вы можете определить максимальную/точную продолжительность времени, в течение которого будет наблюдаться сбой (если это возможно):
- Установите соответствующее время истечения срока действия, чтобы гарантировать, что ответы об ошибках не будут кэшироваться дольше, чем время, в течение которого можно наблюдать сбой.
- Используйте политику ResponseCache для кэширования ответов об ошибках без элемента
<ExcludeErrorResponse>.
Делайте это только в том случае, если вы абсолютно уверены, что сбой на бэкэнд-сервере не носит кратковременный/временный характер .
- Apigee не рекомендует кэшировать ответы с кодом 5xx от бэкэнд-серверов.