Création d'ESPACE : environnements d'exécution sécurisés et efficaces pour les agents de longue durée
ESPACE est la plateforme de bac à sable sécurisée et efficace de Perplexity qui alimente les flux de travail d'agents de longue durée et l'exécution de code isolée et rapide.
À mesure que les flux de travail des agents deviennent plus longs et plus autonomes, les environnements dans lesquels ils opèrent ont autant d'importance que les modèles qui les pilotent. Les agents doivent accomplir de véritables tâches, telles que l'exécution de code, la modification de systèmes de fichiers et la réalisation de tâches en plusieurs étapes sur des heures ou des jours. Les utilisateurs souhaitent que les agents aient accès aux outils et aux fichiers nécessaires pour mener à bien ces tâches, mais ils doivent aussi avoir l'assurance que leurs systèmes resteront sécurisés, même si les agents sont compromis. Un bac à sable rend tout cela possible : un environnement isolé où un agent peut fonctionner librement tandis que l'hôte, les autres locataires et les identifiants sensibles restent protégés.
Les approches traditionnelles de bac à sable basées sur des conteneurs ne sont pas conçues pour ces tâches. Elles supposent généralement des charges de travail éphémères et sans état, et possèdent le noyau comme point de défaillance unique. En revanche, les Session d'agent sont de longue durée et avec état : un agent accumule des heures de contexte, un système de fichiers de travail et des processus en cours d'exécution qui ne peuvent pas simplement être jetés et reconstruits à partir de zéro. De plus, la charge de travail interne ne doit pas être approuvée par défaut, ce qui nécessite des mesures de sécurité renforcées. Les Session d'agent de longue durée ont besoin d'un substrat capable d'isoler un invité hostile, de préserver son état et d'être exploité à grande échelle.
Le principal défi de l'ingénierie des bac à sable provient de la tension qui surgit souvent entre la sécurité, la fonctionnalité et l'efficacité. Par exemple :
Accorder un accès plus large permet à un agent d'accomplir davantage, mais expose une plus grande partie du système à une charge de travail en laquelle vous n'avez pas confiance.
Partager davantage entre les bac à sable accélère la création, mais élargit la surface d'attaque.
Prendre des instantanés plus fréquemment améliore la récupération et permet des fonctionnalités telles que la restauration, mais cela demande du temps et de l'espace de stockage.
Les bac à sable pour agents, tels que ceux requis pour exécuter du code, utiliser des compétences d'agent ou exécuter des pipelines de recherche en tant que code dans les requêtes de Computer, ont besoin des trois. Nous avons travaillé sans relâche au cours des derniers mois pour concevoir la nouvelle génération d'infrastructure d'agents alimentant nos produits. Aujourd'hui, nous présentons ESPACE (Plateforme en bac à sable pour l'exécution de code d'agent) : une plateforme de bac à sable conçue pour les flux de travail d'agents qui est sécurisée, fiable et efficace à grande échelle. Le mois dernier, nous avons commencé à déployer ESPACE en tant que couche de bac à sable alimentant Perplexity Computer. Au cours de la semaine dernière, la plateforme a pris en charge de manière sécurisée des millions de créations de bac à sable et des dizaines de millions de reconnexions, avec des temps de démarrage 3 à 5 fois plus rapides que notre solution précédente.
Cet article présente les décisions architecturales et de conception qui sous-tendent ESPACE. À ce jour, 100 % des Session de Computer fonctionnent désormais sur ESPACE. Nous sommes ravis de déployer cette plateforme sur encore plus de surfaces afin d'offrir un environnement d'exécution d'agents de premier ordre à nos utilisateurs et développeurs.
Architecture
À un niveau élevé, le système est organisé en trois couches.
Le plan de contrôle est le cerveau du système ; il détermine ce qui doit exister et à quel endroit. Il se compose de la passerelle API et de modules de gestion de l'état au niveau du cluster.
Les services locaux au nœud constituent l'infrastructure locale requise pour exécuter le plan du plan de contrôle. Ils gèrent le cycle de vie du bac à sable, le stockage, la mise en réseau et les opérations privilégiées qui leur sont associées.
Le bac à sable est l'environnement d'exécution isolé proprement dit. Il est implémenté sous la forme d'une machine virtuelle associée au démon space : un processus d'arrière-plan s'exécutant au sein de l'invité qui gère l'accès au système de fichiers, aux processus et au réseau pour la charge de travail.

Plan de contrôle
La passerelle API est le point d'entrée. Les requêtes entrantes sont authentifiées et autorisées, puis converties en enregistrements d'état désiré.
Le plan de contrôle est sans état par conception, toutes les informations durables étant déléguées à une base de données partagée. Il effectue le suivi des informations au niveau du cluster concernant les bac à sable, telles que le nœud auquel ils sont assignés, leur lieu d'exécution et leur éventuelle sauvegarde sur un stockage durable. Il compare continuellement l'état désiré à l'état observé et fait converger les deux. Les opérations sont idempotentes, ce qui permet au plan de contrôle de récupérer automatiquement après un plantage, un redémarrage ou une défaillance partielle.
Services locaux au nœud
Les services locaux au nœud accomplissent le travail réel de préparation des modèles, de démarrage des bac à sable, de configuration du réseau et d'exécution des services d'exécution côté hôte. Chaque nœud exécute un petit ensemble de démons qui gèrent chaque bac à sable qui y est placé, et le nœud constitue la source de vérité pour les états en direct de ces bacs à sable.
Le gestionnaire de bac à sable sait quels bacs à sable sont en cours d'exécution, en pause, suspendus ou arrêtés, ainsi que leurs ressources réelles. Il s'exécute sans privilèges et délègue l'ensemble du travail privilégié au gestionnaire de nœud, le processus racine unique qui gère les primitives sous-jacentes. Le stockage est géré localement et de manière durable : des instantanés des états actuels du bac à sable sont enregistrés sur le nœud, et un gestionnaire de volumes déplace les instantanés et les modèles vers et depuis le stockage d'objets selon les besoins pour permettre des opérations inter-nœuds. Des barrières de sécurité contrôlent ce qu'un bac à sable peut atteindre : le gestionnaire d'identifiants régit l'injection d'identifiants sous une autorisation par service, et la passerelle réseau applique la politique de trafic sortant de chaque bac à sable.
Bac à sable
Le bac à sable lui-même est une machine virtuelle (MV) dotée de son propre noyau invité, qui exécute la charge de travail de l'utilisateur derrière une limite d'isolation matérielle. Étant donné que chaque bac à sable possède son propre noyau, une charge de travail compromise ne peut pas se rabattre sur un noyau hôte partagé comme point de défaillance unique ; même si elle réussit à exploiter son noyau invité, cette compromission reste confinée aux limites de la MV du bac à sable plutôt de se propager à d'autres charges de travail.
Un démon space s'exécute à l'intérieur de chaque machine virtuelle, servant d'agent léger qui régule chaque action ou modification effectuée par la plateforme à l'intérieur de l'invité. Il gère l'accès au système de fichiers et la gestion des processus. Il signale également l'état de préparation de l'invité et suit l'activité, afin que la plateforme sache quand un bac à sable est devenu inactif et peut être suspendu ou récupéré. Fait crucial, le démon space ne communique pas directement avec les clients, mais communique plutôt avec l'hôte via un canal privé au sein de la MV. Cela permet de maintenir toutes les interactions avec l'invité sur un chemin contrôlé et de réserver le réseau du bac à sable exclusivement au trafic sortant de la charge de travail.
Trois piliers : Sécurité, fonctionnalité et efficacité
Ensuite, nous plongeons dans les propriétés clés qu'ESPACE doit offrir à travers trois piliers : la sécurité, la fonctionnalité et l'efficacité. Comme indiqué précédemment, ces trois éléments s'opposent. Pourtant, nous ne pouvons faire de compromis sur aucun d'eux si nous souhaitons prendre en charge des agents puissants capables d'exploiter les capacités des modèles actuels. La sécurité empêche une charge de travail non approuvée, potentiellement hostile, de nuire à l'hôte, aux autres locataires ou aux secrets d'un utilisateur. La fonctionnalité offre aux agents le cycle de vie riche dont ils ont besoin. L'efficacité rend tout cela abordable avec des ressources de mémoire, de disque et de calcul finies.
Sécurité : Protection des données et des systèmes
Les plateformes de bac à sable nécessitent une sécurité renforcée pour garantir que du code erroné, voire malveillant, exécuté dans des bac à sable ne puisse pas causer d'effets nocifs ailleurs. Sans l'application d'un contrôle strict du trafic sortant et sans la protection des secrets hors du bac à sable, une seule fausse manœuvre d'un agent pourrait divulguer les clés d'un utilisateur ou exfiltrer des travaux.

ESPACE adopte une approche multicouche pour garantir la sécurité des bac à sable. L'isolation du bac à sable comprend deux composantes : l'isolation de la MV et l'isolation des processus du système d'exploitation de l'hôte. Les deux doivent être compromises pour permettre un accès entre les bacs à sable. La communication avec le bac à sable est strictement contrôlée ; les processus ne peuvent communiquer que par l'intermédiaire de canaux dédiés. La passerelle réseau force tout le trafic sortant à passer par elle. Le démon space est le seul canal autorisé entre le bac à sable (non approuvé) et la plateforme (approuvée).
Les identifiants ne résident jamais là où un agent peut les voler. Le stockage des identifiants se trouve en dehors des limites du bac à sable et est responsable du cycle de vie des identifiants. Il stocke et récupère les secrets via un backend de coffre-fort interchangeable, résout les identifiants à l'aide d'une portée hiérarchique, gère les métadonnées telles que la méthode d'injection et l'expiration, et applique des limites de taux ainsi que la journalisation des audits sur tous les accès. Si nécessaire, les identifiants sont injectés au niveau de la couche réseau ou saisis automatiquement par un agent de navigateur, au lieu d'entrer directement dans le bac à sable.
Les données sont protégées au repos. ESPACE prend en charge BYOK (Bring Your Own Key) pour protéger les données stockées en externe. Les clés de chiffrement proviennent du service de gestion des clés du client et n'entrent jamais dans le bac à sable. Si l'entreprise révoque la clé, ses données deviennent illisibles.
Fonctionnalité : Alimenter les flux de travail des agents
Pour prendre en charge les flux de travail des agents, les bac à sable ont besoin d'une prise en charge riche du cycle de vie. Ils doivent être créés rapidement et à grande échelle, étant donné qu'un agent peut en lancer plusieurs à la fois et ne devrait pas avoir à attendre qu'ils démarrent. Ils doivent persister pour une durée indéfinie, car une session peut durer quelques minutes ou s'exécuter pendant des mois. Ils doivent pouvoir se mettre en pause proprement, parfois pour de longues périodes, par exemple lorsqu'une tâche est bloquée en attendant l'intervention d'un humain. Enfin, ils doivent prendre en charge la bifurcation (forking), la restauration et la récupération après un plantage, de sorte qu'une session puisse se ramifier, annuler une mauvaise étape ou reprendre après une défaillance au lieu de recommencer à zéro.
ESPACE prend en charge tous les éléments ci-dessus. Il modélise le cycle de vie complet du bac à sable sous la forme d'une machine à états explicite, ce qui rend possibles des opérations telles que la création, la pause, la reprise, la suspension et la restauration.

Les instantanés constituent le mécanisme sous-jacent à la plupart de ces fonctionnalités. Un planificateur s'exécute à intervalles réguliers et capture deux types d'instantanés : des instantanés de disque (copies du système de fichiers à un moment précis) et des instantanés complets (points de contrôle de l'ensemble de la MV en pause). Les instantanés de disque sont capturés fréquemment, tandis que les points de contrôle complets le sont moins souvent. Tout reste sur le nœud et la rétention diminue par niveau. Ces instantanés peuvent être utilisés pour la récupération au cours de la session ; par exemple, les instantanés de disque peuvent servir à restaurer le système de fichiers pour annuler une commande destructive, et les points de contrôle complets permettent à un bac à sable planté de reprendre son activité à un point d'exécution récent plutôt qu'à partir d'un disque froid.
Lorsqu'un bac à sable est suspendu, la MV est mise en pause, un instantané complet est pris et les artefacts de cet instantané complet sont téléversés vers le stockage d'objets. Une ligne de base de données fait le suivi de l'instantané et celui-ci ne devient restaurable qu'une fois que chaque artefact a été enregistré, de sorte qu'un instantané partiellement téléversé ne peut jamais être repris dans un état corrompu. La restauration est l'inverse de la suspension. Étant donné que l'instantané réside dans le stockage d'objets plutôt que sur le nœud d'origine, n'importe quel nœud peut réactiver le bac à sable. Le planificateur choisit un nœud, ce nœud télécharge les artefacts, réapplique le delta du système de fichiers par-dessus le modèle et reprend la MV à partir de son état capturé.
Efficacité : Optimisation du temps et de l'espace
Il ne suffit pas d'implémenter les fonctionnalités ci-dessus de manière isolée ; elles doivent également être réalisables sous de strictes contraintes de ressources. La mémoire et le disque d'un nœud sont finis, et les utilisateurs souhaitent que les agents fonctionnent le plus rapidement possible ; par conséquent, les opérations liées au cycle de vie doivent être peu coûteuses en temps et en espace. Nous ne pouvons pas nous permettre de copier une image machine complète à chaque création, pause ou ramification d'un bac à sable.
Un choix de conception clé rend cela possible : le système de fichiers. ESPACE utilise btrfs comme système de fichiers sur le nœud pour le stockage des bacs à sable. Btrfs (système de fichiers B-tree) combine un système de fichiers de type « copy-on-write » (copie sur écriture) avec une gestion intégrée des volumes logiques. Cela présente plusieurs avantages :
Les copies par reflink sont rapides, puisque vous partagez les extents sous-jacents, de sorte que seules les métadonnées doivent être copiées.
Les instantanés sont atomiques et rapides, puisqu'il suffit de créer une nouvelle racine.
Un stockage minimal est requis, puisque vous ne stockez que ce qui a changé.
Par conséquent, les bacs à sable peuvent être créés et restaurés rapidement. Au lieu de créer un bac à sable à partir de zéro à chaque fois, nous conservons un pool chaud de conteneurs (pods) qui ont déjà des modèles communs matérialisés sur le disque, et nous répondons à une requête en l'associant à un conteneur dont le modèle correspond déjà. Donner à ce bac à sable son propre système de fichiers racine inscriptible relève alors d'un clonage par copie sur écriture plutôt que d'une copie complète. Lorsqu'aucun conteneur chaud ne convient, nous matérialisons le modèle à la demande ; nous regroupons les requêtes simultanées pour la même image en un seul téléchargement, de sorte qu'une rafale de requêtes identiques ne se transforme pas en une rafale de travaux identiques.
Le résultat est un environnement d'exécution de bac à sable à la fois puissant, léger et extrêmement rapide. Lorsque nous avons déployé ESPACE, nous l'avons fait fonctionner aux côtés de notre fournisseur de bac à sable précédent sur le même trafic de production. Tout au long de la semaine de lancement, ESPACE a créé des bacs à sable trois à cinq fois plus rapidement sur l'ensemble de la distribution. Plus précisément, la latence médiane de création est passée de 185 millisecondes à 60 millisecondes (amélioration de 3,1x), et la latence au 90e percentile est passée de 447 millisecondes à 89 millisecondes (amélioration de 5,0x). Nous avons observé des améliorations d'ordre de grandeur similaires sur d'autres indicateurs de performance et d'utilisation des ressources.

Cela facilite également la prise d'instantanés de disque continus, car ils sont rapides, efficaces en matière d'espace et ne nécessitent pas la mise en pause du bac à sable. De plus, un stockage delta efficace réduit l'espace nécessaire pour stocker ces instantanés.
Conclusion
Lors de la conception de systèmes complexes, il est tentant de choisir un objectif unique à optimiser de manière isolée. Mais les développeurs d'agents de pointe exigent la sécurité, la fonctionnalité et l'efficacité à parts égales. Avec ESPACE, nous avons entrepris de réaliser une amélioration de Pareto sur l'ensemble de ces trois piliers.
Chaque choix de conception individuel peut servir plusieurs objectifs à la fois, rendant cet équilibre délicat possible. Les MV par bac à sable confèrent à chaque charge de travail son propre noyau, renforçant la sécurité grâce à une isolation rigoureuse tout en fournissant également la limite de point de contrôle propre sur laquelle reposent les instantanés. Btrfs permet l'implémentation efficace de la prise d'instantanés, de la bifurcation et d'autres opérations essentielles aux environnements d'exécution d'agents. Le démon space maintient toutes les interactions avec l'invité sur un chemin contrôlé du côté de l'hôte, scellant la limite entre l'invité et l'hôte tout en préservant la liberté de manœuvre des agents. La passerelle réseau centrale sert de médiateur pour le trafic sortant et l'injection d'identifiants sans jamais exposer de secrets à l'invité.
Le résultat de ces décisions de conception et d'autres est une plateforme qui permet l'orchestration d'agents du monde réel à grande échelle. ESPACE fournit le substrat sur lequel des agents dotés d'un état et de longue durée peuvent aborder en toute sécurité des travaux d'une complexité ou d'une durée arbitraires, sans sacrifier ni les performances ni la sécurité.
Aujourd'hui, ESPACE alimente déjà des millions de Session de Perplexity Computer. Nous avons l'intention qu'ESPACE serve de couche unifiée pour le provisionnement et le contrôle des bacs à sable dans n'importe quel contexte : des micro-MV Linux aux invités Windows, en passant par la propre machine locale de l'utilisateur. Nous travaillons d'arrache-pied pour intégrer ESPACE dans ces nouveaux contextes, afin que les développeurs puissent livrer des produits d'IA qui fonctionnent partout où les utilisateurs travaillent.
Si vous brûlez d'envie de façonner la couche de calcul qui pilote les agents de pointe de demain, nous vous invitons à rejoindre notre équipe.