RSS Le blog technique d'Airbnb... Note

RSS Le blog technique d'Airbnb - Medium

L'ingénierie Airbnb est un portfolio d'articles de l'équipe d'ingénierie d'Airbnb qui traite de diverses technologies, innovations et études de cas du secteur. Le site offre aux lecteurs une analyse approfondie et des aperçus sur les différentes approches et les défis qu'ils rencontrent en matière d'ingénierie logicielle, de développement de produits, de scalabilité, de performance et bien plus encore. Le blog couvre également les nouvelles tendances en technologie, leadership et collaboration d'équipe, offrant des conseils pour améliorer les entreprises tech.

Fil de notes

De la limitation de débit statique à la gestion adaptative du trafic dans le magasin clé-valeur d'Airbnb

Le magasin clé-valeur d'Airbnb, Mussel, utilisait à l'origine une simple limitation de débit QPS pour empêcher les clients individuels de submerger le système. Avec la croissance et la complexité du trafic, cette approche s'est avérée insuffisante en raison de la variance des coûts et de la distorsion du trafic. Pour y remédier, Mussel a évolué pour mettre en œuvre un système de qualité de service (QoS) à plusieurs niveaux. La première couche, le contrôle de débit conscient des ressources (RARC), facture les requêtes en unités de requête (RU) qui tiennent compte des lignes, des octets et de la latence, reflétant le coût réel du backend. Ce système utilise des token buckets avec des quotas RU statiques pour chaque appelant. La deuxième couche, la délestage de charge, assure une protection en temps réel lorsque la capacité est sollicitée ou que des points chauds se développent. Elle combine la criticité du trafic, un ratio de latence indiquant le stress du système et une politique de mise en file d'attente inspirée de CoDel. Cela permet au trafic à haute priorité de rester réactif et de réduire gracieusement le trafic moins prioritaire lorsque la latence augmente. La troisième couche, la détection des clés chaudes et la défense contre les attaques DDoS, identifie et atténue les pics de requêtes identiques ciblant des données spécifiques. Elle utilise un compteur top-k en mémoire pour la détection en temps réel, la mise en cache locale sur les pods de répartition et la coalescence des requêtes pour n'envoyer qu'une seule requête à la couche de stockage pour les recherches de clés chaudes en double. Ces contrôles en couches ont considérablement amélioré la capacité de Mussel à gérer les pics de trafic et à maintenir la fiabilité. Les principaux points à retenir sont la valeur de l'impact précoce pour la validation des concepts, la préférence pour les boucles de contrôle locales pour l'évolutivité et l'utilisation de mécanismes fonctionnant sur différentes échelles de temps. Cette pile QoS sophistiquée garantit que Mussel reste rapide et fiable, même dans des conditions de trafic extrêmes et volatiles.
CdXz5zHNQW_D4i1N1yN56.jpeg

Construction d'une base de données clé-valeur de nouvelle génération chez Airbnb

Airbnb a réarchitecturé son magasin clé-valeur principal, Mussel, de V1 à V2 pour répondre aux exigences évolutives des données en temps réel. Mussel V2 aborde la complexité opérationnelle, les limitations de capacité et les problèmes de cohérence de V1 avec un backend NewSQL natif dans le cloud. Les améliorations clés incluent le déploiement automatisé de Kubernetes, le partitionnement dynamique par plage pour une meilleure gestion de la capacité et des options de cohérence flexibles. La nouvelle architecture comprend un service Dispatcher sans état pour traduire les appels d'API et un chemin d'écriture piloté par les événements utilisant Kafka pour la durabilité. Les capacités de chargement en masse sont préservées, améliorées avec des contrôleurs sans état et des flottes de workers avec état pour un débit élevé. L'expiration automatisée du Temps de Vie (TTL) est désormais consciente de la topologie et plus efficace à grande échelle. La migration de V1 à V2 a employé une stratégie complexe de type bleu/vert avec des écritures doubles et des lectures fantômes pour garantir l'absence d'interruption et de perte de données. Les leçons critiques apprises incluent la gestion des complexités de cohérence et l'importance du pré-partitionnement pour le partitionnement basé sur les plages. Kafka a joué un rôle crucial dans le maintien de la cohérence éventuelle pendant le processus de migration. Mussel V2 fusionne avec succès l'ingestion en masse, les écritures à haute vitesse et les lectures à faible latence sur une seule plateforme, simplifiant l'infrastructure de données pour les équipes d'ingénierie.
CdXz5zHNQW_xJf1iLzWz1.jpeg

Viaduc, cinq ans après : Moderniser le maillage de services axé sur les données

Viaduct, le maillage de services axé sur les données d'Airbnb, est désormais open-source. En cinq ans, l'utilisation de Viaduct chez Airbnb a considérablement augmenté, le trafic ayant été multiplié par huit et le nombre d'équipes ayant doublé. Il continue d'être guidé par trois principes fondamentaux : un schéma central, une logique métier hébergée et la réentrance. Le schéma central intègre les données de toute l'entreprise, faisant de Viaduct un maillage de données incontournable. L'hébergement de la logique métier directement dans Viaduct, rendu possible par une plateforme sans serveur, simplifie les opérations pour les développeurs. La réentrance permet à la logique hébergée de se composer avec d'autres logiques via des fragments et des requêtes GraphQL, tout en conservant la modularité. Une refonte récente, "Viaduct Modern", aborde les complexités passées en simplifiant l'API Tenant destinée aux développeurs en deux types de résolveurs : les résolveurs de nœuds et de champs. Cette modernisation introduit également la modularité des locataires, en formalisant les "modules de locataires" comme des unités de schéma et de code appartenant à une seule équipe, composées via GraphQL. La modularité du framework a également été améliorée, créant des limites d'abstraction plus fortes entre le moteur d'exécution GraphQL, l'API Tenant et le code hébergé. La nouvelle API du moteur est typée dynamiquement, tandis que l'API Tenant est typée statiquement, ce qui permet une évolution indépendante. Viaduct offre une migration progressive en exécutant simultanément les API Tenant Classic et Modern sur le nouveau moteur. D'autres améliorations incluent une meilleure observabilité, des temps de construction plus rapides grâce au développement axé sur le schéma et à la génération directe en bytecode, ainsi qu'un répartiteur pour la mise à l'échelle de Kubernetes et l'atténuation des rayons d'explosion. Airbnb rend Viaduct open-source pour bénéficier des contributions de la communauté et pense qu'il peut être précieux pour les projets GraphQL à grande échelle et naissants. L'API Modern est actuellement en alpha, mais le nouveau moteur est en pleine production.
CdXz5zHNQW_Ry0cTKX3TG.jpeg

Apprivoiser l'architecture orientée services grâce à un maillage de services axé sur les données

Airbnb a développé Viaduct, un service mesh axé sur les données, pour améliorer la modularité de son architecture basée sur les microservices. Les service meshes traditionnels sont orientés procédure, tandis que Viaduct se concentre sur les données, en utilisant un schéma GraphQL comme principe d'organisation central. Ce schéma définit les types, les requêtes et les mutations, en abstraisant les dépendances des services des consommateurs. Viaduct permet aux consommateurs de données d'accéder aux informations de plusieurs microservices sans dépendances directes, simplifiant ainsi l'architecture. Le schéma central facilite les changements d'API et de schéma de base de données, améliorant l'agilité des données et réduisant les efforts de coordination. Viaduct intègre des fonctions serverless pour les données dérivées, minimisant le nombre et la complexité des microservices. Le système, construit avec graphql-java, offre des fonctionnalités telles que la sélection de champs précis, l'observabilité des données et la mise en cache intra-requête. Il tire parti des outils de l'écosystème GraphQL et alimente une part importante du trafic API d'Airbnb. Viaduct répond aux défis liés aux graphes de dépendances en forme de spaghetti prévalant dans les grandes architectures orientées services. Le passage à une approche axée sur les données vise à rationaliser l'accès aux données et à améliorer la maintenabilité globale du système. L'architecture a commencé avec un schéma propre et a évolué pour inclure de nombreuses entités de base. La solution, déjà déployée en production, illustre l'engagement d'Airbnb à faire évoluer son SOA.
CdXz5zHNQW_YzRZpul0zT.jpeg

Migrer le monorépertoire JVM d'Airbnb vers Bazel

Airbnb a migré son énorme monorepo JVM de Gradle à Bazel, un processus qui s’est étendu sur 4,5 ans. Les principales raisons de ce changement étaient la vitesse supérieure, la fiabilité et l’infrastructure de construction unifiée de Bazel. La mise en cache et l’exécution à distance de Bazel ont considérablement accéléré les temps de construction et de test, améliorant ainsi la productivité des développeurs. La migration a résolu le manque de fiabilité de Gradle résultant de constructions non hermétiques et de conflits de ressources. Une preuve de concept avec le service Viaduct d’Airbnb a démontré l’efficacité de Bazel, conduisant à une adoption plus large. Un composant crucial était un générateur de fichiers de construction automatisé pour minimiser les efforts des développeurs et maintenir les systèmes de construction coexistants. Ce générateur a analysé efficacement les fichiers sources, géré les cycles de dépendance et pris en charge les graphiques de construction à granularité fine. La migration a également impliqué de relever des défis tels que la prise en charge de bibliothèques tierces multiversions et la garantie de la compatibilité du déploiement. Enfin, des tests rigoureux, en particulier des tests de démarrage et d’intégration pour les services, ont validé l’exactitude des déploiements construits par Bazel. Le résultat global est un système de construction considérablement amélioré avec une satisfaction accrue des développeurs.
CdXz5zHNQW_RVap6w2FjE.jpeg

Mises à jour sans heurt d'Istio à grande échelle

Airbnb a réussi à mettre à jour son maillage de service Istio 14 fois, gérant des dizaines de milliers de pods répartis sur des dizaines de clusters Kubernetes et des milliers de machines virtuelles. Le processus de mise à jour priorise la absence de temps d'arrêt et les déploiements graduels, permettant des mises à jour indépendantes sans intervention utilisateur. L'architecture comprend un cluster de gestion pour Istiod et plusieurs clusters de charge de travail. Les mises à jour suivent un modèle de canari, exécutant les versions actuelles et nouvelles d'Istio en parallèle. Cela est rendu possible en coordonnant les mises à jour du plan de contrôle (Istiod) et du plan de données (istio-proxy). De manière cruciale, les anciennes versions d'istio-proxy ne sont pas utilisées avec les nouvelles versions d'Istiod ; elles sont mises à jour de manière atomique. Un fichier de gestion central, rollouts.yml, définit la distribution souhaitée des versions d'Istio dans les espaces de nom. Pour Kubernetes, un outil maison appelé Krispr injecte des étiquettes de révision Istio dans les déploiements pendant la CI et l'admission de pod. Ce mécanisme garantit que les charges de travail sont mises à jour même si elles ne sont pas déployées fréquemment. Pour les machines virtuelles, les mises à jour sont gérées par un démon d'hôte, mxagent, qui installe des artefacts en fonction des balises de VM. Un contrôleur central, mxrc, met à jour ces balises pour les aligner avec rollouts.yml. Mxrc surveille également la santé des VM, garantissant un processus de mise à jour contrôlé. Cette approche découple efficacement les mises à jour d'infrastructure des déploiements d'application. L'investissement continu d'Airbnb dans la maintenabilité et la sécurité a rendu possible ces mises à jour complexes et à grande échelle d'Istio.
CdXz5zHNQW_deZowKwyHD.jpeg

Réussir la haute disponibilité avec une base de données distribuée sur Kubernetes chez Airbnb

Les organisations utilisaient traditionnellement des serveurs autonomes coûteux avec des mécanismes de sharding pour la mise à l'échelle des bases de données, mais cette approche s'est avérée problématique pour la maintenance à mesure que les exigences de données augmentaient. Exécuter des bases de données open-source scalable horizontalement, fiables et à faible latence dans le cloud à un coût raisonnable est un défi important. Airbnb a adopté une stratégie innovante en déployant un cluster de base de données distribué à travers plusieurs clusters Kubernetes pour améliorer la fiabilité et l'opérabilité. Gérer les services d'état comme les bases de données sur Kubernetes est difficile, en particulier en ce qui concerne le remplacement des nœuds et les mises à jour, car Kubernetes manque de prise en charge de la distribution des données. Pour atténuer cela, Airbnb a attaché des volumes de stockage aux nœuds à l'aide d'AWS EBS, permettant une réattachement automatique à de nouvelles machines virtuelles via des revendications de volume persistant Kubernetes. Des opérateurs Kubernetes personnalisés ont été développés pour gérer les événements de remplacement de nœuds, les catégorisant en échecs initiés par la base de données, échecs d'infrastructure planifiés et échecs non planifiés. Pour les échecs initiés par la base de données et les échecs d'infrastructure planifiés, les opérateurs s'assurent que tous les nœuds sont en cours d'exécution avant le remplacement et interceptent les évictions de pod pour coordonner des suppressions sécurisées. Les échecs non planifiés ne peuvent pas être coordonnés, mais la maintenance en cours est protégée en bloquant les remplacements jusqu'à ce que le matériel défectueux soit réparé. Pour garantir une haute disponibilité régionale, Airbnb déploie chaque base de données à travers trois clusters Kubernetes indépendants dans des zones de disponibilité AWS différentes, limitant ainsi la portée des problèmes. La surprovision de clusters de bases de données garantit une capacité suffisante même si une zone de disponibilité entière, un cluster Kubernetes ou tous les nœuds de stockage dans une zone tombent en panne. AWS EBS fournit une réattachement rapide pour les remplacements de nœuds et une durabilité supérieure, permettant un cluster hautement disponible avec seulement trois réplicas. Les pics de latence de queue dans EBS sont atténués en mettant en œuvre des timeouts de lecture de stockage et en autorisant les lectures à partir de réplicas pour réduire la latence et éviter les coûts inter-zones, les lectures obsolètes optimisant encore les performances de lecture. Cette stratégie de cluster Kubernetes multi-cluster, exploitant AWS EBS et des opérateurs personnalisés, permet aux systèmes de stockage distribués open-source d'atteindre une haute disponibilité, une faible latence et une scalabilité dans les environnements cloud, permettant une gestion de données robuste.
CdXz5zHNQW_5ISBolXzut.jpeg

Comprendre et améliorer les performances de SwiftUI

En 2022, Airbnb a adopté SwiftUI, ce qui a amélioré la productivité des ingénieurs mais a introduit de nouveaux défis de performance. Pour résoudre ces problèmes, Airbnb a créé de nouveaux outils pour identifier et valider les modèles de code critiques en matière de performance. L'architecture des fonctionnalités de l'entreprise utilise des modèles d'interface utilisateur déclaratifs et des systèmes de flux de données unidirectionnels, ce qui a simplifié l'adoption de SwiftUI. Cependant, les fonctionnalités SwiftUI utilisant cette architecture n'ont pas fonctionné aussi bien que prévu, et la compréhension des caractéristiques de performance de SwiftUI est cruciale pour la création de fonctionnalités performantes. L'algorithme de "diffing" de vues de SwiftUI, qui détermine quand le corps d'une vue doit être réévalué, est souvent négligé et n'est pas officiellement documenté. L'algorithme compare chacune des propriétés stockées de la vue, mais des modèles de code courants peuvent le dérouter, entraînant des évaluations inutiles du corps de la vue. Pour résoudre ce problème, Airbnb a créé une nouvelle macro @Equatable qui génère des conformances Equatable pour les vues, permettant aux ingénieurs de décider sélectivement quelles propriétés doivent être comparées lors du "diffing". Cette approche garantit que les vues sont "diffables" et empêche les régressions de se glisser plus tard. De plus, Airbnb a implémenté une règle SwiftLint personnalisée pour aider les ingénieurs à identifier quand le corps d'une vue est trop complexe et doit être refactorisé en éléments plus petits et "diffables". En décomposant les vues en éléments plus petits, SwiftUI peut efficacement mettre à jour uniquement les parties de la vue qui ont réellement changé, maintenant ainsi les performances à mesure que les fonctionnalités deviennent plus complexes.
CdXz5zHNQW_IYTQREK32w.jpeg

Tests de charge avec Impulse chez Airbnb

Le test de charge au niveau système d'Airbnb est essentiel pour la fiabilité et l'efficacité, permettant d'identifier les goulots d'étranglement, d'évaluer les capacités, d'établir des lignes de base de performance et de détecter les erreurs. Impulse est un framework interne de test de charge en tant que service qui fournit des outils pour générer des charges synthétiques, de simuler les dépendances et de recueillir des environnements de production. Impulse comprend quatre composants principaux : un générateur de charge, un collecteur de trafic, un simulateur de dépendances et un générateur d'API de test. Le générateur de charge permet aux propriétaires de services de réaliser des tests de charge contextuels, en générant des demandes en direct et en simulant les dépendances. Le collecteur de trafic capture à la fois le trafic en amont et en aval, permettant à Impulse de répéter avec précision le trafic de production lors des tests de charge. Le simulateur de dépendances simule les réponses en aval avec une latence, éliminant les interférences entre les services et réduisant les coûts de communication. Le générateur d'API de test crée des API HTTP pendant la mise en production, permettant aux outils de test de charge d'envoyer du trafic vers ces API synthétiques, permettant ainsi d'exercer les flux asynchrones comme s'ils étaient synchrones. Impulse est conçu pour minimiser l'effort manuel, s'intégrer sans heurt à la pile d'observabilité d'Airbnb et permettre aux équipes de s'attaquer de manière proactive aux problèmes potentiels. Le framework a reçu des retours positifs, aidant les équipes à identifier et à résoudre les problèmes potentiels dans leurs services. Impulse est actuellement mis en œuvre dans plusieurs services de backend de soutien à la clientèle et est en cours d'examen avec les équipes à travers l'entreprise.
CdXz5zHNQW_MMZuwGyO3E.jpeg

Écoute, Apprentissage et Assistance à Grande Échelle : Comment l'Apprentissage Automatique Transforme le Support Vocal d'Airbnb...

Airbnb a amélioré son système de réponse vocale interactive (RVI) en utilisant l'apprentissage automatique pour mieux comprendre les utilisateurs et aider plus efficacement les agents. Le système RVI écoute, comprend et répond en temps réel, permettant aux appelants de décrire leurs problèmes naturellement et de recevoir une assistance instantanée. Le système utilise la reconnaissance vocale automatisée, la détection du motif de contact et des modèles de langage pour comprendre les utilisateurs et assister les agents. Le système de reconnaissance vocale automatisée a été amélioré pour réduire les erreurs, et un modèle de détection du motif de contact a été développé pour identifier l'intention derrière la requête d'un appelant. Un système de récupération d'articles d'aide fournit des informations pertinentes aux utilisateurs, et un modèle de reformulation garantit que les utilisateurs comprennent la solution avant d'être mis en relation avec un agent. Le système a amélioré la satisfaction des utilisateurs, réduit le besoin d'intervention humaine et fourni une expérience d'assistance vocale plus intuitive.
CdXz5zHNQW_Xyuw3fwzOq.jpeg

Amélioration du classement des recherches pour les cartes

Airbnb a adapté son algorithme de classement pour son interface de carte afin de mieux connecter les hôtes et les invités. Initialement, l'algorithme de classement était basé sur les probabilités de réservation, mais cette approche ne fonctionne pas pour les cartes où l'attention de l'utilisateur est répartie également entre les épingles. Pour améliorer l'expérience utilisateur, Airbnb a testé différents modèles d'attention de l'utilisateur, y compris la limitation du nombre d'épingles de carte et la création de deux rangs d'épingles basés sur les probabilités de réservation. Ces changements ont entraîné des améliorations significatives des réservations et de la satisfaction des utilisateurs. La société a également développé un algorithme pour repositionner la carte afin de mettre en valeur les annonces avec les plus hautes probabilités de réservation, ce qui a encore amélioré les réservations et réduit les mouvements de carte. Malgré ces avancées, il y a encore un défi pour représenter la gamme complète des annonces disponibles sur la carte, qui est un objectif pour le travail futur.

Airbnb à KDD 2024

Airbnb a eu une présence significative à la conférence KDD 2024 à Barcelone, en Espagne, avec trois articles complets de la piste ADS, un atelier et sept articles et conférences invitées acceptés dans les actes de la conférence principale. Les sujets des travaux couvraient l'apprentissage profond et le classement de recherche, l'expérimentation et la mesure en ligne, ainsi que les places de marché à deux côtés. Les contributions de l'entreprise à l'atelier sur l'optimisation des places de marché à deux côtés ont discuté de l'évolution du classement de contenu, des systèmes de recommandation et de l'extraction de données pour résoudre les problèmes des producteurs et des consommateurs sur ces plateformes. Le travail d'Airbnb sur la modélisation de l'intention des hôtes pour la personnalisation utilise une approche d'apprentissage profond pour prédire les plans de voyage et produit plusieurs signaux d'intention utilisateur. L'entreprise a également présenté un article sur la compréhension de la demande des hôtes, combinant la modélisation économique avec des techniques d'inférence causale pour estimer la sensibilité aux prix parmi les segments de hôtes.

Mon voyage vers Airbnb | Vijaya Kaza

Vijaya Kaza est la directrice de la sécurité en chef et la responsable de l'ingénierie pour la confiance et la sécurité chez Airbnb, dirigeant des équipes qui développent des technologies pour protéger la communauté et sécuriser l'infrastructure. Elle est également la co-parraine exécutive du Conseil de la diversité d'Airbnb Tech. Vijaya a grandi dans une grande famille en Inde, où elle était attendue pour exceller académiquement, et elle a développé une forte affinité pour les sciences et les mathématiques, étudiant l'ingénierie électrique à l'université. Après l'université, elle a obtenu un emploi chez Cisco en tant qu'ingénieur logiciel et s'est accidentellement retrouvée dans le domaine de la sécurité, en suivant un manager qu'elle aimait. Elle a passé 17 ans chez Cisco, dirigeant le développement de produits pour un portefeuille de produits de sécurité d'un milliard de dollars, et a ensuite travaillé chez FireEye et Lookout, une startup de San Francisco axée sur la sécurité mobile. Vijaya a été approchée pour le poste de CSO chez Airbnb, qu'elle était initialement réticente à accepter, mais elle a été impressionnée par la vision et la mission de l'entreprise. Elle a rejoint Airbnb en 2019, attirée par la détermination de l'entreprise à offrir une expérience utilisateur positive et sa mission axée sur la mission. Vijaya dirige deux équipes, Trust and Safety et Security, qui partagent la même mission de protéger les utilisateurs et la plateforme, mais ont des techniques, des menaces et des domaines de focalisation différents. En dehors du travail, Vijaya a poursuivi la comédie d'improvisation, qui lui a enseigné des leçons de leadership précieuses, telles que penser sur ses pieds et répondre à de nouveaux scénarios dans l'instant. Elle conseille aux autres de maintenir leur concentration, de garder une tête solide et de poursuivre résolument malgré les revers professionnels.

Des données aux connaissances : segmentation de l'offre d'Airbnb

Airbnb utilise une segmentation basée sur les données pour comprendre les modèles de disponibilité de ses hôtes. Ce processus implique l'analyse du taux de disponibilité, de la régularité et de la saisonnalité des annonces pour différencier les hôtes ayant des profils similaires. En appliquant un algorithme de regroupement K-means, Airbnb identifie huit clusters distincts d'hôtes en fonction de leurs modèles de disponibilité. Ces clusters comprennent « Toujours disponible », « Saison court », « Motivé par les événements » et d'autres, chacun ayant des caractéristiques et des préférences uniques. L'entreprise valide ces segments par des tests A/B, les corrèle avec des attributs connus et mène des recherches UX pour s'assurer qu'ils correspondent au comportement du monde réel. Ce modèle de segmentation est ensuite mis à l'échelle pour toutes les annonces en utilisant un algorithme d'arbre de décision et intégré dans l'entrepôt de données pour être utilisé par diverses équipes. Cette approche aide Airbnb à développer des stratégies, des produits et des messages ciblés pour mieux soutenir ses hôtes et améliorer l'expérience utilisateur globale.

Construire une plateforme de signaux utilisateur chez Airbnb

Airbnb a développé une plateforme de traitement de flux appelée User Signals Platform (USP) pour améliorer l'expérience utilisateur grâce à la personnalisation. La plateforme utilise les données d'engagement des utilisateurs pour fournir des interactions personnalisées pendant le processus de réservation. Elle se compose d'une couche de pipeline de données et d'une couche de service en ligne, avec Flink pour le traitement en temps réel et le traitement par lots pour la correction et la réinitialisation des données. USP prend en charge divers traitements d'événements utilisateur, notamment les signaux utilisateur, les segments utilisateur et les engagements de session. Elle utilise également des métriques telles que la latence des événements, la latence d'ingestion, la latence des tâches et la latence de transformation pour mesurer les performances des tâches de streaming. La plateforme permet aux développeurs de définir des transformations et des segments utilisateur sans se soucier des composants de streaming. Pour améliorer la stabilité des tâches Flink, Airbnb utilise des gestionnaires de tâches de secours pour assurer un traitement continu en cas d'échec d'un gestionnaire de tâche.

La visite photo alimentée par l'IA d'Airbnb utilisant le Vision Transformer

Airbnb a développé une fonctionnalité de visite photo alimentée par l'IA pour améliorer l'expérience des hôtes en fournissant des informations détaillées sur les annonces. Cette fonctionnalité utilise des transformateurs de vision pour classer et organiser les photos des annonces en 16 types de pièces différents. Pour améliorer la précision du modèle, Airbnb a utilisé la pré-formation, l'apprentissage multi-tâches, l'apprentissage en ensemble et la distillation des connaissances. Le processus de pré-formation a consisté à former un modèle de transformateur de vision sur des millions de photos d'annonces Airbnb. L'apprentissage multi-tâches a utilisé un ensemble de données diversifié pour améliorer la capacité du modèle à interpréter les visuels. L'apprentissage en ensemble a combiné les forces de plusieurs modèles pour des prédictions robustes, et la distillation des connaissances a permis un déploiement efficace sans sacrifier la précision. La visite photo alimentée par l'IA a été lancée dans le cadre de la sortie hivernale 2023 d'Airbnb, et l'entreprise continue de raffiner les modèles pour une meilleure expérience utilisateur.

Adopter Bazel pour le web à grande échelle

Airbnb a récemment adopté Bazel, l'outil de construction open source de Google, comme système de construction universel pour les plateformes backend, web et iOS. Le grand répertoire web monolithique de l'entreprise, composé de plus de 11 millions de lignes de code, présentait des défis avec des scripts de construction personnalisés et des logiques de mise en cache difficiles à maintenir et qui ne scalait pas bien. Pour résoudre ces problèmes, Airbnb a migré vers Bazel, qui offrait sophistication, parallélisme, mise en cache et performances. Le processus de migration a commencé en 2021, mais il n'y avait pas de précédent industriel public pour intégrer Bazel avec le web à grande échelle en dehors de Google. L'équipe a dû surmonter des problèmes de performance lors de la transmission de fichiers volumineux vers l'environnement distant et a établi des principes de migration qui incluaient l'amélioration ou le maintien des performances globales et la réduction de l'impact sur les développeurs contribuant au répertoire monolithique pendant la transition. Pour préparer le répertoire pour Bazel, l'équipe a effectué une rupture de cycle et une génération automatique de fichiers BUILD.bazel. Ils ont également migré les travaux CI vers Bazel, en commençant par la vérification de type, la mise en forme et les tests unitaires. L'équipe a activé TypeScript, ESLint et Jest, et a introduit la mise en cache pour réduire la taille d'entrée et améliorer les performances. Pour éviter tout retour en arrière, l'équipe a déplacé les tests de "cachés" à "obligatoires" via un attribut de règle et a assuré une source unique de vérité en ne faisant pas fonctionner les tests sous le setup Jest en cours de remplacement. Ils ont également écrit un script pour comparer avant et après Bazel pour déterminer la prêt à migrer en utilisant des métriques telles que le temps d'exécution des tests, les statistiques de couverture de code et le taux d'échec. En parallèle avec la migration CI, l'équipe a veillé à ce que les développeurs puissent exécuter Bazel localement pour reproduire et itérer sur les échecs CI. Ils ont livré une expérience Bazel locale qui est à la hauteur ou supérieure à l'expérience développeur existante et aux performances, permettant aux développeurs de continuer à utiliser des outils familiers et d'opter pour Bazel lorsque cela est bénéfique.

Transformer la récupération de localisation chez Airbnb : Un parcours de l'heuristique à l'apprentissage par renforcement

Airbnb a transformé la façon dont les gens voyagent autour du globe, mais fournir aux invités des options pertinentes dans leurs résultats de recherche est devenu de plus en plus complexe en raison de la diversité des emplacements et des types de propriétés dans leur inventaire. Pour relever ce défi, Airbnb est passé de l'utilisation d'heuristiques simples à des techniques d'apprentissage automatique et d'apprentissage par renforcement avancées pour transformer leur processus de récupération de localisation. Initialement, Airbnb s'appuyait sur des heuristiques pour définir des zones de carte en fonction du type de recherche, mais ces heuristiques avaient des limites et ne pouvaient pas faire la distinction entre différents types de recherches ou s'adapter bien à de nouvelles données. Airbnb a ensuite exploré les statistiques pour améliorer la récupération de localisation en construisant un jeu de données pour chaque destination de voyage qui enregistrait où les invités réservaient des annonces lorsqu'ils recherchaient cette destination. Cependant, cette approche statistique avait encore des limites et traitait toutes les recherches pour un emplacement de la même manière, indépendamment des paramètres de recherche spécifiques. Cela a conduit Airbnb à penser que la récupération de localisation pourrait nécessiter des techniques plus avancées telles que l'apprentissage automatique. Airbnb a construit un modèle d'apprentissage automatique capable d'apprendre à partir de divers paramètres de recherche, tels que le nombre d'invités et la durée du séjour, et de prédire des zones de carte plus pertinentes pour chaque recherche. Le système d'apprentissage automatique a augmenté le rappel des annonces réservées de 7,12 % et a réduit la taille de la zone de récupération de la carte de 40,83 %, ce qui a eu un impact cumulatif de +1,8 % sur les réservations non annulées sur la plateforme. Airbnb a ensuite introduit l'apprentissage par renforcement dans le processus de récupération de localisation, permettant au système d'apprendre en continu à partir des interactions des invités et d'ajuster la zone de récupération de la carte en fonction du comportement de réservation des invités. Le système d'apprentissage par renforcement a réussi à explorer davantage les emplacements moins fréquentés et à explorer moins les emplacements qui sont souvent recherchés et réservés, ce qui a eu un impact cumulatif de +0,51 % sur les réservations non annulées et de +0,71 % sur le taux de voyage 5 étoiles. Le parcours d'Airbnb, de l'utilisation d'heuristiques simples à des modèles d'apprentissage automatique et d'apprentissage par renforcement sophistiqués, démontre le pouvoir des approches basées sur les données pour transformer des systèmes complexes. La transformation a un impact cumulatif de +2,66 % sur les réservations non annulées, une réalisation importante pour une entreprise opérant à l'échelle d'Airbnb.

Plateforme d'automatisation v2 : Amélioration de l'IA conversationnelle chez Airbnb

La plateforme d'automatisation v2 d'Airbnb est une plateforme d'IA conversationnelle conçue pour soutenir les applications de modèles de langage grandeur nature (LLM) émergentes. La plateforme permet aux développeurs de créer des applications LLM qui améliorent l'efficacité du support client et les temps de réponse. Elle comprend plusieurs composants clés, tels que le workflow de chaîne de pensée, la gestion du contexte et le framework de garde-fous. Le workflow de chaîne de pensée utilise les LLM comme moteurs de raisonnement pour déterminer quels outils utiliser et dans quel ordre. La gestion du contexte assure que le LLM a accès à l'information contextuelle nécessaire, tandis que le framework de garde-fous surveille les communications avec le LLM pour s'assurer qu'il est utile, pertinent et éthique. La plateforme évolue pour accommoder les technologies transformatrices, étendre les capacités des outils de chaîne de pensée et enquêter sur la simulation d'applications LLM.

Hydratation des données de rivière - Partie 1

Riverbed, partie de la pile technologique d'Airbnb, optimise la consommation de données à partir de magasins de système d'enregistrement pour mettre à jour des magasins optimisés pour la lecture. Il utilise une architecture Lambda avec des composants en flux et par lots. L'aspect en flux se concentre sur la construction de vues matérialisées à partir d'événements de capture de changement de données (CDC). Le pipeline de notification consomme des événements de notification et interroge des sources de données dépendantes pour construire des vues matérialisées, qui sont ensuite écrites dans des magasins de puits. L'opération de jointure utilise une structure en forme de DAG pour joindre efficacement les sources de données, en exploitant JoinConditionsDag pour les métadonnées et JoinResultsDag pour stocker les résultats. L'opération de couture transforme les résultats joints en un modèle utilisable, le StitchModel. Riverbed prend en charge plusieurs puits, y compris Apache Hive et Kafka, pour la flexibilité. Le système en flux met à jour efficacement les vues matérialisées à partir d'événements CDC, permettant la scalabilité, la récupération de données efficace et des capacités de filtrage et de recherche améliorées. Le pipeline de source, discuté dans le prochain article de blog, joue un rôle crucial dans la concurrence et la versioning. En exploitant des structures de données en forme de DAG, Riverbed optimise les jointures de données en flux, réduisant l'utilisation de la mémoire et améliorant l'efficacité.

Créer des cartes postales pour une échelle d'« Airbnb »

L'équipe média d'Airbnb a développé un système de génération de cartes postales pour les réservations de voyages de groupe, en utilisant un algorithme de correspondance de destination innovant. Le système nécessitait une mise en page de texte localisée, une flexibilité de conception et des performances élevées. Pour répondre à la mise en page de texte localisée, un compromis a été trouvé pour formater manuellement les traductions pour les principales destinations de réservation. Un modèle de données de modèle flexible a permis une configuration facile de la position du texte et de la couleur. Pour améliorer les performances, un flux de création de cartes postales asynchrone a été mis en œuvre, minimisant la latence et utilisant l'infrastructure de diffusion de médias existante. Un algorithme de correspondance a été développé pour faire correspondre les cartes postales aux destinations en fonction de l'artwork spécifique à la liste, des destinations populaires, des étiquettes de taxonomie et d'une valeur par défaut de secours. La pré-génération de cartes postales pour les principales destinations a minimisé l'utilisation de cartes postales génériques. La solution met en évidence la nécessité d'outils internes, de capacités de traitement d'images et de texte et de logique de correspondance de destination. Les cartes postales ont été bien accueillies et montrent le pouvoir des capacités médias pour améliorer l'expérience de voyage de groupe d'Airbnb.

Classification des données à caractère personnel

Le système de classification des données d'Airbnb identifie et protège les données personnelles, garantissant la confiance et la conformité. Le système repose sur trois piliers : la catalogation pour localiser les données, la détection pour identifier les données personnelles et la réconciliation pour vérifier les classifications. La détection automatisée utilise les métadonnées, le contenu et l'apprentissage automatique pour classer les données personnelles. L'entrée humaine confirme les classifications pour minimiser les faux positifs et faciliter la résolution. Les métriques de qualité évaluent la rappel, la précision et la vitesse pour garantir l'efficacité. Les défis incluent la classification post-traitement, les classifications incohérentes et les coûts de processus. Airbnb préconise de "déplacer vers la gauche" en intégrant la classification des données dans les schémas de données à la création pour relever ces défis. Cette approche permet aux propriétaires de données de gérer et d'annoter leurs données, en exploitant les informations de lignée pour l'annotation automatisée et en réduisant l'effort manuel. Le système de classification des données d'Airbnb fournit un cadre complet pour les organisations confrontées à des défis similaires, en promouvant la protection et la conformité des données.

Apache Flink® sur Kubernetes

L'architecture de traitement de flux de données d'Airbnb a évolué de Hadoop Yarn à Kubernetes, avec Flink remplaçant Spark Streaming en tant que plateforme principale. La transition a impliqué l'élimination d'Airflow en tant que planificateur de tâches et l'introduction d'un planificateur de tâches de streaming léger. Le passage à Kubernetes a offert une expérience développeur améliorée, une surveillance renforcée et une découverte de services rationalisée. L'architecture actuelle comporte cinq composants principaux : les configurations de tâches, la gestion d'images, CI/CD, le portail Flink et le runtime des tâches Flink. Les avantages de l'architecture basée sur Kubernetes incluent une vitesse de développement plus rapide, une disponibilité et une latence des tâches améliorées, ainsi que des économies de coûts. Les travaux futurs se concentrent sur l'amélioration de la disponibilité des tâches, la mise en place de l'auto-échelonnement des tâches et l'exploration de l'opérateur Flink Kubernetes.

Comment Airbnb améliore en douceur React

La mise à jour frontend d'Airbnb vers React 18 a été effectuée en utilisant le système de mise à jour React, qui permet des mises à jour incrémentales et testables sans nécessiter une branche de fonctionnalité de longue durée. L'aliasing de module et la ciblage d'environnement ont divisé les versions de React en artefacts de construction et en environnements d'exécution distincts. Les disparités TypeScript ont été gérées en utilisant des shims, des augmentations de type et des corrections d'erreur TypeScript progressives. Des tests exhaustifs ont été menés, y compris des régressions visuelles, des tests d'intégration et des tests unitaires, ces derniers étant exécutés sous React 16 et 18. La mise en place progressive a contrôlé le trafic vers les environnements React 16 et 18, permettant des tests internes et des mises à jour de surface progressives. Le système a également permis de tester les versions canary de React 19 sans pointer vers React 18. Des améliorations de performance ont été observées après l'adoption des fonctionnalités React 18 telles que les nouvelles API racine et le rendu concurrent. Le système encourage les efforts de mise à jour continue, évitant les changements importants et ponctuels. L'accent mis par l'équipe React sur la compatibilité ascendante a facilité cette approche de mise à jour. Le frontend d'Airbnb fonctionne maintenant avec React 19 beta, offrant un avantage pour les futures mises à jour React.

Repenser le redimensionnement du texte sur le web

Les efforts d'Airbnb pour améliorer l'accessibilité web se sont concentrés sur la garantie que le texte restait lisible même lorsque agrandi de 200% (Agrandir le texte). Le zoom du navigateur, efficace sur ordinateur de bureau, s'est avéré plus difficile sur les appareils mobiles en raison de la taille limitée de la zone de visualisation. Airbnb a donc choisi la mise à l'échelle des polices, qui ajuste la taille du texte indépendamment du zoom global de la page. Pour soutenir la mise à l'échelle des polices, Airbnb a adopté les unités rem, qui s'ajustent proportionnellement à la taille de la police en fonction de l'élément racine. Cette approche a permis une mise à l'échelle du texte cohérente sans affecter les autres éléments de mise en page. Pour faciliter la transition vers les unités rem, Airbnb a automatisé le processus de conversion et a fourni des outils aux designers pour simuler la mise à l'échelle des polices pendant la phase de conception. Gérer la conversion sur deux systèmes CSS-in-JS, React-with-Styles et Linaria, a présenté des défis supplémentaires. Airbnb a exploité le support des propriétés personnalisées de Linaria et les plugins post-CSS pour convertir la plupart des propriétés liées aux polices. Un mécanisme d'échappement a été mis en place pour permettre aux développeurs d'utiliser des unités px lorsque cela était nécessaire. La mise en œuvre de ces améliorations d'accessibilité a significativement réduit le nombre de problèmes signalés pour Agrandir le texte et a amélioré l'expérience utilisateur pour les personnes ayant des déficiences visuelles. En mettant l'accent sur les besoins des utilisateurs et en adoptant les meilleures pratiques, Airbnb a démontré son engagement en faveur d'un design web inclusif.

Animations : Donner vie au passeport d'accueil sur iOS

En 2023, Airbnb a introduit le Passeport de l'Hôte pour améliorer les connexions entre les hôtes et les invités grâce à des profils personnalisés. Le passeport apparaît dans les résultats de recherche, permettant aux invités d'apprendre sur l'hôte et son espace de vie avant de réserver. Pour créer l'animation, Airbnb a utilisé UIKit et leur framework de transition déclarative. Le passeport tourne et se déplie comme un livre, utilisant des vues transparentes pour produire l'effet de page tournée. L'intégration avec le framework d'animation permet une transition fluide des résultats de recherche à la vue modale. L'animation est composée de mouvements, rotations et ombres synchronisés, chacun avec sa propre courbe de timing. Airbnb a utilisé des timings de ressort pour une élasticité réaliste, mais les a soigneusement ajustés pour s'aligner avec le timing de la transition modale. Le résultat est une animation fluide et visuellement attrayante qui présente les hôtes aux invités, améliorant l'expérience Airbnb.

Airbnb Brandometer : Mesurer la perception de la marque sur les données des médias sociaux avec l'IA

Brandomètre, la technique de compréhension du langage naturel d'Airbnb, quantifie la perception de la marque à partir de données de médias sociaux. Il mesure la perception de la marque en calculant la proximité des mots avec "Airbnb" en utilisant des embeddings de mots et une similarité cosinus. Les données sont nettoyées et traitées pour atténuer l'impact du bruit et de la rareté. Différents modèles d'embeddings de mots sont explorés, avec DeBERTa qui obtient les meilleurs résultats avec de petits ensembles de données. Pour stabiliser les scores, des techniques de moyenne et de classement sont employées. Les scores calibrés sont évalués en utilisant des métriques telles que la variance moyenne sur différentes périodes (AVADP). Brandomètre s'est avéré utile pour l'analyse sectorielle, l'identification des perceptions émergentes et le suivi de l'impact des campagnes. Les améliorations futures incluent une segmentation de contenu améliorée et une fondation de données renforcée. En capturant les perceptions de la marque à partir des médias sociaux, Brandomètre fournit des informations précieuses pour améliorer les expériences client.

Présentation de Trio | Partie III

Trio, l'architecture d'écran Jetpack Compose d'Airbnb, utilise Mavericks pour la gestion d'état. Les props dans Trio facilitent la communication simplifiée et sécurisée par type entre les ViewModels. Les props sont des classes de données contenant des propriétés Kotlin passées à un Trio par son parent, permettant un échange de données dynamique tout au long de la vie du Trio. Les Trios parents définissent les props pour les Trios enfants, garantissant la compatibilité et la correction à la compilation. Les props peuvent inclure des expressions Lambda, permettant aux écrans enfants de communiquer à nouveau avec leurs parents. Pour passer les props, le Trio parent utilise la fonction launchChildInitializer, gérant le cycle de vie du Trio enfant et s'assurant que les props sont rétablies après la recreation du processus. Les ViewModels enfants mettent à jour leur état en fonction des changements de props via la fonction updateStateFromPropsChange. Les valeurs de props non étatiques sont accessibles via la propriété props. La fonctionnalité ScreenFlow de Trio automatise la gestion des piles d'écrans, partageant l'état et les fonctions de navigation entre les écrans enfants via les props. L'équipe Android d'Airbnb a réussi à mettre en œuvre Trio, aboutissant à des cycles de développement plus rapides et une qualité de code améliorée.

Chronon, la plateforme de fonctionnalités ML d'Airbnb, est désormais en open source

Chronon, une plateforme de fonctionnalités d'apprentissage automatique (ML) open-source, permet aux praticiens de l'apprentissage automatique d'utiliser diverses sources de données pour les transformations de fonctionnalités. Elle simplifie les complexités d'ingénierie de données, offre une mise en service à faible latence et fournit des outils d'observabilité et de gestion. Chronon permet aux praticiens de l'apprentissage automatique de définir des fonctionnalités une seule fois, en soutenant à la fois la formation hors ligne et l'inférence en ligne. Elle comprend des composants tels que GroupBy, Join et API de récupération pour agréger, combiner et récupérer des fonctionnalités avec une grande précision. Le processus de backfill de Chronon assure une précision ponctuelle dans le temps et gère efficacement les distorsions de données. Elle fournit également une mise en service de fonctionnalités à faible latence via une API de récupération et surveille la cohérence en ligne-hors ligne. La vision de Chronon est d'améliorer l'efficacité de l'ingénierie de fonctionnalités, de réduire les coûts de calcul et de rendre l'authoring de fonctionnalités plus accessible. Son feuille de route vise à réduire les coûts d'itération et de calcul, à simplifier la création de fonctionnalités et à explorer le traitement du langage naturel pour l'expression de fonctionnalités.

Présentation de Trio | Partie II

La deuxième partie de la série traite de Trio, l'architecture basée sur Compose d'Airbnb pour Android. Trio simplifie la navigation en stockant les Trios dans l'état du ViewModel, permettant un contrôle de navigation facile. Le ViewModel peut mettre à jour les données et la navigation en un seul endroit, rendant possibles les changements de navigation asynchrones. La pile de navigation est modélisée par une chaîne de ViewModels et de leurs états, créant une hiérarchie d'interface utilisateur Compose correspondante. Les Trios peuvent représenter divers éléments d'interface utilisateur, notamment des écrans et des sections imbriqués. La structure de modularisation implique des modules de fonctionnalités contenant des écrans Trio et des modules de navigation définissant des routeurs. Les routeurs garantissent la sécurité de type et réduisent les dépendances circulaires. La classe Router aide à instancier les Trios et à créer des intentions pour démarrer de nouvelles activités. Lors du démarrage de Trios dans de nouvelles activités, l'instance Trio est extraite de l'intention et affichée dans le contenu de l'activité. Le système de navigation Trio prend en charge le démarrage d'activités pour obtenir des résultats en utilisant des types de résultats sur le routeur.

Présentation de Trio | Partie I

Triade : Un framework d'architecture Android basé sur Compose Triade est un framework conçu à partir de la bibliothèque de gestion d'état Mavericks, destiné à résoudre les défis liés à l'architecture basée sur des fragments dans les applications Jetpack Compose. Triade introduit le concept de "Triades", qui sont des blocs auto-contenus composés d'un ViewModel, d'un État et d'une UI. Les Triades peuvent être imbriquées pour former des hiérarchies de navigation. Triade impose une navigation et une communication typées entre les Triades, à la fois à l'intérieur et entre les limites des modules. Chaque Triade a son propre ViewModel, qui gère les changements d'état via des réducteurs Mavericks. L'UI reçoit la dernière valeur d'état du ViewModel et se met à jour en conséquence. Les événements sont renvoyés au ViewModel pour de nouvelles mises à jour d'état, maintenant un flux de données unidirectionnel. Les Triades peuvent être testées individuellement en les instanciant avec des arguments, des États et des Props simulés, offrant des environnements de test contrôlés. Les arguments fournissent des données d'entrée statiques, tandis que les Props fournissent des données d'entrée dynamiques. La réflexion et l'injection assistée sont utilisées pour automatiser la création des classes UI et ViewModel, réduisant le code boilerplate. Triade standardise la création et la gestion des limites et de l'état dans Compose UI, offrant une sécurité de type et une testabilité améliorée.