En résultat, nous avons un ordinateur très puissant qui doit avoir un système d'exploitation installé dessus, ce qui nous permettrait d'utiliser toutes nos ressources matérielles. En général, le type de système d'exploitation n'est pas si important ici car essentiellement, il agira comme une couche entre nos ressources matérielles et le logiciel spécial qui permettrait le fonctionnement des machines virtuelles. Cependant, personnellement, je choisirais d'installer Linux :)
Appelons ce logiciel - un système de virtualisation. Il existe plusieurs de ces systèmes, mais à mon avis, les plus connus sont VMWare, Hyper-V et KVM. Si vous êtes intéressé, vous pouvez
en apprendre davantage sur eux (il y a un grand monde de technologies extrêmement intéressantes sur le fonctionnement de la virtualisation avec les ressources matérielles), mais je vais me concentrer sur le fait que ces systèmes peuvent faire la chose la plus importante pour nous - créer des machines virtuelles, en utilisant les ressources matérielles du serveur sur lequel ils fonctionnent. Et pas seulement les créer, mais le faire de manière à ce que les machines virtuelles ne se connaissent pas et ne puissent pas "intruder" dans les ressources de chacune, même si elles seront effectivement exécutées sur les mêmes CPU et partagent la même RAM. C'est le principal "pilier" sur lequel reposent tous les clouds. En réalité, bien sûr, tout est plus compliqué, et il y aura beaucoup plus de choses en cours d'exécution dans le système d'exploitation du serveur, mais nous nous concentrerons sur les aspects les plus importants.
Dans Azure, avec son échelle, une combinaison de systèmes de virtualisation est très probablement utilisée. Il serait étrange que Microsoft elle-même n'utilise pas Hyper-V, mais il serait également étrange d'ignorer les avantages de KVM :)
Donc, les systèmes de virtualisation sont capables de créer, modifier et détruire des machines virtuelles. Mais qui et comment leur diront quand et quelle machine virtuelle créer et sur quel serveur ? C'est là que les principaux composants du cloud entrent en jeu : les orchestrators de calcul, de réseau et de stockage. Pourquoi spécifiquement ceux-ci ? Parce qu'ils sont les trois composants les plus importants de la couche IaaS. (Même les GPU ici ressemblent à une petite option :)
- L'orchestrateur de calcul gère les machines virtuelles sur lesquelles littéralement tout fonctionne dans le cloud.
- L'orchestrateur réseau gère les routeurs qui fournissent une connectivité réseau physique entre les serveurs, les racks, les centres de données, etc. Cet orchestrateur gère également l'équilibrage de charge et les problèmes de routage du trafic.
- L'orchestrateur de stockage gère les matrices de stockage, allouant des ressources pour les machines virtuelles et les services de niveau supérieur (comme le stockage Azure).
Un orchestrateur est déjà quelque chose comme des services "cloud" au sein d'un service "cloud". Il doit avoir un point de terminaison interne, un système d'authentification et une API REST afin qu'il puisse être sollicité pour exécuter une commande particulière. Mais où l'orchestrateur stockera-t-il la configuration actuelle des ressources ? Bien sûr, elle pourrait être stockée dans un blob quelque part dans la matrice de stockage, mais je choisirais une base de données très fiable capable de s'étendre au niveau de l'ensemble du cloud. Supposons qu'il s'agisse d'une installation interne de
Cosmos DB.
Mais maintenant, nous avons une autre question. Où tout cela fonctionne-t-il ? C'est là que le terme "
Dogfooding" entre en jeu. L'idée est qu'à l'intérieur de votre système, vous devriez utiliser des composants du système lui-même. En d'autres termes, si nous permettons à nos utilisateurs de travailler avec des machines virtuelles, pourquoi ne pas utiliser les mêmes machines virtuelles pour nos propres besoins ? Par conséquent, supposons que tous les services internes (orchestrateurs et stockage de métadonnées) fonctionnent sur des machines virtuelles ordinaires créées par le système de virtualisation qu'ils sont conçus pour gérer.
Ainsi, notre schéma est maintenant légèrement compliqué: