Je travaille au quotidien sur des infrastructures sur le cloud d'Amazon (AWS pour les intimes), et je réfléchis à la manière la plus adaptée de mettre en place de nouvelles solutions techniques sur cette plateforme.

Amazon, et le cloud de manière générale, a apporté une liberté impressionnante :

  • Déployer sur des infrastructures taillées sur mesure
  • Apporter de l'élasticité dans les infrastructures
  • Pouvoir profiter de machines à la demande

Néanmoins, ces nouvelles approches de l'infrastructure ont aussi apporté leur lot de points négatifs.

En effet, auparavant, pour déployer une application en datacenter, il fallait préparer et dimensionner correctement son hébergement avant même de commencer le moindre déploiement, lié à un achat de matériel adapté, ou tout du moins à une réservation de ressource qui devait être amortie sur plusieurs années.

Le cloud computing a apporté un nouveau paradigme, en effet, si je veux une machine, je clique sur un bouton et en quelques minutes, une machine est déjà prête à fonctionner. C'est cet aspect qui a énormément contribué au succès de l'adoption du cloud : déployer rapidement, et facilement.

Déploiement type Load Balancer / Backend / Base de données sur Datacenter et AWS

On voit pourtant qu'on reproduit des schéma similaire que l'on soit sur un Datacenter ou sur AWS. On retrouve à chaque fois les même couches applicatives avec les mêmes fonctionnalité, le modèle Load balancer / Backend / Base de données est par exemple très similaire.

Je pense que cette facilité nous a rendu paresseux.

Je me vois encore il y a quelques jours à débattre sur le dimensionnement d'une machine qu'une application demandait, 64Gb de RAM et 8 vCPU, pour une application mettant à disposition une interface pour quelques utilisateurs, qui somme toute ne fait pas grand chose. Lorsque j'ai évoqué le fait que je trouvais que les prérequis de l'application étaient surdimensionnés au vu de ce qui était attendu, la réponse que j'ai eu de fait était de la forme "on est sur le cloud, on peut avoir ces ressources, pourquoi s'en priver?".

Effectivement, on peut facilement avoir accès à une machine qui correspond à ce dimensionnement (qui a d'ailleurs été la machine que j'ai indiqué dans l'architecture).

Néanmoins, on peut se poser la question du moment où l'on est arrivé à se dire qu'optimiser son code était optionnel, sous pretexte que le cloud peut nous fournir les ressources dont nous avons besoin.

Je pense que le fait de ne pas voir le prix de la machine directement contribue à cet aspect, puisque l'impact paraît nul, il ne s'agit dans le fond que d'une information.

Et si on se mettait à penser autrement le cloud, et se dire que finalement, ce ne sont que des serveurs, hébergés ailleurs, que l'on paie tout autant que ceux en datacenter, mais avec un coût moins mis en avant, est-ce qu'on tolérerait aussi facilement ce laxisme sur la création de nouvelles applications ?

Pourtant des solutions existent.

Le modèle serverless nous le prouve, des applications complexes et à forte sollicitations peuvent être vues autrement.

La logique actuelle n'est plus de voir l'application comme un tout indivisible, mais de plutôt la diviser en plusieurs composants unitaires. C'est ce qu'on appelle plus couramment le modèle micro-service, l'idée est de se dire qu'un service n'a qu'un rôle, qui fait partie d'un tout, qui est l'application elle même.

Ce modèle permet de découpler l'application en plus de permettre :

  • De créer des points d'entrées standards, ce qui permet de simplifier les interfaces avec d'autres applicatifs.
  • De parralléliser certaines actions qui n'ont pas de dépendances directe, et donc améliorer les performances globales
  • De passer sur un modèle en micro container, ou des services managés comme AWS Lambda assez facilement, et de migrer facilement sur un modèle serverless

Ces changements nécessitent toujours du travail, et donc de l'investissement, mais sur la durée, la rentabilité peut être assez importante.

Et si nous nous disions que le cloud est juste un datacenter comme un autre, et que nous nous mettions à choisir plus judicieusement la manière de mettre en place nos applications ?