Introduction

OpenComputer a démarré avec une seule machine virtuelle dans une région Azure. L'entreprise a grandi rapidement, mais Azure n'a pas pu augmenter notre quota de calcul dans cette région, nous nous sommes retrouvés à grandir contre une piscine fixe de CPU. Nous avons donc dû trouver un autre moyen de mettre à l'échelle.

Contexte Technique

Les fournisseurs de cloud rationnent le matériel par région, ce qui signifie que chaque région a une capacité physique finie et une longue file d'attente de clients qui veulent l'utiliser. Les fournisseurs attribuent de la capacité sous forme de quota, mesuré en nombre total de CPU. Les quotas commencent petit et ne grandissent que lorsque vous avez construit un historique d'utilisation.

Nous avons atteint le plafond de 300 CPU tôt, notre première région était Azure US East 2, avec un quota de départ d'environ 300 CPU. Le plan était de consommer cela et de demander plus, mais malheureusement, nous avions choisi l'un des centres de données les plus occupés au monde, et 300 CPU était le plafond là, quel que soit notre historique d'utilisation.

Analyse et Implications

La migration vers une autre région ou un fournisseur de cloud différent n'aurait pas résolu le problème d'échelle. Chaque région a une limite supérieure, les fournisseurs l'augmentent progressivement, mais une architecture à région unique qui met à l'échelle rapidement atteindra le plafond à un moment donné.

Nous avons donc dû repenser l'architecture pour que l'ajout d'une région ou d'un fournisseur de cloud soit une étape de déploiement plutôt qu'un projet de migration. Nous avons divisé le système en cellules, chaque cellule étant une unité de déploiement qui peut être déployée dans n'importe quelle région de cloud.

Perspective

Nous avons mis en place un registre global à la périphérie qui décide où chaque sandbox vit, et nous utilisons quatre fournisseurs de cloud pour ajouter jusqu'à un million de CPU. Nous avons également mis en place un système de routage qui permet de router chaque sandbox vers la cellule la plus vide.

Cela nous permet de mettre à l'échelle notre capacité de manière infinie et de répondre aux besoins de nos utilisateurs de manière efficace. Nous continuons à surveiller nos performances et à améliorer notre architecture pour répondre aux besoins croissants de nos utilisateurs.