Notre pile technique
Souvent nous parlons de "Stack" mais chez educ.cloud, seuls les noms de nos applications sont en anglais ;) ...
La pile technique désigne l'ensemble des logiciels, des outils et des techniques utilisés pour réaliser et exécuter une application. Cette pile est réfléchie pour son efficacité, notamment dans une optique de développement durable en optimisant au maximum l'efficacité énergétique. Elle est appelée à évoluer pour s'adapter à l'évolution de l'informatique, de ses périphériques, des réseaux, ...
Une application ?
Même si elles sont accessibles par le web via une URL, nos applications ne sont pas des sites WEB. Le navigateur, en contactant l'URL, télécharge tout ou partie de l'application qui ensuite s'exécute entièrement sur le navigateur.
Il y a plusieurs raisons à ce choix technique, permis par la maturité des navigateurs.
L'efficacité
Prenons en exemple notre application Check qui permet à de très nombreux utilisateurs de remplir simultanément des formulaires en ligne. En contactant l'URL : https://check.educ.cloud et une fois l'application chargée (qui est légèrement plus grosse qu'un page Web classique), il n'y aura plus de transmission autre qu'un échange de données très minimal.
Première efficacité : l'impact réseau, en limitant la transmission d'information, nous limitons l'impact sur les équipements.
Deuxième efficacité : diminution drastique du nombre de serveurs, en déportant la logique applicative vers le client les besoins en serveurs (machines toujours allumées, refroidies et secourues électriquement) sont moindres. Les clients, eux, sont allumés au besoin par les utilisateurs et leurs défaillances ne remettent pas en cause l'intégrité du système.
Troisième efficacité : une application hyper réactive pour le client, qui peut être utilisée hors ligne ou par réseau dégradé, voire installée sur le périphérique.
Cette efficacité ne peut être effective que par le travail commun des différentes couches de notre stack : le FullStack. Tout le monde a une éducation à "la stack" avec pour objectif une efficacité globale.
La technologie
Pour créer cette application, nous n'utilisons pas de Framework mais uniquement HTML, CSS et Javascript (TypeScript en vrai). En effet, même si cela peut interpeler, il s'avère que les navigateurs sont suffisamment matures et ils possèdent déjà depuis de nombreuses années les éléments nécessaires au développement d'une application, quels que soient sa taille et sa complexité. Ceci dit, nous utilisons un ensemble d'outils qui nous permet de gagner en efficacité. Le premier est lit, un helper qui permet de construire rapidement des WebComponents, notre technologie de développement client préférée.
Pour la définition du style, nous utilisons SCSS pour packager WebPack et c'est tout !
Les données
Maintenant que nous avons une application qui tourne sur un client : ordinateur de bureau, portable ou mobile, il lui faut parfois échanger des données avec un ou plusieurs serveurs. Pour cela, nous utilisons GraphQL, et notamment l'implémentation Apollo :
Nous utilisons donc Apollo Client et Apollo Server.
Stateless
Nos applications sont stateless : elles ne demandent pas aux serveurs de maintenir un état applicatif. Ceci a aussi un impact sur l'efficacité, le deuxième vu précédemment : ne pas maintenir d'état applicatif, c'est économiser des services de synchronisation, de la mémoire et diminuer la complexité du système. Pour permettre ce mode, nous utilisons JWT, un système de jeton signé.
Les serveurs
La plupart des applications demande à se connecter à des serveurs pour échanger de l'information. Nous utilisons NodeJS pour notamment lancer Apollo Server. Les serveurs ont souvent "peu" de logique, et servent de "proxy" à une base de données. Pour packager nos applications, nous utilisons là aussi WebPack :
La base de données
Il serait compliqué de résumer ici et en quelques lignes le choix d'une base de données, mais nous avons choisi de travailler, sauf cas particulier, avec des bases de données NoSQL et particulièrement MongoDB qui est dimensionnable d'un environnement simple de développement à une infrastructure à très forte charge.
Containers, Docker et Kubernetes.
Nos applications sont des applications "CLOUD". Derrière ce mot générique très usité se cache un ensemble de technologies qui a pour principaux objectifs de simplifier le déploiement, d'assurer la montée en charge, d'offrir une résistance aux pannes, de faciliter la mise à jour, ...
Au cœur de ces technologies, il y a le container, cette capacité à avoir en un seul paquet de données l'ensemble du code nécessaire à l'exécution d'un programme. Nos programmes sont distribués en containers notamment grâce à notre application Ship :
Notre CI/CD est aussi basé sur les containers :
ARM Support
L'efficacité énergétique nous tient à cœur, et même si les serveurs ARM ne sont pas encore légions, nous croyons beaucoup à l'informatique responsable et moins énergivore. En 2018, nous abordions déjà ce sujet et la création d'images multi-plateformes dont ARM.
Des remarques, des questions ?
N'hésitez pas à nous contacter : contact@educ.cloud, notamment pour postuler ;) Vous connaissez dorénavant votre stack cible. Vous y serez formé. La formation est à la base et au sommet de notre stack !