De Traefik à APISIX : l'expérience de Horizon Robotics avec le contrôleur Ingress

Xin Zhang

October 10, 2022

Ecosystem

Dans l'industrie automobile, la plupart des entreprises sont en train de passer à la conduite autonome et aux nouvelles énergies. En particulier pour la conduite autonome, chaque entreprise a investi beaucoup de ressources pour achever le développement et l'entraînement des modèles de conduite autonome.

Dans ce processus, comment assurer la stabilité et l'efficacité des opérations tout en itérant rapidement sur le produit ?

Cet article examinera la plateforme de développement d'IA de Horizon Robotics comme exemple pour voir comment la passerelle API Apache APISIX et l'Ingress Controller ont aidé l'équipe de R&D de Horizon Robotics à résoudre ce point de douleur.

Comparaison des Passerelles

Limitations de Traefik

Avant d'utiliser APISIX Ingress Controller, le contrôleur Ingress utilisé par le système d'exploitation était Traefik1.x, mais il y avait plusieurs problèmes.

  • Traefik 1.x configure les règles de routage via Ingress, et certains plugins doivent être configurés en ajoutant des annotations. De cette manière, vous ne pouvez ajouter des plugins que pour toutes les règles sous l'Ingress actuel, et ne pouvez pas réaliser une configuration plus granulaire.
  • Traefik 1.x ne supporte pas la configuration visuelle de règles spécifiques et ne peut pas localiser directement un service spécifique en accédant à l'URL de la demande via les navigateurs.
  • Le fichier de configuration par défaut de Traefik (ConfigMap) a peu d'attributs, et de nombreuses configurations par défaut nécessitent de consulter la documentation officielle, et certains paramètres ne sont pas cohérents avec la configuration par défaut de NGINX, ce qui rend la maintenance plus compliquée.

En réponse à ces problèmes, l'équipe technique de Horizon Robotics a décidé de remplacer le contrôleur Ingress. Au début du processus de sélection, l'équipe a envisagé de mettre à niveau Traefik vers la version 2.0 pour résoudre les problèmes ci-dessus, mais comme nous devions également utiliser un nouveau CRD pour la mise à niveau et que le coût de migration était élevé, nous avons dû essayer d'autres solutions de contrôleur Ingress.

Avantages de APISIX Ingress Controller

Dans la phase initiale de sélection, nous avons principalement comparé Apache APISIX, Kong et Envoy. Cependant, les autres solutions ne répondent plus ou moins pas aux besoins des scénarios existants en termes de fonctionnalités ou de performances, à l'exception d'APISIX Ingress. Par conséquent, nous avons finalement choisi APISIX Ingress. En plus de certaines fonctionnalités générales, nous sommes particulièrement intéressés par les points suivants.

  • Plugins Riches : Les plugins sont écologiquement solides, et tous les plugins supportés par APISIX peuvent être configurés de manière déclarative en utilisant apisix-ingress-controller, et les plugins peuvent être personnalisés pour un seul backend sous ApisixRoute.
  • Configuration Visuelle : Avec APISIX Dashboard, vous pouvez voir chaque apisix route. Et si le même domaine est configuré dans plusieurs namespaces ou fichiers YAML, vous pouvez rechercher le préfixe de chemin en conjonction avec APISIX Dashboard pour le localiser rapidement en cas de conflit.
  • Vérification Granulaire : APISIX Ingress Controller vérifie les ressources déclarées dans le CRD qu'il gère. Si un service inexistant est déclaré dans le CRD, le message d'erreur sera stocké dans l'event de ApisixRoute et le changement ne prendra pas effet, ce qui peut réduire certains problèmes causés par une mauvaise utilisation dans une certaine mesure.
  • Fonctionnalités Riches : APISIX supporte la mise à jour à chaud et les plugins à chaud, la réécriture des requêtes de proxy, les authentifications multiples, le développement de plugins en plusieurs langues et de nombreuses autres fonctionnalités. Veuillez vous référer aux fonctionnalités d'APISIX pour plus d'informations.
  • Communauté Active : Par rapport aux communautés d'autres solutions open source, APISIX a de nombreux mainteneurs et contributeurs actifs sur Slack, GitHub et la liste de diffusion.
  • Haute Performance : Comme vous pouvez le voir dans le graphique ci-dessous, la performance d'APISIX est d'environ 120 % de celle d'Envoy lors de la comparaison avec le test de pression d'Envoy, et plus il y a de cœurs, plus la différence de QPS est grande.

QPS

Architecture Globale

Comme vous pouvez le voir dans le diagramme d'architecture ci-dessous, APISIX Ingress sert de point d'entrée pour tout le trafic. Tout le trafic accédé entre en amont (services métier) via APISIX Ingress, qu'il provienne d'outils en ligne de commande, du Web, de plateformes SaaS ou d'OpenAPI. En ce qui concerne l'authentification, comme l'entreprise dispose d'un service d'authentification dédié, elle utilise directement le plugin forward-auth d'APISIX pour réaliser l'authentification externe.

Architecture

Au niveau de la passerelle, tout le trafic entre via le nom de domaine, et le trafic passera d'abord par LVS, qui sera redirigé vers le nœud APISIX en arrière-plan, puis APISIX distribuera le trafic vers le Pod correspondant selon les règles de routage. Sur LVS, ils ont également changé le port par défaut d'APISIX Ingress de 9180 à 80 afin que LVS pointe directement vers APISIX Ingress, ce qui facilite la redirection du trafic.

Flow Chart

Scénarios

Après avoir compris l'architecture globale, nous partagerons quelques scénarios que notre entreprise met actuellement en œuvre avec APISIX Ingress.

Téléchargement de Fichiers de Grande Taille

Le premier scénario est celui du téléchargement de fichiers de grande taille, qui peut être moins courant dans les entreprises générales, mais plus courant dans les entreprises qui font de l'entraînement de modèles d'IA. Ce scénario se trouve principalement dans le système d'entraînement de modèles de Horizon Robotics, où les données collectées par la R&D sont téléchargées sur le système via le réseau, et la taille des données dépasse généralement plusieurs centaines de Go, et une OOM se produit lorsque la quantité de données téléchargées est trop importante sans ajuster les paramètres d'APISIX.

iTerm

Parce que la valeur par défaut de client_body_buffer_size est de 1 Mo, lorsque le tampon est plein, les fichiers temporaires sont écrits sur le disque, ce qui entraîne une IO disque élevée.

Si le répertoire où les fichiers temporaires sont écrits est pointé vers la mémoire partagée (/dev/shm), cela entraîne à nouveau une utilisation élevée de la mémoire cache d'APISIX.

Monitor

Après un débogage continu, nous avons trouvé que la raison était qu'APISIX n'avait pas activé le téléchargement en flux. Pour ce scénario, nous avons mis à niveau la version d'APISIX de 2.11 à 2.13 et ajusté les paramètres d'APISIX. Tout d'abord, nous avons changé le paramètre proxy_request_buffering à off dans APISIX ConfigMap pour activer le téléchargement en flux. Ensuite, nous avons extrait la configuration réutilisable du CRD ApisixPluginConfig fourni par APISIX Ingress Controller et défini dynamiquement client_max_body_size pour les routes qui nécessitent ce scénario comme configuration au niveau du namespace.

Debug

Appels de Services dans des Environnements Multi-cloud

Pour les appels de services dans des environnements multi-cloud, une partie du trafic métier arrive d'abord au centre de données local, puis passe par APISIX Ingress pour atteindre le Pod. Certains services dans le Pod accèdent aux services d'AliCloud via le nom de domaine. De plus, certains scénarios où le service invoque d'autres services existent principalement pour l'entraînement multi-cloud. Les utilisateurs prendront le centre de données comme point d'entrée et sélectionneront le cluster pour soumettre la tâche au cluster cloud correspondant.

Multi-cloud Architecture

Authentification Externe avec forward-auth

Lorsque nous avons commencé à utiliser APISIX Ingress, APISIX ne supportait pas le plugin forward-auth, donc nous avons défini un plugin personnalisé basé sur apisix-go-plugin-runner, mais cela a créé une couche supplémentaire d'appels gRPC, ce qui a rendu le débogage difficile et les journaux invisibles. Comme APISIX supporte le plugin forward-auth depuis le début de cette année, nous avons remplacé le plugin personnalisé par celui officiel, ce qui réduit une couche d'appels gRPC et rend la surveillance plus pratique.

Authentication Architecture

Surveillance des Applications

Dans la surveillance des applications, nous avons activé le plugin Prometheus d'APISIX globalement et effectué quelques ajustements et optimisations pour notre propre métier, comme l'ajout de la concurrence en temps réel, du QPS, du taux de réussite des API en temps réel d'APISIX, et de la bande passante en temps réel d'APISIX pour une surveillance plus granulaire d'APISIX.

Monitoring

Résumé

Nous utilisons actuellement Apache APISIX Ingress Controller comme passerelle de trafic uniquement pour certaines de nos lignes métier, et nous allons mettre en production d'autres métiers pour apporter des scénarios d'application plus riches à la communauté. Si vous comparez également des solutions de contrôleur Ingress, nous espérons que cet article vous donnera quelques indications. De plus en plus d'utilisateurs utilisent Apache APISIX Ingress dans des environnements de production, et si vous utilisez également APISIX Ingress, veuillez partager vos cas d'utilisation dans la communauté.

Tags: