En remplaçant Java par Swift, Apple a gagné 40 % de performances avec deux fois moins de serveurs
Avec Swift, Apple ambitionne de proposer un langage de développement qui peut servir à tous les usages, y compris dans le monde des serveurs. C’est une réalité depuis bien longtemps, mais Apple elle-même n’utilise pas toujours son langage pour ses propres besoins. L’entreprise a toutefois fait ce choix pour un de ses services web, en l’occurrence la vérification des mots de passe intégrée à l’app du même nom. Ce service, qui vérifie si l’un de vos mots de passe n’est pas dans une base de donnée d’identifiants qui ont fuité, reposait auparavant sur une infrastructure assez traditionnelle dans cet univers, avec des serveurs sous Linux qui font tourner du code en Java.
Une réécriture complète en Swift a été menée par les ingénieurs d’Apple, avec des résultats assez bluffants, décrits sur le blog officiel du langage. En abandonnant Java, la vérification des mots de passe a bénéficié d’une augmentation des performances de 40 %, tout en réduisant les besoins matériels de 50 % ! Pour le dire autrement, le changement a apporté tant de gains en termes de performances qu’Apple a besoin de moitié moins de serveurs, tout en améliorant la rapidité du service de manière significative. Autre chiffre impressionnant, les besoins en mémoire vive ont diminué de 90 % grâce à cette transition.

L’article de blog entre dans les détails techniques qui expliquent pourquoi un tel gain a été obtenu. Pour faire simple, Java est un langage assez lourd, notamment sur la gestion de la mémoire, alors que Swift apporte plusieurs changements significatifs qui simplifient le travail des développeurs et améliorent les performances. Cela se voit dans le code nécessaire pour tourner le vérificateur de mots de passe : après la réécriture, près de 85 % des lignes de code avaient disparu, tandis que ce qui reste est plus facile à lire et surtout à gérer au quotidien.
Les ingénieurs d’Apple expliquent qu’ils ont utilisé Vapor, un framework bien connu pour exploiter Swift dans le monde des serveurs. Cette base a été complétée avec plusieurs paquets créés par des tiers et d’autres développés en interne, notamment pour gérer la confidentialité désirée par Apple (plusieurs mécanismes assurent que l’entreprise ne récupère pas les mots de passe des utilisateurs pour vérifier s’ils existent dans la base de données).
L’ensemble a été déployé sur Kubernetes, un gestionnaire de conteneurs qui permet de déployer rapidement des instances. C’était un des défauts de Java, il ne permettait pas d’ajouter facilement et surtout temporairement de la capacité pour les moments où le service était très sollicité. Avec le passage à Swift, Apple peut davantage optimiser ses besoins, en déployant des conteneurs supplémentaires pour répondre à la demande et en les supprimant quand ils ne sont plus nécessaires.