2.1 Produits modernes
Personne n'appelle plus les produits modernes des programmes. Un produit moderne peut inclure des dizaines de programmes, des centaines de services internet et de nombreux API, fournis par un centre de données en nuage (également appelés centres de traitement de données), où il est déployé.
Beaucoup de produits modernes (sinon tous) fonctionnent selon la paradigme Client-Serveur. C'est quand il y a un programme sur votre appareil (téléphone, ordinateur portable, ordinateur) qui s'occupe de la communication avec l'utilisateur (toi), et que les fonctionnalités critiques se trouvent sur un serveur dédié, où tout le reste de l'important se passe.
Parfois, ton client peut communiquer avec plusieurs serveurs indépendants, ou le serveur d'un produit peut se connecter au serveur d'un autre produit. Cela forme une sorte de réseau global de clients et de serveurs, et tous travaillent ensemble.
C'est pourquoi le modèle d'application moderne peut-être mieux décrit par la paradigme Client-Internet-Serveur. Il y a tellement de communications complexes qui s'y produisent maintenant. Il y a même des "canaux de communication intelligents" qui décident eux-mêmes quand et à qui envoyer ta requête.
2.2 Clients
Les programmes clients peuvent être classés en 4 catégories :
- Client de bureau — programme fonctionnant sur un ordinateur.
- Client mobile — application pour iOS ou Android.
- Client web — site/application web fonctionnant dans un navigateur.
- Client serveur — application exécutée sur un autre serveur.
Et chacun d'eux peut à son tour être à nouveau divisé en parties. Par exemple, un client web est un site ou une application web, ce qui signifie qu'il est constitué de Navigateur et Site, qui est chargé dans celui-ci. Les navigateurs ne sont pas tous pareils et peuvent fonctionner différemment.
Mais même si on prend le navigateur le plus répandu, il y a encore le site qui est chargé dedans. Un site est généralement composé de trois éléments :
- HTML
- CSS
- JavaScript
"Rien de plus simple," diras-tu. Seulement aujourd'hui, personne n'écrit de sites simplement en HTML et JavaScript. Pour le développement de sites, on utilise non seulement des bibliothèques, mais aussi des frameworks complets, comme React, Angular ou Vue. Et ce ne sont plus des sites maintenant, mais des applications web complètes avec leurs builds, tests et paradigmes.
Plus personne n'utilise non plus le CSS pur. Il existe déjà des préprocesseurs CSS qui aident à le générer, et des frameworks CSS entiers. Il y a même des frameworks CSS spécialement pour les emails, pour que ton courrier soit beau à la fois dans le navigateur et dans la plupart des clients de messagerie.
On n'écrit plus beaucoup en JavaScript pur non plus — toutes les grandes applications web sont créées en TypeScript, qui est ensuite compilé en JavaScript. Tu vois le genre...
2.3 Internet et infrastructure
La communication entre client et serveur — quoi de plus simple ? Mais même dans leurs relations, tout a déjà changé.
Ton produit sera probablement hébergé dans l'un des centres de données modernes. Beaucoup d'entreprises dans le monde entier proposent divers services d'hébergement pour tes produits, que ce soit sur leurs serveurs ou sur tes propres serveurs physiques. N'importe quelle envie pour ton argent.
Le serveur physique n'est plus physique. Tous les centres de données modernes proposent la location de serveurs virtuels. Un serveur virtuel est une sorte d'ordinateur virtuel, et il peut y en avoir des dizaines sur un même serveur physique. Au moins, c'est pratique pour la mise à niveau du serveur. Si tu as besoin de plus de mémoire, tu peux l'ajouter à ton serveur virtuel en quelques minutes.
Mais cette approche est déjà dépassée, maintenant la mode est au cloud — c'est quand ton produit n'est pas seulement déployé sur un serveur virtuel dans un centre de données, mais utilise activement un large éventail d'infrastructure et de services de ces centres de données.
Tu as besoin d'un serveur pour stocker les sauvegardes — il y a une infrastructure prête à l'emploi dans le cloud pour ça. Tu as besoin d'une base de données avec une fiabilité de 99,9999999% ? Il y en a aussi une de disponible. Kafka, RabbitMQ, NoSQL ? Tout est déjà là et facile à configurer. Il suffit de sortir le portefeuille.
Et ces centres de données et nuages commencent à devenir partie intégrante de ton produit. Par exemple, Amazon possède un tas de centres de données dans le monde entier, c'est pourquoi ils proposent un service CDN : ton contenu public sera mis en cache sur tous les centres de données Amazon, et tes utilisateurs dans le monde entier le recevront plus rapidement.
Ou l'appel à l'API de ton application peut passer par le service Gateway API d'Amazon, qui permet de configurer très souplement le travail avec tes services. Tu peux répartir la charge sur différents services, refléter les attaques DDoS, automatiser le téléchargement de fichiers, configurer le cache intelligent, et bien plus encore.
Ainsi, entre l'application client et tes services, il existe de nombreuses "communications intelligentes" qui peuvent et doivent être configurées. Même si tu ne devras jamais faire cela toi-même, tu dois savoir qu'ils existent et peuvent avoir un impact significatif sur le fonctionnement de ton programme.
Et nous n'avons même pas abordé des sujets comme les routeurs, les antennes 5G, les satellites et les câbles internet au fond de l'océan. Tu envoies un flux vidéo de ton serveur à ton client, et il bug, car le client a une mauvaise connexion et la connexion se coupe constamment. Devine qui devra résoudre ce problème ?
2.4 Serveur
Le mot "serveur" peut cacher des concepts très différents. Cela te sera utile de connaître les plus courants.
Serveur physiqueUn serveur physique est un équipement, un ordinateur distinct avec des ressources (processeur, mémoire, stockage), utilisé pour le traitement de données et l'exécution de diverses applications logicielles. Ces serveurs sont installés dans des centres de données, où ils fournissent de la puissance pour l'hébergement de sites web, d'applications, de bases de données et d'autres services.
Serveur virtuelUn serveur virtuel est un serveur émulé par logiciel, qui fonctionne dans l'environnement d'un serveur physique. Grâce à la virtualisation, un serveur physique peut être divisé en plusieurs serveurs virtuels isolés, chacun doté de son propre système d'exploitation et pouvant être redémarré et configuré indépendamment.
Programme serveur (par exemple, Nginx)Un programme serveur, comme Nginx, est un logiciel serveur utilisé pour traiter les requêtes vers les ressources web. Nginx est bien connu en tant que serveur web, qui peut également servir de serveur proxy de messagerie et de serveur proxy inverse dans des architectures de microservices, ainsi que comme répartiteur de charge.
Serveur de base de donnéesUn serveur de base de données est un serveur spécialisé utilisé pour gérer des bases de données et traiter les requêtes qui leur sont adressées. Il offre un stockage centralisé des données et leur traitement, fournissant l'accès aux données via le réseau. Les serveurs de bases de données prennent en charge le traitement des transactions, la recherche et la modification des données, tout en assurant la fiabilité et la sécurité du stockage de l'information. Les exemples de serveurs de bases de données incluent MySQL, PostgreSQL, Oracle Database et Microsoft SQL Server.
Et quelque part dans un centre de données sur l'un des serveurs virtuels tournera ton projet en Python et Django. Il travaillera avec la base de données, recevra des requêtes de NginX, et enverra les logs de ses actions à Splank.
Mais c'est grâce à ton code que des millions d'utilisateurs de ton produit seront heureux. Ils utiliseront ton produit, paieront pour cela, et dans ce cas le propriétaire du produit sera aussi heureux. Les actions de l'entreprise augmenteront, tu recevras des bonus sous forme d'actions et tu seras également heureux. C'est un vrai cercle de bonheur dans la nature :)
GO TO FULL VERSION