Contents

Introduction

Prerequisites

Requirements

Componentes Utilizados

Informações de Apoio

Considerações sobre cache de prompt do gateway

Como determinar se o gateway está em cache corretamente

Calcular FrescoTempo

Remover Entradas Armazenadas em Cache

MaxStale

Comando Audio-Prompt Load

Data/hora

Introduction

Este documento descreve o cache Voice Extensible Markup Language (VXML) / Customer Voice Portal (CVP) Hypertext Transfer Protocol (HTTP) para arquivos de mídia.

Prerequisites

Requirements

A Cisco recomenda que você tenha conhecimento destes tópicos:

- Gateway VXML

- CVP

Componentes Utilizados

Este documento não se restringe a versões de software e hardware específicas.

The information in this document was created from the devices in a specific lab environment. All of the devices used in this document started with a cleared (default) configuration. If your network is live, make sure that you understand the potential impact of any command.

Informações de Apoio

No HTTP Client Cache, há dois tipos de cache envolvidos no armazenamento de arquivos de mídia:

1. O cache do IVR Media Player e

2. O cache do cliente HTTP

A configuração do cache do servidor substitui as configurações do cliente HTTP, esses parâmetros são enviados do servidor através de cabeçalhos de mensagem http ou através de scripts de aplicativos vxml.

Considerações sobre cache de prompt do gateway

Etapa 1. Quando os prompts de áudio são armazenados em um servidor de mídia HTTP, são necessários métodos adequados de cache de prompt do gateway para otimizar o desempenho do gateway e o consumo de largura de banda da rede. O desempenho do gateway diminui em aproximadamente 35-40% se o cache estiver totalmente desativado.

Para configurar o cache no gateway, defina-os no gateway:

..ivr prompt memory 15000

..http client cache memory file 500

..http client cache memory pool 15000

Note: O arquivo de memória de cache do cliente http representa o arquivo de prompt de tamanho maior (em Kbytes) que pode ser armazenado em cache. Em geral, os avisos do cliente maiores que 500K (cerca de um minuto de comprimento) devem ser divididos em partes menores e mais gerenciáveis para facilitar o carregamento e o cache. Por exemplo, a música da fila pode ser um loop repetitivo de um prompt de 30 segundos. Observe também que como os prompts são transmitidos, o prompt não armazena em cache a menos que todo o prompt seja reproduzido. Portanto, é recomendável que você faça um prompt com um tamanho gerenciável.

Etapa 2. Sincronize o datetime entre o gateway e o servidor de mídia HTTP.

Note: A sincronização não precisa ser exata, mas no mínimo em um ou dois minutos. Os horários não sincronizados podem fazer com que os prompts nunca sejam atualizados ou serão atualizados com todas as chamadas, sendo que ambos são comportamentos indesejáveis.

Etapa 3. No servidor de mídia, defina a expiração do conteúdo (por exemplo, 15 minutos).

Note: No IIS, isso é feito na guia Cabeçalho HTTP. O prompt do gateway é atualizado após esse período. O período escolhido deve refletir a frequência de regravação dos prompts e o tempo que você espera para que o novo prompt seja carregado após a modificação.

Etapa 4. Navegue até Programas > Ferramentas Administrativas > Gerenciador do IIS.

Etapa 5. Navegue até o arquivo .wav que deseja modificar.

Etapa 6. Em seguida, clique com o botão direito do mouse > Propriedades > Cabeçalhos HTTP

Passo 7. Habilitar Expiração do Conteúdo.

Como determinar se o gateway está em cache corretamente

Para determinar se você configurou corretamente o cache do gateway, siga este procedimento:

O log do IIS no servidor de mídia grava sempre que um cliente solicita um prompt. Se o cache estiver configurado corretamente, essas solicitações serão exibidas aproximadamente a cada X minutos (X é o que foi definido como o intervalo de atualização na Etapa 3) para qualquer prompt específico. O registro está localizado em: C:\WINNT\system32\LogFiles\W3SVC1\ex*

Ou,

Execute show http client cache no gateway. A coluna Tempo fresco deve ser igual ao período de tempo de atualização definido no servidor de mídia HTTP.

Por exemplo, se o período de atualização foi definido como 15 minutos, deve ser 900 segundos. A coluna Idade mostra quantos segundos se passaram desde que o prompt foi atualizado pela última vez. Em geral, esse número é menor que o Tempo Fresco. No entanto, se nenhuma chamada tiver acessado o prompt recentemente, esse número poderá ser maior do que o tempo fresco. Os avisos só são atualizados quando disparados por uma chamada e o prompt Tempo fresco expirou. Se o tempo fresco for um valor muito alto, a única maneira de remover o prompt do cache (além dos comandos ocultos) é recarregar o gateway.

É muito mais fácil apenas adicionar o cabeçalho como cabeçalho HTTP real via IIS.

Isso pode ser feito via IIS 6 ou 7.

http://weblogs.asp.net/joelvarty/archive/2009/03/23/force-ie7-compatibility-mode-in-ie8-with-iis-settings.aspx

Calcular FrescoTempo

Há várias variáveis que podem afetar o tempo fresco de um arquivo, como: cabeçalhos de mensagem http do servidor e valor de atualização de cache configurados via CLI, etc.

Então, como você sabe qual valor um arquivo usa para seu FrescoTime? O tempo fresco de um arquivo é determinado com estas precedências:

1. Quando um arquivo é baixado do servidor http, se um dos cabeçalhos da mensagem http contiver:

Cache-Control: max-age = <value in seconds>

Em seguida, <value em segundos> é usado como o FrescoTime para este arquivo.

2. Se (1) não estiver presente, mas esses dois cabeçalhos estão incluídos na mensagem http:

Expires: <expiration date time>

Date: <Current date time>

Em seguida, a diferença <data e hora de expiração> - <Data e hora atual> é usada como o tempo fresco para este arquivo.

3. A especificação HTTP/1.1, RFC 2616 (HTTP), recomenda que qualquer um dos cabeçalhos de mensagem http, conforme descrito em (1) ou (2), esteja presente.  Se o servidor não enviar (1) ou (2) em sua resposta http, você poderá obter 10% da diferença entre Data e Última modificação dos cabeçalhos da mensagem:

Last-Modified: <last-modified date time>

Date: <Current date time>

Portanto, o Tempo de Fresco para este arquivo é calculado como:

FreshTime = 10% x ((Last-Modified) - (Date))

4. Finalmente, é quando a CLI de configuração de atualização de cache é reproduzida. A CLI permite que o usuário atribua um valor de FrescoTime heurístico aos arquivos como um valor provisório caso nenhum dos cabeçalhos de mensagem (1) a (3) acima esteja presente.

c5400-02(config)#http client cache refresh ?

<1-864000>           Time value in seconds

O valor de atualização padrão é 86400 segundos (24 horas).

Note: A atualização do cache do cliente http configurada não tem efeito sobre os arquivos quando qualquer um dos cabeçalhos da mensagem (1) - (3) está presente.

Note: Esta CLI, se estiver em vigor, não é retroativa. Ou seja, o valor de atualização recém-configurado aplica-se somente a novos arquivos de entrada. Ele não tem efeito nas entradas já no cache.

Remover Entradas Armazenadas em Cache

Note: O roteador nunca atualiza automaticamente quaisquer arquivos obsoletos.

Os arquivos obsoletos só são atualizados conforme necessário. Por que o roteador gastaria seus valiosos ciclos de CPU atualizando os arquivos no cache sem saber se ou quando esses arquivos serão usados, enquanto a CPU é necessária para outros serviços urgentes?

Isso significa que uma entrada armazenada em cache antiga pode permanecer no cache por um longo tempo até ser removida para dar espaço para uma cópia nova do mesmo arquivo ou para outro arquivo que só precisa de seu espaço de memória no cache. Às vezes, uma entrada armazenada em cache antiga ainda pode ser utilizável, se sua idade não tiver excedido o valor MaxStale especificado pelo aplicativo.

Resumindo, se uma entrada em cache é antiga ou ainda utilizável, pode ser calculada com esta comparação simples:

-        file is fresh                                    if FreshTime > Age

-        file is stale but still usable         if (FreshTime + MaxStale) > Age

-        file is stale and not usable         if (FreshTime + MaxStale) <= Age

MaxStale

Indica que o cliente está disposto a aceitar uma resposta que excedeu seu tempo de expiração. Se max-stale for atribuído um valor, o cliente está disposto a aceitar uma resposta que excedeu seu tempo de expiração em não mais que o número especificado de segundos. Se nenhum valor for atribuído a max-stale, o cliente está disposto a aceitar uma resposta obsoleta de qualquer idade.

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

Como mencionado anteriormente, uma entrada armazenada em cache antiga é removida pelo proprietário conforme necessário, quando:

A entrada armazenada em cache torna-se obsoleta; e

Sua contagem de referência é zero (0), ou seja, ninguém está usando essa entrada armazenada em cache; e

Seu espaço de memória é necessário para criar espaço para outras entradas

Isso significa que o cliente http e o IVR Media Player devem gerenciar e controlar suas entradas em cache dessa forma nos modos não streaming e streaming, respectivamente. E se o cliente http precisar limpar algumas entradas obsoletas para recuperar espaço no pool de memória de cache, mas ele não for o proprietário desses arquivos? Isso se torna a responsabilidade do gerente de fundo do cache do cliente http.

O programa de fundo do cache do cliente http acorda a cada 5 minutos. Se a memória total usada para as entradas em cache exceder o limite de 70% do tamanho do pool de memória em cache configurado, o ager passará por cada entrada em cache. Se a entrada ainda estiver fresca, ela a deixará em paz. Se a entrada estiver obsoleta e não tiver nenhuma referência a ela, ou seja, ref count = 0, o cliente http exclui a entrada por conta própria porque é o proprietário legítimo dessa entrada. Se a entrada obsoleta tiver uma contagem de referência 1 e não tiver pai ou filho vinculado a ela, o que significa que o arquivo não está no meio do download de atualização, o cliente http chama de volta para notificar o Media Player para liberar essa entrada obsoleta.

Comando Audio-Prompt Load

Às vezes, pode ser desejável ou necessário baixar manualmente um arquivo de áudio no roteador. Neste momento, já nos foi dito que o roteador não vai automaticamente para o servidor http para atualizar as entradas armazenadas em cache. Essas entradas são atualizadas somente quando são necessárias.  Um download manual pode superar esse problema.

Outro cenário que um download manual pode ser útil é o pré-carregamento de um grande prompt de áudio no modo não streaming. Isso pode ser feito antes do recebimento da primeira chamada para que o chamador não sofra nenhum atraso no carregamento do prompt.

Para baixar manualmente um arquivo de áudio específico, execute este comando CLI:

audio-prompt load <url>

O <url> é onde o arquivo de áudio reside no servidor. Claro, espera-se que o cache do cliente http esteja corretamente configurado para salvar esse arquivo no cache.

Note: Se <url> for um prompt ativo, ou seja, atualmente em execução, essa CLI não entrará em vigor.

Data/hora

Além disso, certifique-se de que o datetime entre o gateway e o servidor de mídia HTTP esteja sincronizado. Isto é um dever.

aviso: Não use clear http client cache no VXML GW. Se esse comando for chamado em VXML GW muito carregado/ativo, sabe-se que ele causa problemas, corrupção de memória e travamentos. Basicamente, o uso de clear ip http client cache all não é recomendado. O que ele faz é atualizar todas as entradas do cache, e o que acontece é que ele cria e exclui nós da lista vinculada ao cache, o que causa alguns problemas. O comando está sendo removido do Cisco IOS®. O comando recomendado é set http client cache stale, o que este comando faz é apenas atualizar a parte mais recente do cache.