Desempenhos do Open-Source API Gateway: APISIX 3.0 e Kong 3.0
Zhengsong Tu
November 3, 2022
Contexto
O Apache APISIX é um gateway de API nativo da nuvem, de alto desempenho e escalável. Ele é implementado com base no NGINX e no etcd. Além dos recursos dos gateways de API tradicionais, o APISIX possui recursos de roteamento dinâmico e recarregamento a quente de plugins, tornando-o especialmente poderoso para o gerenciamento de APIs em arquiteturas nativas da nuvem.
No outono de 2022, o Apache APISIX e o Kong lançaram suas versões 3.0 quase ao mesmo tempo. Em particular, os novos recursos do Apache APISIX 3.0 focam no ecossistema, inteligência e aplicações. Você pode conferir Apache APISIX 3.0: 11 Destaques do Gateway de API Open Source para saber mais.
Ambos são excelentes gateways de API de código aberto para microsserviços. Quando dois produtos são lançados simultaneamente, muitos usuários se interessam pelas diferenças de recursos e desempenho. Neste artigo, forneceremos os resultados de desempenho dos testes em quatro cenários diferentes.
Método de Teste
Topologia de Requisições
A seguir está o diagrama de topologia das requisições de teste. A ferramenta de teste de estresse utilizada foi o wrk2, e o serviço upstream utilizado foi o OpenResty.
APISIX
Kong
Informações do Servidor
Este teste foi realizado em um servidor em nuvem com Standard D8s v3 (8 vcpu, 32 GiB de memória). Todos os componentes relacionados ao teste foram implantados neste servidor.
Ambiente do Servidor
Nome | Valor |
---|---|
SO | Debian 10 "buster" |
ulimit -n | 65535 |
Versões de Software
A seguir estão as versões do software utilizadas neste teste:
Nome | Versão |
---|---|
Docker | 20.10.18, build b40c2f6 |
APISIX | 3.0.0 |
Kong | 3.0.0 |
Upstream | OpenResty 1.21.4.1 |
Ferramenta de teste | wrk2 |
Configuração de Rede
Ao implantar o APISIX e o Kong no docker, utilizamos o modo de rede host no docker para evitar implicações de rede que possam afetar os resultados do teste.
Implantação
Escolhemos o wrk2 como ferramenta de benchmark e o OpenResty como upstream simulado. Implantamos o APISIX e o Kong no docker com configuração declarativa habilitada para ambos.
Queríamos tornar os resultados do teste mais intuitivos, então utilizamos apenas um worker para os testes. Normalmente, a relação entre a capacidade de carga e o número de workers é linear. Portanto, apenas um worker será suficiente para os testes.
Além disso, o APISIX desativou os plugins proxy-cache
e proxy-mirror
, que são mencionados nos documentos relacionados a benchmarks no projeto APISIX (os plugins proxy-cache
e proxy-mirror
afetam o desempenho do APISIX em cerca de 4%).
Confira script de implantação e referência do script de teste aqui.
Testes
Teste #1: 1 Rota
Teste o cenário de proxy puro. Utilizaremos apenas uma rota e nenhum plugin para testar o desempenho do APISIX e Kong.
Configuração do APISIX:
routes:
-
uri: /hello
upstream:
nodes:
"127.0.0.1:1980": 1
type: roundrobin
#END
Configuração do Kong:
_format_version: "3.0"
_transform: true
services:
- name: hello
url: http://127.0.0.1:1980
routes:
- name: hello
paths:
- /hello
Comparação de Desempenho
Utilizamos a métrica QPS para medir o desempenho. Foram realizadas 10 rodadas de testes.
Como podemos ver no gráfico, no cenário de proxy puro, o desempenho do APISIX 3.0 é muito superior ao do Kong 3.0. O QPS médio do APISIX 3.0 em 10 rodadas é 14104, e o QPS médio do Kong 3.0 em 10 rodadas é 9857. O desempenho do APISIX 3.0 é 140% do Kong 3.0.
Teste #2: 1 Rota + 1 Plugin de Limitação de Taxa
A limitação de taxa é um dos principais cenários de uso dos gateways de API. Portanto, neste cenário, configuramos os gateways com uma rota e um plugin de limitação de taxa.
Configuração do APISIX:
routes:
-
uri: /hello
upstream:
nodes:
"127.0.0.1:1980": 1
type: roundrobin
plugins:
limit-count:
count: 999999999
time_window: 60
rejected_code: 503
key: remote_addr
#END
Configuração do Kong:
_format_version: "3.0"
_transform: true
services:
- name: hello
url: http://127.0.0.1:1980
routes:
- name: hello
paths:
- /hello
plugins:
- name: rate-limiting
config:
minute: 999999999
limit_by: ip
policy: local
Este teste mede o desempenho dos gateways de API no cenário de limitação de taxa. Configuramos o plugin de limitação de taxa com um limite mais alto para evitar acionar uma ação real de limitação de taxa.
Comparação de Desempenho
Novamente, realizamos 10 rodadas de testes. Podemos ver no gráfico que, após habilitar o plugin de limitação de taxa, o QPS do APISIX 3.0 e do Kong 3.0 caiu significativamente, mas o QPS do Kong 3.0 caiu mais notavelmente. O QPS médio de 10 rodadas do APISIX 3.0 é 9154, e o QPS médio de 10 rodadas do Kong 3.0 é 4810. Neste cenário, o desempenho do APISIX 3.0 é 190% do Kong 3.0.
Teste #3: 1 Rota + 1 Plugin de Limitação de Taxa + 1 Plugin de Autenticação
A autenticação é outro cenário comum de uso do gateway de API.
Neste cenário, configuramos os gateways com uma rota, um plugin de limitação de taxa e um plugin de autenticação.
Configuração do APISIX:
routes:
-
uri: /hello
upstream:
nodes:
"127.0.0.1:1980": 1
type: roundrobin
plugins:
key-auth:
limit-count:
count: 999999999
time_window: 60
rejected_code: 503
key: remote_addr
consumers:
- username: jack
plugins:
key-auth:
key: user-key
#END
Configuração do Kong:
_format_version: "3.0"
_transform: true
services:
- name: hello
url: http://127.0.0.1:1980
routes:
- name: hello
paths:
- /hello
plugins:
- name: rate-limiting
config:
minute: 999999999
limit_by: ip
policy: local
- name: key-auth
config:
key_names:
- apikey
consumers:
- username: my-user
keyauth_credentials:
- key: my-key
Este cenário abrange limitação de taxa e autenticação, de modo que vários plugins trabalham juntos no caminho da requisição. É um cenário típico de uso do gateway de API.
Comparação de Desempenho
Novamente, realizamos 10 rodadas de testes para medir o QPS.
Podemos ver no gráfico que, após o APISIX habilitar os plugins limit-count e key-auth, o QPS médio do APISIX 3.0 é 8933, que é apenas ligeiramente menor que o QPS médio de 9154 quando apenas o plugin limit-count está habilitado.
No Kong 3.0, no entanto, o QPS médio caiu para 3977, uma queda significativa em comparação com o QPS médio de 4810 quando apenas o plugin de limitação de taxa está habilitado.
Neste cenário de habilitar plugins de limitação de taxa e autenticação, o desempenho do APISIX 3.0 é 220% do Kong 3.0.
Teste #4: 5000 Rotas
Este teste utiliza scripts para gerar 5000 rotas únicas. O teste mede o desempenho do APISIX e do Kong para correspondência de rotas: quão rapidamente ele encontra uma correspondência.
Comparação de Desempenho
Em 10 rodadas de testes, o QPS médio do APISIX 3.0 é 13787, e o do Kong 3.0 é 9840. O desempenho do APISIX 3.0 é 140% do Kong 3.0.
Conclusão
A partir dos resultados dos testes em múltiplos cenários, é evidente que:
- o desempenho do APISIX 3.0 é cerca de 140% do Kong 3.0 quando os plugins não são utilizados (Teste #1 e Teste #4).
- O desempenho do APISIX 3.0 é cerca de 200% do Kong 3.0 quando os plugins são utilizados (Teste #2 e Teste #3)
Podemos ver que o APISIX mantém uma vantagem considerável de desempenho em sua versão 3.0.