Notre pile technique

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.

Lit
Simple. Fast. Web Components.

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 :

Apollo GraphQL
Apollo Graph Platform— unify APIs, microservices, and databases into a graph that you can query with GraphQL

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é.

JWT.IO
JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

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 :

webpack
webpack is a module bundler. Its main purpose is to bundle JavaScript files for usage in a browser, yet it is also capable of transforming, bundling, or packaging just about any resource or asset.

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.

MongoDB: the application data platform
Get your ideas to market faster with an application data platform built on the leading modern database. MongoDB makes working with data easy.

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 :

Permission de monter à bord ? Ship : le registry docker apprivoisé.
Si vous avez déjà opéré un registre Docker vous avez certainement été confronté à son extreme simplicité : un dépôt d’image. Pour l’utiliser, dans un contexte “entreprise”, nous avons besoin de contrôler les accès au registre et à ses différents dépôts.

Notre CI/CD est aussi basé sur les containers :

Drone CI – Automate Software Testing and Delivery
Drone is a self-service Continuous Delivery platform for busy development teams

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.

Vers l’ARM et au-delà !! | Connect - Editions Diamond
Les serveurs ARM ont le vent en poupe, mais comment les intégrer à nos infrastructures ? Faut-il adapter nos développements ? Comment gérer une transition ? Docker, Docker Swarm et les images « manifest » orchestrent un cluster hybride.

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 !