Como o Zoom usa o APISIX Ingress em seu pipeline de entrega contínua?
October 27, 2022
Contexto
Nos últimos anos, muitos softwares de conferência online conhecidos surgiram com o desenvolvimento de reuniões online e trabalho remoto. O Zoom, um exemplo típico, tornou-se uma ferramenta popular para home office, ensino online e cenários sociais. Ele possui 350 milhões de participantes diários em reuniões e quase 470.000 clientes empresariais pagantes usando a plataforma. Além disso, dados recentes mostram que a quantidade de minutos usados para facilitar reuniões atingiu mais de 3,3 trilhões por ano.
No entanto, como outras empresas de SaaS e internet, o Zoom enfrentou desafios técnicos à medida que seu negócio se expande rapidamente.
-
Um número significativo de microsserviços: Devido ao rápido crescimento dos negócios e das equipes do Zoom, mais de 100 serviços de backend precisam ser entregues. No entanto, é difícil gerenciar um grande número de microsserviços de forma eficiente.
-
Diversos ambientes de implantação: Empresas de SaaS frequentemente encontram cenários em que os clientes precisam implantar em nuvens dedicadas, nuvens privadas e multi-nuvens. Como os serviços de negócios do Zoom estão espalhados pelo mundo, há desafios técnicos com um grande número de ambientes de nuvem híbrida.
-
Infraestrutura complexa: Empresas de internet de médio e grande porte geralmente têm equipes de infraestrutura dedicadas responsáveis por gateways de API, centros de configuração, gerenciamento de chaves, logs, monitoramento de alarmes, bancos de dados, etc. Como as equipes de P&D do Zoom estão distribuídas globalmente, é um grande desafio integrar esses middlewares e infraestruturas complexas no pipeline de entrega contínua.
Os desafios acima não são uma relação simples de adição, mas uma relação multiplicativa. Em outras palavras, a situação real é muito mais complexa. No entanto, as ferramentas de código aberto que o Zoom usava anteriormente não atendem mais aos requisitos atuais. É por isso que um pipeline de entrega contínua confiável é tão importante.
Abaixo estão os motivos detalhados pelos quais o Zoom não continuou a escolher essas ferramentas de código aberto anteriores.
Helm/Kustomize | Terraform/Pulumi | KubeVela + Crossplane |
---|---|---|
Incapaz de conectar sistemas além do Kubernetes | Difícil usar o Terraform nas camadas do Kubernetes e middleware, a menos que sejam desenvolvidos Providers extras | Tecnologia muito nova com atualizações rápidas, não segura e estável o suficiente para ser adotada em ambiente de produção |
Difícil controlar centralmente a plataforma no modo de sub-repositório Git | Aumenta o custo de aprender outra linguagem de gerenciamento de configuração: hcl | A definição de Trait + templates Cuelang do Kubevela e suas capacidades de expressão de programação não são suficientes para cobrir várias plataformas de middleware não nativas da nuvem fora do sistema Kubernetes |
Difícil de manter e depurar devido à lógica complexa do Helm Chart Template | O modo de controle centralizado Mono Repo não é adequado para equipes grandes | / |
Sistema de parâmetros não poderoso o suficiente para gerenciar parâmetros dinâmicos em um grande número de ambientes | / | / |
Devido às limitações das ferramentas de código aberto mencionadas acima, o Zoom finalmente investigou algumas soluções principais para construir o pipeline de entrega contínua subjacente.
Após algumas rodadas de comparação e verificação, o Zoom acabou escolhendo o APISIX Ingress Controller para suportar seu novo pipeline de entrega contínua.
Apache APISIX Ingress Controller
O que é o Apache APISIX Ingress Controller?
Apache APISIX Ingress Controller é um controlador de entrada (ingress) nativo da nuvem que usa o Apache APISIX como o plano de dados para transportar o tráfego e estende a funcionalidade do Kubernetes utilizando CRD (CustomResourceDefinition). Ele é responsável por interagir com o servidor de API do Kubernetes, aplicar controle de acesso baseado em função (RBAC), monitorar mudanças, implementar conversão de objetos dentro do controlador de entrada, comparar as mudanças e, em seguida, sincronizar com o Apache APISIX. Além disso, ele pode suportar recursos personalizados, incluindo APISIX Route, APISIX Upstream e outros ingressos nativos do Kubernetes, para controlar o tráfego externo que acessa serviços implantados no Kubernetes.
Abaixo está o Diagrama de Tempo do APISIX Ingress Controller.
Por que o Zoom escolheu o APISIX Ingress Controller?
De acordo com o contexto acima, surge a pergunta: que tipo de pipeline de entrega contínua o Zoom deseja construir, e como ele adota o APISIX Ingress para estabelecer seu pipeline de entrega contínua subjacente?
O Zoom anteriormente usava o NGINX como um gateway de API. No entanto, com o rápido desenvolvimento dos negócios e o aumento dos microsserviços, as limitações da solução atual do NGINX estão se tornando mais evidentes.
Diferentes equipes precisam manter o NGINX separadamente, e milhares de linhas de arquivos de configuração do NGINX tornam a manutenção difícil. Além disso, o NGINX não pode escalar rapidamente ao implantar muitas linhas no servidor em nuvem. Sobre o modo de recarregamento do NGINX, você pode verificar este blog. Os negócios do Zoom começaram a evoluir em direção ao Ingress Controller.
A equipe do Gateway de API pesquisou algumas soluções de código aberto. Após simular a migração e análise da configuração real do negócio no NGINX e uma grande quantidade de testes de benchmark de desempenho e comparação do ecossistema de plugins, o Zoom finalmente escolheu o projeto APISIX Ingress Controller da Apache Software Foundation, explorando um gateway mais avançado nativo da nuvem.
Considerando seus cenários de negócios, o Zoom deu mais ênfase às duas partes abaixo, que podem ser satisfeitas pelo APISIX Ingress.
-
Segurança dos Dados: O Zoom leva a privacidade do cliente e a segurança do serviço a sério; portanto, a autenticação e verificação mTLS são amplamente usadas em salas de reunião online e chamadas telefônicas. No entanto, muitos gateways de API semelhantes só podem fornecer esse serviço em sua versão empresarial, enquanto o APISIX Ingress oferece grande viabilidade e conveniência para alcançar esse objetivo.
-
Estabilidade do Serviço: Os serviços de backend do Zoom exigem implantações Multi-AZ (Multi-Availability Zones) para alta disponibilidade em diferentes regiões. Geralmente, ele coloca os negócios em outro DC. Se ocorrer um erro no DC original, o tráfego do cliente precisa ser transformado para outro, no qual o APISIX Ingress pode atender com sucesso ao requisito.
Recursos do Apache APISIX Ingress Controller
Usando o Apache APISIX como seu plano de dados para transportar o tráfego de negócios, o Apache APISIX Ingress Controller herda as seguintes vantagens do Apache APISIX.
-
Alto Desempenho e Estabilidade: Como um gateway de API dinâmico de alto desempenho e código aberto, o Apache APISIX é resiliente e estável em seu desempenho, sendo usado em muitos cenários de tráfego em larga escala de empresas.
-
Comunidade Ativa: Como um projeto de gateway de API de código aberto de nível superior e mais ativo, o Apache APISIX possui uma comunidade ativa e manteve uma excelente taxa de crescimento desde o primeiro dia.
-
Ecossistema Rico: O Apache APISIX suporta protocolos L7, incluindo HTTP(S), HTTP2, Dubbo, protocolo IoT MQTT, etc. Além disso, o APISIX suporta protocolos L4 como TCP/UDP. Além disso, o suporte completo ao ARM64 é suportado no Apache APISIX 3.0.
-
Múltiplos Plugins: Existem quase 100 plugins lançados oficialmente pelo APISIX que os usuários podem usar com um simples arrastar. O recarregamento dinâmico e a orquestração de plugins oferecem grande conveniência aos usuários.
Além disso, o APISIX Ingress Controller também possui as seguintes vantagens únicas:
-
Boa Compatibilidade: O APISIX Ingress Controller suporta várias versões de recursos de entrada e pode ser compatível com diferentes versões do Kubernetes.
-
Atualização Dinâmica: Não é necessário recarregar o serviço ao modificar rotas, certificados e outras configurações, garantindo a operação suave do negócio.
-
Escalabilidade Flexível: Como o APISIX Ingress Controller adota uma estrutura que separa o plano de controle e o plano de dados, o cluster de plano de dados do Apache APISIX pode ser expandido independentemente sem escalar o APISIX Ingress Controller.
- Amigável para Operação e Manutenção: Na arquitetura atual, os usuários podem escolher implantar o cluster de plano de dados APISIX no cluster Kubernetes ou no ambiente de máquina física bare-metal, de acordo com a situação real. Além disso, devido à separação arquitetônica do APISIX ingress, o APISIX no plano de dados transporta o tráfego enquanto o APISIX ingress controller é o componente do plano de controle. Portanto, a falha do APISIX Ingress Controller não impactará o tráfego de negócios.
Após a seleção do gateway, a equipe do Gateway de API enfrentou um novo desafio: como migrar a configuração original do gateway de API de centenas de serviços para o APISIX Ingress? A equipe de Infraestrutura do Zoom estava desenvolvendo o pipeline de entrega contínua, o que pode reduzir significativamente o custo de migração da conversão de nginx.conf e outras configurações de Ingress para o APISIX Ingress.
O Processo e as Funções da Construção do Pipeline de Entrega Contínua
Pipeline de Entrega Contínua do Zoom
O pipeline de entrega contínua é um sistema de entrega de aplicativos de ponta a ponta que implementa um único modelo para declarar todos os requisitos de entrega de aplicativos e organizar e executar todas as etapas de entrega contínua em uma linha.
Há seis partes no pipeline de entrega contínua:
-
Preparar: preparar recursos predefinidos, incluindo infraestrutura, middleware, recursos de serviço em nuvem, etc.;
-
Configurar: preparar os arquivos de configuração e chaves necessários para o aplicativo;
-
Implantar: usar o K8s para implantação em cenários nativos da nuvem (incluindo informações sobre contêineres, imagens de contêineres, parâmetros, versões e instâncias);
-
Acessar: criar um Kubernetes Service e configurar automaticamente as regras de roteamento do Apache APISIX Ingress se a implantação exigir acesso externo;
-
Observar: Realizar configurações relacionadas à observabilidade, como monitoramento, alarmes, logs e análise de rastreamento;
-
Escalar: Declarar as regras de escalonamento dinâmico do KEDA (Kubernetes Event-driven Autoscaling) por meio de métricas de monitoramento.
Como Adotar o APISIX Ingress no Pipeline
Gerenciamento de Projetos
Os Gerentes de Projetos se preocupam mais com as iterações de P&D e como gerenciar melhor o progresso de lançamento iterativo e a eficiência do pessoal na linha do tempo correspondente às iterações. O Zoom usa um fluxo de trabalho GitOps internamente para integrar a configuração do Gateway de API ao modelo de entrega de aplicativos. Sob esse modelo, a definição das regras de roteamento do APISIX é integrada com "Implantar" e outros links, entregando o controle de mudanças ao GitHub. Com a criação e mesclagem de branches do GitHub, o pipeline realiza linhas do tempo consistentes entre o lançamento e o rollback da configuração do aplicativo e do gateway.
# Trecho de Código do Pipeline de CD do Zoom no Repositório Git
deploy:
type: Deployment
replicas: ~{ replicas, 2 }
version: "latest"
containers:
- name: my-app
image: "busybox"
command: "echo 'Demo' && sleep 99d"
access:
- protocol: https
host: my-domain.my-org.com
cert: my-tls-cert
apisix:
routes:
http:
- name: my-api
authentication:
# ......
match:
paths:
- /my-api/*
Dessa forma, simplifica o gerenciamento de lançamentos em gerenciamento de fluxo de trabalho dentro do GitHub e resolve o problema do descompasso de tempo entre sistemas upstream e downstream ao corresponder mudanças quando múltiplas iterações são processadas simultaneamente.
Desenvolvimento de Aplicativos
Os desenvolvedores se concentram principalmente nas capacidades de roteamento e autenticação das APIs, que estão fortemente relacionadas aos serviços de negócios e devem ser preenchidas pelos desenvolvedores para alcançar o efeito automático. Além disso, eles se preocupam com o desenvolvimento e implementação de funções de negócios e o nível superior do negócio, esperando construir uma infraestrutura pronta para uso.
A partir dos códigos mencionados acima, podemos ver que os desenvolvedores só precisam definir Authentication
e Match
neste pipeline de entrega contínua. Eles não precisam saber a lógica subjacente:
- Primeiro, traduzir isso em Kubernetes Deployment e Service.
- Em seguida, chamar a API da plataforma para verificar a correção do caminho.
- Por fim, traduzir isso em objetos ApisixRoute.
Integrar a configuração do APISIX e o fluxo de trabalho do pipeline de entrega contínua oferece aos desenvolvedores uma maneira mais eficiente.
Gerenciamento de Ambiente
Requisitos complexos de gerenciamento e controle de ambiente frequentemente ocorrem em cenários toB, e questões de entrega em alguns cenários de nuvem privada, nuvem dedicada e nuvem híbrida devem ser consideradas.
Algumas configurações do APISIX ingress foram implementadas para atender ao requisito de ocultar diferenças ambientais. Dessa forma, os gerentes de sistema podem controlar de forma abrangente as diferenças em alguns ambientes heterogêneos. Todos os serviços implantados no ambiente são eficazes, evitando o fardo cognitivo e operações de implantação especiais causadas por diferenças ambientais para desenvolvedores de aplicativos e operações. Por exemplo, o Zoom pode usar configuração personalizada para desativar o rastreamento para alguns ambientes, converter objetos ApisixRoute em objetos Ingress nativos e Anotações do NGINX Ingress, e usar diferentes imagens para puxar segredos.
Além disso, o isolamento de múltiplos inquilinos é necessário quando várias linhas de negócios estão usando o ambiente APISIX. O APISIX Ingress fornece um seletor de Anotação que permite que diferentes objetos ApisixRoute sejam capturados por diferentes instâncias do APISIX Ingress Controller.
Gerenciamento de Infraestrutura
A equipe do Gateway de API precisa controlar todas as instâncias do APISIX, configurar políticas de segurança de forma abrangente, implementar múltiplas zonas de disponibilidade, e assim por diante.
Cada plugin do pipeline fornece itens de configuração para engenheiros de infraestrutura. No plugin ingress-apisix
, há uma propriedade defaultPlugins
.
Após a equipe do gateway de API configurar a propriedade, a configuração entrará em vigor para todos os serviços, o que é adequado para uma estratégia unificada de segurança e controle de riscos.
Conclusão
O APISIX Ingress Controller desempenha um papel importante no pipeline de entrega contínua do Zoom, aliviando a pressão no gerenciamento de projetos, desenvolvimento de aplicativos, gerenciamento de ambiente e gerenciamento de middleware e infraestrutura. O caso do Zoom vale a pena ser estudado por outras empresas, e esperamos que o APISIX Ingress Controller contribua para a inovação de mais empresas.
Além disso, o Apache APISIX Ingress lançou oficialmente a versão V1.5 em agosto de 2022, que unifica a proposta de todas as versões de API de recursos e atualiza todas as versões de API de CRD para V2. Ao mesmo tempo, ele suporta a maioria dos recursos da API Gateway. O Apache APISIX Ingress permitiu que recursos de Ingress usassem plugins arbitrários do APISIX ao adicionar uma nova Anotação “k8s.apisix.apache.org/plugin-config-name” aos recursos de Ingress. Dessa forma, aumentará significativamente a facilidade de uso do APISIX Ingress Controller e reduzirá o custo para os usuários migrarem de outros Controladores de Ingress para o APISIX Ingress Controller.
Para mais informações, consulte Apache APISIX Ingress V1.5.