O ASMCompressor é uma definição de recurso personalizado (CRD) que configure a compressão HTTP para comunicação entre serviços e tráfego de gateway no Service Mesh (ASM). Ele oferece suporte aos algoritmos Gzip e Brotli.
Funcionamento da compressão
Ao aplicar um recurso ASMCompressor, o ASM injeta um filtro de compressor no proxy sidecar Envoy das cargas de trabalho selecionadas. Esse filtro inspeciona os cabeçalhos de requisição e resposta para determinar se deve comprimir o conteúdo.
A compressão ocorre quando todas as condições abaixo são atendidas:
O tipo de conteúdo corresponde a um dos tipos MIME configurados.
O tamanho do conteúdo atinge o limiar mínimo.
Não há cabeçalho
Content-Encodingexistente.
A compressão de resposta vem ativada por padrão. A compressão de requisição permanece desativada por padrão e exige configuração explícita via request_direction_config.
Exemplo
O recurso ASMCompressor a seguir ativa a compressão Gzip nas respostas de cargas de trabalho com o rótulo app: httpbin, na porta de serviço 8080:
apiVersion: istio.alibabacloud.com/v1
kind: ASMCompressor
metadata:
name: httpbin-compressor
namespace: default
spec:
workloadSelector:
app: httpbin
portNumber: 8080
compressor_library:
gzip:
compression_level: DEFAULT
window_bits: 12
memory_level: 5
response_direction_config:
common_config:
min_content_length: 256
content_type:
- application/json
- text/html
- text/plain
disable_on_etag_header: true
Campos do ASMCompressor
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
map\ |
Sim |
Rótulos que selecione os pods onde a compressão será aplicada. O escopo dos rótulos restringe-se ao namespace do recurso ASMCompressor. Para mais informações, consulte WorkloadSelector. |
-- |
|
|
bool |
Não |
Defina como |
|
|
|
int |
Sim |
Porta de serviço na qual a compressão será aplicada. Para gateways, refere-se à porta do serviço de gateway. |
-- |
|
|
Não |
Configurações do algoritmo de compressão para Gzip ou Brotli. |
-- |
|
|
|
Não |
Comportamento de compressão para requisições. |
-- |
|
|
|
Não |
Comportamento de compressão para respostas. |
-- |
|
|
|
Não |
Substituições de compressão no nível de rota. Suportado a partir do ASM V1.21. |
-- |
Campos do CompressorLibrary
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
Não |
Configurações de compressão Gzip. |
-- |
|
|
|
Não |
Configurações de compressão Brotli. |
-- |
Campos do GzipCompressor
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
int |
Não |
Tamanho da janela para o buffer de compressão. Valores válidos: 9 a 15. Valores maiores melhoram a taxa de compressão, mas aumentam o uso de memória. |
|
|
|
string |
Não |
Equilíbrio entre taxa de compressão e velocidade. Valores válidos: |
|
|
|
int |
Não |
Memória alocada para o estado interno de compressão. Valores válidos: 1 a 9. Valores maiores aceleram a compressão e melhoram a qualidade da saída, porém consomem mais memória. |
|
|
|
string |
Não |
Estratégia de compressão zlib. Escolha com base nas características dos dados a serem comprimidos. Para mais informações, consulte Estratégias de compressão. |
|
Estratégias de compressão
|
Valor |
Descrição |
|
|
Selecionada automaticamente pelo zlib conforme as características dos dados de entrada. Adequada para a maioria dos casos de uso. |
|
|
Otimizada para dados pré-processados por um filtro. Geralmente usada em compressão de múltiplas passagens para aumentar a taxa de compressão. |
|
|
Utiliza apenas codificação Huffman, sem o algoritmo LZ77. Estratégia mais rápida, porém com a menor taxa de compressão. |
|
|
Codificação run-length. Mais indicada para dados com longas sequências de bytes repetidos. |
|
|
Emprega um dicionário de compressão fixo e predefinido. Útil quando os dados seguem padrões conhecidos e previsíveis. |
Campos do BrotliCompressor
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
int |
Não |
Tamanho da janela para o buffer de compressão. Valores válidos: 10 a 24. Valores maiores melhoram a taxa de compressão, mas aumentam o uso de memória. |
|
|
|
int |
Não |
Nível de qualidade da compressão. Valores válidos: 0 a 11. Valores mais altos geram saídas menores, mas demandam mais tempo de processamento. |
|
Campos do RequestDirectionConfig
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
Não |
Comportamento do filtro para compressão de requisições. |
-- |
Campos do ResponseDirectionConfig
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
Não |
Comportamento do filtro para compressão de respostas. |
-- |
|
|
|
bool |
Não |
Se |
|
|
|
bool |
Não |
Se |
|
Campos do CommonConfig
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
int |
Não |
Tamanho mínimo do corpo da resposta, em bytes, para acionar a compressão. Respostas muito pequenas podem não se beneficiar da compressão. No Gzip, taxas melhores exigem maior custo de CPU; portanto, teste diferentes limiares para equilibrar desempenho e largura de banda. |
-- |
|
|
string[] |
Não |
Tipos MIME elegíveis para compressão. Apenas respostas cujo |
Veja abaixo |
Valores padrão de content_type:
application/javascript, application/json, application/xhtml+xml, image/svg+xml, text/css, text/html, text/plain, text/xml
Campos do ASMCompressorPerRouteConfig
A configuração por rota substitui as definições globais de compressão para rotas específicas. Por exemplo, você pode desativar a compressão em uma rota de verificação de integridade e mantê-la ativa para todo o restante do tráfego.
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
Sim |
Selecione a rota à qual esta substituição se aplica. |
-- |
|
|
|
bool |
Sim |
Defina como |
|
Campos do RouteConfigurationMatch
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
uint32 |
Não |
Corresponde a uma porta de serviço específica ou a uma porta de servidor específica no Gateway. Se omitido, todas as portas serão correspondidas. |
-- |
|
|
string |
Não |
Correspondência pelo |
-- |
|
|
string |
Não |
Gateway a ser correspondido, no formato |
-- |
|
|
Não |
Corresponde a um host virtual específico. |
-- |
|
|
|
string |
Não |
Nome da configuração de rota do Envoy a ser correspondida. Requer familiaridade com a configuração subjacente do Envoy. |
-- |
Campos do CommonVirtualHostMatch
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
string |
Não |
Nome do host virtual gerado pelo plano de controle, no formato |
-- |
|
|
Não |
Corresponde a uma rota específica dentro do host virtual. |
-- |
Campos do CommonRouteMatch
|
Campo |
Tipo |
Obrigatório |
Descrição |
Padrão |
|
|
string |
Não |
Nome da rota a ser correspondida. Rotas geradas por padrão recebem o nome |
-- |
|
|
string |
Não |
Correspondência de rotas por tipo de ação. Valores válidos: |
|