11.1 Produits modernes
Les produits modernes ne sont plus appelés programmes. Un produit moderne peut être composé de dizaines de programmes, de centaines de services Internet et d'une multitude d'API fournies par le cloud du centre de données où le produit est déployé.
La plupart des produits modernes (sinon tous) fonctionnent selon la paradigme Client-Serveur. C'est lorsque sur votre appareil (téléphone, ordinateur portable, ordinateur) se trouve un programme qui gère la communication avec l'utilisateur (vous), tandis que toutes les fonctionnalités critiques sont sur un serveur distant où tout l'important se passe.
Parfois, votre client peut communiquer avec plusieurs serveurs indépendants, ou alors le serveur d'un produit peut se connecter au serveur d'un autre produit. Cela forme un genre de réseau global de clients et de serveurs qui travaillent tous ensemble.
Donc, il serait peut-être préférable de décrire le modèle d'application moderne comme une paradigme Client-Internet-Serveur. Il y a tellement de communication complexe. Il y a même des «canaux de communication intelligents» qui décident eux-mêmes à qui envoyer votre requête et quand.
11.2 Clients
Les programmes clients peuvent être divisés en 4 catégories :
- Desktop-client — programme fonctionnant sur un ordinateur
- Mobile-client — application iOS ou Android
- Web-client — site/appli web fonctionnant dans un navigateur
- Server-client — application qui s'exécute sur un autre serveur
Et chacune peut être divisée en parties. Par exemple, un web-client est un site ou une appli web, ce qui signifie qu'il est composé de Navigateur et Site qui est chargé dans celui-ci. Même les navigateurs ne sont pas tous identiques et peuvent fonctionner différemment.
Mais même si on prend le navigateur le plus courant, il reste encore le site qui y est chargé. Un site est généralement composé de trois éléments :
- HTML
- CSS
- JavaScript
Rien de plus simple, direz-vous, mais plus personne n'écrit de sites seulement en HTML et JavaScript. Maintenant, on utilise pour le développement de sites pas seulement des bibliothèques, mais des frameworks complets comme React, Angular ou Vue. Et ce ne sont plus des sites, mais des applications web complètes. Avec leurs compilations, tests et paradigmes.
Même le CSS simple ne s'utilise plus : il y a déjà des préprocesseurs CSS qui aident à le générer, et même des frameworks CSS entiers. Mon Dieu, il y a même des frameworks CSS entiers pour les emails, pour que votre email ait l'air sympa si quelqu'un le regarde dans un navigateur ou dans la plupart des clients mail.
Plus personne n'écrit non plus directement en JavaScript : toutes les grandes applications web sont développées en TypeScript, qui est ensuite compilé en JavaScript. Vous voyez l'idée...
11.3 Internet et infrastructure
La communication client-serveur — quoi de plus simple ? Et pourtant tout a changé là aussi.
Premièrement, votre produit sera probablement hébergé dans un des centres de données modernes. De nombreuses entreprises à travers le monde proposent divers services d'hébergement pour vos produits, que ce soit sur leurs serveurs ou sur vos serveurs physiques. Tout caprice pour votre argent.
Un serveur physique n'est plus vraiment physique. Tous les centres de données modernes vous proposent la location de serveurs virtuels. C'est comme un ordinateur virtuel, et il peut y en avoir des dizaines sur un seul serveur physique. Mais c'est pratique en termes de mise à niveau du serveur. Si vous avez besoin de plus de mémoire, vous pouvez l'ajouter à votre serveur virtuel en quelques minutes.
Mais même cette approche est déjà dépassée. Maintenant, la mode est de migrer vers le cloud — c'est lorsque votre produit n'est pas seulement déployé sur un serveur virtuel dans un centre de données, mais utilise activement un grand ensemble d'infrastructure et de services de ces centres de données.
Vous avez besoin d'un serveur pour stocker les sauvegardes : il y a toute une infrastructure pratique pour ça dans le cloud. Vous avez besoin d'une base de données avec une fiabilité de 99.9999999 %? Il y en a une aussi. Kafka, RabbitMQ, NoSQL ? Tout est déjà disponible et facilement configurable. Il suffit de payer.
Ces centres de données et clouds commencent à devenir une partie de votre produit. Par exemple, Amazon a une multitude de centres de données dans le monde entier, c'est pourquoi ils proposent un service CDN : votre contenu public sera mis en cache dans tous les centres de données Amazon, et vos utilisateurs à travers le monde pourront y accéder plus rapidement.
Vous pouvez également passer l'appel à l'API de votre application par le service Amazon Gateway API, qui permet de configurer très finement vos services. Vous pouvez répartir la charge entre différents services, bloquer les attaques DDoS, automatiser le téléchargement de fichiers, configurer un cache intelligent et bien d'autres choses encore.
Ainsi, entre l'application client et vos services, une tonne de « communications intelligentes » peut être configurée et doit être configurée. Même si vous ne le ferez jamais vous-même, vous devez savoir qu'elles existent et qu'elles peuvent avoir un impact significatif sur le fonctionnement de votre programme.
Et nous n'avons même pas abordé des sujets comme les routeurs, les antennes 5G, les satellites et les câbles sous-marins. Vous envoyez un flux vidéo de votre serveur à votre client, et ça plante parce que le client a une mauvaise connexion et que ça coupe tout le temps. Devinez qui va devoir résoudre ce problème ?
11.4 Serveur
Le mot serveur englobe de nombreux concepts assez différents, donc il vous sera utile de vous familiariser avec les plus populaires d'entre eux.
Serveur physique
Un serveur physique est une pièce d'équipement, un ordinateur distinct avec des ressources (processeur, mémoire, stockage), utilisé pour traiter des données et faire fonctionner 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 virtuel
Un serveur virtuel est un serveur émulé par logiciel, qui fonctionne dans l'environnement d'un serveur physique. Grâce aux technologies de virtualisation, un seul serveur physique peut être divisé en plusieurs serveurs virtuels isolés, chacun ayant son propre système d'exploitation et pouvant être redémarré et configuré indépendamment.
Programme-serveur (exemple Nginx)
Un programme-serveur, comme Nginx, est un logiciel serveur utilisé pour gérer les requêtes vers les ressources web. Nginx est bien connu comme serveur web, mais peut aussi fonctionner comme serveur proxy pour e-mails et proxy inverse dans des architectures avec microservices et comme répartiteur de charge.
Serveur de base de données
Un serveur de base de données est un serveur spécialisé utilisé pour la gestion des bases de données et le traitement des requêtes vers celles-ci. Il offre un stockage centralisé des données et leur traitement, donnant accès aux données via un réseau. Les serveurs de base de données supportent le traitement des transactions, la recherche et la modification des données, assurant en même temps la fiabilité et la sécurité du stockage des informations. Des exemples de serveurs de base de données incluent MySQL, PostgreSQL, Oracle Database et Microsoft SQL Server.
Et quelque part dans un centre de données, sur un des serveurs virtuels, sera hébergé votre projet en React et Node.js, qui fonctionnera avec une base de données, recevra des requêtes d'Nginx et enverra les logs de ses actions vers Splank.
Mais c'est grâce à votre code que des millions d'utilisateurs de votre produit seront heureux. Ils utiliseront le produit, paieront pour lui, et ainsi le propriétaire du produit sera heureux. Les actions de l'entreprise monteront en bourse, vous recevrez des bonus sous forme d'actions, et vous serez heureux aussi. Un vrai cercle de bonheur dans la nature :)
GO TO FULL VERSION