Da Traefik ao APISIX: A Exploração da Horizon Robotics no Ingress Controller

Xin Zhang

October 10, 2022

Ecosystem

Na indústria automotiva, a maioria das empresas está em transição para a condução autônoma e novas fontes de energia. Especialmente no caso da condução autônoma, cada empresa investiu muitos recursos para concluir o desenvolvimento e o treinamento de modelos de condução autônoma.

Nesse processo, como garantir a estabilidade e a eficiência dos negócios enquanto o produto está em rápida iteração?

Este artigo examinará a plataforma de desenvolvimento de IA da Horizon Robotics como exemplo para ver como o gateway de API Apache APISIX e o Ingress Controller ajudaram a equipe de P&D da Horizon Robotics a resolver essa dor.

Comparação de Gateways

Limitações do Traefik

Antes de usar o APISIX Ingress Controller, o Ingress Controller usado pelo sistema de negócios era o Traefik 1.x, mas havia vários problemas.

  • O Traefik 1.x configura regras de roteamento por meio do Ingress, e alguns plugins precisam ser configurados adicionando Annotations. Dessa forma, você só pode adicionar plugins para todas as regras sob o Ingress atual, e não é possível alcançar uma configuração mais granular.
  • O Traefik 1.x não suporta a configuração visual de regras específicas e não pode localizar diretamente um serviço específico ao acessar a URL de solicitação por meio de navegadores.
  • O arquivo de configuração padrão do Traefik (ConfigMap) possui poucos atributos, e muitas configurações padrão precisam ser consultadas na documentação oficial. Além disso, alguns parâmetros são inconsistentes com a configuração padrão do NGINX, o que torna a manutenção mais complicada.

Em resposta aos problemas acima, a equipe técnica da Horizon Robotics decidiu substituir o Ingress Controller. No início do processo de seleção, a equipe considerou atualizar o Traefik para a versão 2.0 para resolver os problemas mencionados. No entanto, como também seria necessário usar um novo CRD para a atualização e o custo de migração seria alto, tivemos que considerar outras soluções de Ingress Controller.

Vantagens do APISIX Ingress Controller

Na fase inicial de seleção, comparamos principalmente o Apache APISIX, Kong e Envoy. No entanto, outras soluções não atendiam completamente às necessidades dos cenários existentes em termos de funcionalidade ou desempenho, exceto o APISIX Ingress. Portanto, acabamos escolhendo o APISIX Ingress. Além de algumas características gerais, estamos mais interessados nos seguintes pontos:

  • Plugins Abundantes: Os plugins são ecologicamente sólidos, e todos os plugins suportados pelo APISIX podem ser configurados de forma declarativa usando o apisix-ingress-controller. Além disso, os plugins podem ser personalizados para um único backend sob o ApisixRoute.
  • Configuração Visual: Com o APISIX Dashboard, é possível visualizar cada apisix route. Se o mesmo domínio for configurado em vários namespaces ou arquivos YAML, você pode pesquisar o prefixo do caminho em conjunto com o APISIX Dashboard para localizar rapidamente em caso de conflito.
  • Verificação Granular: O APISIX Ingress Controller verifica os recursos declarados no CRD que ele gerencia. Se um serviço inexistente for declarado no CRD, a mensagem de erro será armazenada no event do ApisixRoute, e a alteração não terá efeito, o que pode reduzir alguns problemas causados por uso incorreto.
  • Recursos Abundantes: O APISIX suporta atualização e plugins em tempo real, reescrita de solicitações de proxy, múltiplas autenticações, desenvolvimento de plugins em várias linguagens e muitos outros recursos. Consulte Recursos do APISIX para mais informações.
  • Comunidade Ativa: Em comparação com outras comunidades de soluções de código aberto, o APISIX tem muitos mantenedores e contribuidores ativos no Slack, GitHub e na lista de e-mails.
  • Alto Desempenho: Como pode ser visto no gráfico abaixo, o desempenho do APISIX é cerca de 120% do Envoy em comparação com o teste de carga do Envoy, e quanto mais núcleos houver, maior será a diferença de QPS.

QPS

Arquitetura Geral

Como pode ser visto no diagrama de arquitetura abaixo, o APISIX Ingress serve como ponto de entrada para todo o tráfego. Todo o tráfego acessado entra no upstream (serviços de negócios) por meio do APISIX Ingress, seja proveniente de ferramentas de linha de comando, Web, plataformas SaaS ou OpenAPI. Quanto à autenticação, como a empresa já possui um serviço de autenticação dedicado, utiliza diretamente o plugin forward-auth do APISIX para realizar a autenticação externa.

Arquitetura

Na camada do gateway, todo o tráfego entra por meio do domínio, e o tráfego primeiro passa pelo LVS, que o encaminha para o nó APISIX back-end. Em seguida, o APISIX distribui o tráfego para o Pod correspondente de acordo com as regras de roteamento. No LVS, eles também alteraram a porta padrão do APISIX Ingress de 9180 para 80 para que o LVS aponte diretamente para o APISIX Ingress, facilitando o encaminhamento do tráfego.

Fluxograma

Cenários

Após entender a arquitetura geral, compartilharemos alguns cenários que nossa empresa está implementando atualmente com o APISIX Ingress.

Upload de Arquivos Grandes

O primeiro cenário é o upload de arquivos grandes, que pode ser menos comum em empresas em geral, mas é mais frequente em empresas que realizam treinamento de modelos de IA. Esse cenário ocorre principalmente no sistema de treinamento de modelos da Horizon Robotics, onde os dados coletados pela equipe de P&D são enviados para o sistema por meio da rede. O tamanho dos dados geralmente ultrapassa várias centenas de GB, e o OOM ocorre quando a quantidade de dados enviados é muito grande sem ajustar os parâmetros do APISIX.

iTerm

Como o client_body_buffer_size padrão é 1MB, quando o buffer está cheio, os arquivos temporários são gravados no disco, causando alto IO de disco.

Se o diretório onde os arquivos temporários são gravados for apontado para a memória compartilhada (/dev/shm), isso novamente leva a um alto uso de cache do APISIX.

Monitor

Após depuração contínua, descobrimos que o motivo era que o APISIX não estava habilitado para upload em fluxo. Para esse cenário, atualizamos a versão do APISIX de 2.11 para 2.13 e ajustamos os parâmetros do APISIX. Primeiro, alteramos o parâmetro proxy_request_buffering para off no APISIX ConfigMap para habilitar o upload em fluxo. Em segundo lugar, extraímos a configuração reutilizável do CRD ApisixPluginConfig fornecido pelo APISIX Ingress Controller e definimos dinamicamente o client_max_body_size para as rotas que precisam desse cenário como configuração de nível namespace.

Depuração

Chamadas de Serviço em Ambientes Multi-cloud

Para chamadas de serviço em ambientes multi-cloud, parte do tráfego de negócios chega primeiro ao IDC local e, em seguida, passa pelo APISIX Ingress para chegar ao Pod. Alguns serviços no Pod acessam os serviços da AliCloud por meio do domínio. Além disso, alguns cenários em que o serviço invoca outros serviços também existem principalmente para treinamento multi-cloud. Os usuários usarão o IDC como ponto de entrada e selecionarão o cluster para enviar a tarefa ao cluster de nuvem correspondente.

Arquitetura Multi-cloud

Autenticação Externa com forward-auth

Quando começamos a usar o APISIX Ingress, o APISIX não suportava o plugin forward-auth, então definimos um plugin personalizado com base no apisix-go-plugin-runner. No entanto, isso criou uma camada adicional de chamadas gRPC, o que dificultou a depuração e tornou os logs invisíveis. Como o APISIX passou a suportar o plugin forward-auth no início deste ano, substituímos o plugin personalizado pelo oficial, o que reduz uma camada de chamadas gRPC e torna o monitoramento mais conveniente.

Arquitetura de Autenticação

Monitoramento de Aplicações

No monitoramento de aplicações, habilitamos o plugin Prometheus do APISIX globalmente e fizemos algumas depurações e otimizações para nossos próprios negócios, como adicionar concorrência em tempo real, QPS, taxa de sucesso de API em tempo real do APISIX e largura de banda em tempo real do APISIX para um monitoramento mais granular.

Monitoramento

Resumo

Atualmente, estamos usando o Apache APISIX Ingress Controller como um gateway de tráfego apenas para algumas de nossas linhas de negócios, e outras áreas de negócios serão lançadas em breve para trazer cenários de aplicação mais ricos para a comunidade. Se você também está comparando soluções de Ingress Controller, esperamos que este artigo forneça algumas dicas. Cada vez mais usuários estão usando o Apache APISIX Ingress em ambientes de produção, e se você também está usando o APISIX Ingress, compartilhe seus casos de uso na comunidade.

Share article link