
avec une réduction de 85 % du nombre de lignes de code
Apple a annoncé avoir migré avec son service de surveillance des mots de passe de Java à Swift. L'équipe responsable a ajouté que cette migration a permis une augmentation de débit de 40 % et une réduction de 50 % de l'utilisation de la capacité de Kubernetes. La réécriture a permis de résoudre les problèmes de latence du ramasse-miettes de Java et de consommation élevée de la mémoire, Swift offrant des temps de réponse inférieurs à la milliseconde et des capacités de démarrage à froid plus rapides. Elle aurait également permis de réduire de 85 % le nombre de lignes de code tout en gérant des milliards de requêtes quotidiennes pour la détection des brèches.
Le service de surveillance des mots de passe d'Apple est intégré dans l'écosystème plus large de l'application « Mot de passe ». Il vérifie en toute sécurité si les informations d'identification sauvegardées d'un utilisateur sont apparues dans des violations de données connues, sans révéler des informations privées à Apple. Il traite des milliards de demandes par jour, en effectuant des comparaisons cryptographiques à l'aide de protocoles préservant la vie privée.
Les problèmes techniques liés à l'ancienne version du service
Initialement écrit en Java, le service présentait des limites de performance et de gestion de la mémoire. Selon l'équipe d'Apple, en dépit des optimisations avancées de la machine virtuelle Java (JVM), l'outil ne répondait pas de manière optimale aux exigences croissantes de mise à l'échelle et de rapidité. Selon l'équipe d'Apple, la collecte de déchets provoquait des temps de pause imprévisibles en cas de charge, ce qui dégradait la cohérence de la latence.
Les frais généraux de démarrage (initialisation de la JVM, chargement des classes et compilation juste à temps (JIT)) ralentissaient la capacité du système à évoluer en temps réel. En outre, l'empreinte mémoire du service, qui atteint souvent des dizaines de gigaoctets par instance, réduit l'efficacité de l'infrastructure et augmente les coûts d'exploitation. Selon l'équipe d'Apple, la réécriture du service avait pour but de parvenir aux résultats suivants :
- optimiser les performances et l'évolutivité du service ;
- réduire le délai de démarrage des instances ;
- contourner les limites posées par la gestion de la mémoire en Java (notamment le ramasse-miettes) ;
- profiter de la syntaxe expressive et de la sécurité offerte par le langage Swift.
« Pendant des années, nous avons utilisé Java pour alimenter des services critiques à grande échelle en raison de sa stabilité et de ses performances éprouvées. Mais l'approche de gestion de la mémoire de Java ne correspond plus à nos exigences croissantes et à nos objectifs d'efficacité », a écrit l'équipe.
Les raisons qui ont motivé le choix de Swift pour la réécriture
Développé à l'origine comme un langage côté client pour les plateformes Apple, Swift s'est depuis étendu à des cas d'utilisation côté serveur. L'équipe d'ingénieurs d'Apple a choisi Swift non seulement pour son alignement sur l'écosystème, mais aussi pour sa capacité à offrir des performances constantes dans les environnements à forte intensité de calcul. La réécriture s'est également appuyée sur Vapor, un framework Web Swift très répandu.
D'autres paquets personnalisés ont été mis en œuvre pour gérer les opérations sur la courbe elliptique, l'audit cryptographique et les intergiciels spécifiques au domaine de la surveillance des mots de passe. « Au lieu de simplement augmenter les ressources matérielles, nous recherchions un langage plus efficace pour soutenir notre croissance tout en réduisant la charge des serveurs », a expliqué l'équipe d'Apple dans un récent billet de blogue.

Gains techniques et opérationnels obtenus après la réécriture
Selon l'équipe, la migration vers Swift s’est révélée très bénéfique. Les instances Swift consommaient des centaines de mégaoctets, contre des dizaines de gigaoctets avec Java. Les temps de démarrage se sont également améliorés. Sans surcharge d'initialisation de la JVM ni échauffement JIT, les services Swift peuvent démarrer à froid plus rapidement, ce qui répond aux exigences d'Apple en matière de mise à l’échelle automatique globale.
Concrètement, le débit du service a augmenté de 40 %, la consommation mémoire a diminué de près de moitié, et la capacité de traitement par instance a été nettement améliorée. En parallèle, le code source est devenu beaucoup plus concis, avec environ 85 % de lignes de code en moins comparé à l'implémentation Java, ce qui facilite la maintenance et la lecture. Ce qui fait écho aux critiques de longue date selon lesquelles Java est un langage verbeux.
Cette migration marque un tournant. Swift démontre qu'il est capable de soutenir des services cloud à très grande échelle, bien au-delà de son usage traditionnel côté client. Cela illustre aussi la volonté d'Apple de rationaliser ses technologies internes autour de langages plus modernes et mieux adaptés à ses besoins spécifiques. Selon l'équipe, la sécurité est un autre domaine dans lequel Swift adopte une approche distinctive par rapport à Java.
« Lorsque vous réécrivez un produit dans une nouvelle pile, vous le créez pratiquement à partir de zéro. Vous faites les choses correctement et vous n'apportez pas tout le patchwork et la dette technique. C'est ce qui a provoqué cette accélération. Ce n'est pas le changement de langue », a écrit un critique.
Conclusion
La migration d'Apple reflète une tendance plus large : le passage à des langages orientés vers la performance pour des services fonctionnant à une très grande échelle. Meta utilise Rust depuis longtemps, depuis des systèmes de gestion de code source ultraperformants jusqu'aux langages de programmation pour la blockchain. Netflix a introduit Rend, un proxy haute performance écrit en Go, pour prendre le relais d'un client basé sur Java interagissant avec Memcached.
AWS s'appuie de plus en plus sur Rust dans les services où les performances déterministes et la faible utilisation des ressources améliorent l'efficacité de l'infrastructure. Bien que cela ne signifie pas que Java et les langages similaires sont en déclin, il est de plus en plus évident qu'à l'extrémité supérieure des exigences de performance, les entreprises et les ingénieurs logiciels constatent que les runtimes à usage général ne suffisent plus désormais.
L'année dernière, le navigateur Ladybird a annoncé qu'il commencera à utiliser le langage Swift au lieu de C++. Selon le développeur Andreas Kling, Swift offre une sécurité contre la course à la mémoire et aux données, et est un langage moderne avec une ergonomie solide. Il possède une meilleure interopérabilité avec le C++ pour une adoption progressive. L'équipe a déclaré qu'elle adoptera Swift après la sortie de Swift 6 de sa phase bêta.
Source : billet de blogue de l'équipe d'Apple
Et vous ?



Voir aussi



Vous avez lu gratuitement 43 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.