La programmation orientée objet au service du jumeau numérique 👨‍💻

world map on wall and laptop near cup and container

La programmation orientée objet (POO) n’est pas un concept nouveau. Théorisée dans les années 80, elle a vu sa formalisation et son essor dans les années 90. On la retrouve maintenant dans la plupart des langages de programmation d’assez haut niveau.

J’ai pu acquérir et développer une mentalité et des compétences (mindset et skillset) de développeur qui pense objet, en me frottant à différents langages (surtout C++ et python, mais aussi du C# et du JavaScript), dans le cadre de projets très variés d’informatique industrielle pour des systèmes de lecture automatique de plaque minéralogique, de traitement du signal, de système de mesure ferroviaire, de robotique, d’intelligence artificielle, d’application web et de jumeau numérique.

Tout cela me sert au quotidien dans mes missions de CTO pour Altametris.

Car oui, dans nos métiers très technologiques, les objets sont partout et penser objet permet de mieux comprendre et d’appréhender les sujets à traiter (en plus de savoir de quoi je parle quand je vous parle d’azure et de cloud ⬇️).

Mais qu’est ce qu’un objet en premier lieu?

Concrètement, un objet est une structure de données qui répond à un ensemble de messages. Cette structure de données définit son état tandis que l’ensemble des messages qu’il comprend décrit son comportement :

  • les données, ou champs, qui décrivent sa structure interne sont appelées ses attributs ;
  • l’ensemble des messages forme ce que l’on appelle l’interface de l’objet ; c’est seulement au travers de celle-ci que les objets interagissent entre eux. La réponse à la réception d’un message par un objet est appelée une méthode ; elle décrit quelle réponse doit être donnée au message.

Certains attributs et/ou méthodes (ou plus exactement leur représentation informatique) sont cachés : c’est le principe d’encapsulation. Ainsi, l’application peut modifier la structure interne des objets ou leurs méthodes associées sans avoir d’impact sur les utilisateurs de l’objet.

L’autre concept clés dans la POO objet est l’abstraction. Son objectif principal est de gérer la complexité en masquant les détails inutiles à l’utilisateur. Cela permet à l’utilisateur d’implémenter une logique plus complexe sans comprendre ni même penser à toute la complexité cachée.

L’abstraction est bien sûr un concept général que vous pouvez trouver dans le monde réel ainsi que dans la POO. Tous les objets du monde réel, comme votre voiture, ou votre maison, en masquant les détails internes fournissent une abstraction.

Abstraction et encapsulation facilitent beaucoup la gestion de la complexité en la divisant en petites parties. Dans le meilleur des cas, il est possible de les utiliser sans comprendre comment elles fournissent les fonctionnalités. Et cela permet de diviser la complexité d’un applicatif en parties contrôlables, maintenables et interprétables en toute agilité (souvenez vous le monolithe).

Les deux autres concepts fondamentaux de la POO sont le polymorphisme et l’héritage. Ce sont deux notions assez liées car elles permettent de fournir des interfaces uniques pour différents types de données tout en rendant le code réutilisable. Il faut savoir qu’ils existent, mais ce sont surtout des concepts techniques.

Principes des POO

Pour bien faire de la POO, on retrouve des grands principes comme :

  • SOLID. Abréviation de l’anglicisme Single responsibility, Open-closed, Liskov substitution, Interface segregation and Dependency inversion. Cinq principes qui, lorsqu’ils sont appliqués ensembles, rendront plus portables un programme et plus facile à entretenir à long terme .
  • DRY pour don’t repeat yourself. Éviter la redondance de code au sein d’une application afin de faciliter la maintenance, le test, le débogage et les évolutions. Lorsque le principe DRY est bien appliqué, la modification d’un élément d’un système ne change pas les autres éléments non liés logiquement. De plus, tous les éléments liés logiquement changent uniformément, de manière prévisible et restent synchronisés .
  • KISS pour Keep it simple, stupid. Pas pour dire qu’il ne faille pas réaliser des systèmes complexes, mais que pour y arriver, il faut toujours privilégier la simplicité dans la conception et que toute complexité non indispensable devrait être évitée dans toute la mesure du possible .

Ces principes s’appliquent à bien des domaines différents.

Ce que l’on notera aussi, et cela pourra être développé dans un prochain billet autour du devops, c’est que ces notions sont primordiales lorsque l’on applique des méthodes de gestion de projet de développement agile, comme à travers l’usage du framework scrum.

Au final, quand on doit concevoir, modéliser et surtout réaliser un système de gestion et de valorisation du patrimoine digital, architecturé en microservices, qui sont autant d’objets avec des états (stockage des données) et des interfaces (des API), la meilleure philosophie à adopter est celle de la POO et ses principes fondamentaux, pour peu que vous les maîtrisiez.

Sources

Un pas de plus dans le cloud 😶‍🌫️

view of cityscape

Dans mon billet précédent, je vous parlait de jumeau numérique, de BIM, d’industrie 4.0, de microservices et cloud.

Je l’ai évoqué sur mon compte LinkedIn, mais souvenez vous, le passage au cloud supprime le fardeau de la prise en charge de l’infrastructure informatique. J’ai en récemment fait (de nouveau) l’expérience avec un partenaire 🤦‍♂️.

Alors oui, c’est vrai, le constat que l’on peut faire aujourd’hui, par rapport à la décennie précédente, c’est que l’on ne sait plus réaliser et maintenir une infrastructure performante on-premise. Les technologies évoluent vite, les clients sont toujours plus exigeants et les applications toujours plus nombreuses. Impossible de faire face sans être une énorme structure déjà spécialisée dans l’IT.

Et surtout il faut se dire que le cloud public est un fabuleux accélérateur pour le développement d’applications métier et leur valorisation ! En effet, là ou avant il fallait dépenser des sommes folles en IT, attirer des talents juste pour designer, construire et maintenir une infrastructure qui puisse accueillir des applications, ces questions sont aujourd’hui caduques.

Bien sur il faut toujours des talents et le métier de l’IT existe et existera toujours.

Le TCO…

J’avais évoqué dans mon précédent billet que l’adoption d’un modèle de cloud public permet de se débarrasser de tout CAPEX ou profit de l’OPEX. Mais on peut aller beaucoup plus loin dans l’analyse, notamment en regardant le TCO (Total Cost of Ownership)  qui représente le coût global d’un bien ou d’un service tout au long de son cycle de vie. Cette méthode de calcul prend aussi bien en compte les coûts directs que les coûts indirects.

Microsoft Azure propose un outil dédié pour cela. Il permet d’estimer les coûts de migration de vos données et applications vers Azure et prévoir les économies potentielles en définissant des scénarios de charge de travail « classique » dans un datacenter on premise puis en adaptant un certain nombre d’hypothèses (taux horaire de vos techniciens IT, prix de l’électricité, etc.) vous pouvez vous faire une idée assez précise de ce que peux représenter une migration vers le cloud public ou bien tout simplement vous aider à bien choisir dès le début.

L’outil de calcul de TCO vous offre un certain nombre de graphique permettant de mieux comprendre la répartition des coûts

Evidemment, d’autres indicateurs sont à prendre en compte.

Mais pas que.

Toujours sur LinkedIn, j’offrais un petit exemple de la mise en place d’une service de transformation de données et de ce que cela peut représenter pour Altametris ⬇️(spoiler, il est question de vitesse de delivery, d’élasticité, de scalabilité et bien sur, d’agilité mais aussi de résilience et de taux de disponibilité).

Le SLA

Quand on parle de niveau de disponibilité, on atterrit sur la notion de SLA (service level agreement). Il faut voir cela comme un contrats qui décrit l’engagement du fournisseur de service cloud en matière de temps d’activité et de connectivité. Habituellement et selon le niveau de service, on parle en « nombre de 9 » c’est à dire des taux allant souvent de « two nine » (99%) à « five nine » (99.999%). Le tableau ci-dessous ⬇️ illustre ce que cela peut représente en temps (cumulé) par semaine / mois / an.

niveau de SLADowntime par semaineDowntime par moisDowntime par an
99%1.68 heures7.2 heures3.65 jours
99.9%10.1 minutes43.2 minutes8.76 heures
99.95%5 minutes21.6 minutes4.38 heures
99.99%1.01 minutes4.32 minutes52.56 minutes
99.999%6 secondes25.9 seconds5.26 minutes
La durée d’indisponibilité en fonction du niveau de SLA

Difficile d’imaginer ce genre de niveau de service dans une infrastructure on-premise sans faire exploser les coûts pour permettre d’atteindre cette objectif (plus de matériel, plus de personnel, des horaires décalés, jamais de coupure de courant, des mises à jour express, etc. )

La durabilité des données

Les données du patrimoine digital, numérique sont primordiales et ont une grande valeur pour les gestionnaires d’infrastructures. Il est absolument nécessaire d’en assurer l’intégrité à travers le temps. Les données doivent être stockées de manière redondante, idéalement dans plusieurs installations et sur plusieurs périphériques dans chacune d’elles. Des catastrophes naturelles, une erreur humaine ou des défaillances mécaniques ou électrique ne doivent pas entraîner de perte de données.

Les clouds providers comme Microsoft Azure offrent des services de stockage qui conservent toujours plusieurs copies des données afin qu’elles soient protégées contre des événements planifiés ou non, notamment des défaillances matérielles temporaires, des pannes de réseau ou de courant et des catastrophes naturelles majeures. La redondance garantit que le stockage répond à ces objectifs de disponibilité et de durabilité, même en cas de défaillance.

Les différentes options de redondance (LRS, ZRS, GRS chez Azure, les différents niveaux S3 chez Amazon) offrent une durabilité des données allant d’au moins 99,999999999 % (11 « neuf ») à  99,99999999999999 % (16 « neuf ») sur une année donnée. Mais qu’est ce que ça veut dire ?

Un niveau de durabilité de 11 « neuf » correspond à une perte moyenne annuelle de 0,000000001 % des objets stockés (un objet étant une unité fondamentale du stockage). Par exemple, si vous stockez l’équivalent de 10 000 000 d’objets (qui peuvent correspondre à autant de fichiers que vous voulez selon votre application), vous pouvez vous attendre à perdre en moyenne un objet unique une fois tous les 10 000 ans 😯. Je vous laisse faire le calcul dans le cas de 16 « neuf ».

Vous trouverez ci-dessous les différents schémas de redondance que propose Azure ⬇️.

Duplication locale : au sein du même datacenter, 3 copies
Duplication par zone : 1 copie dans 3 datacenters de la même zone géographique
Geo réplication : 6 copies, trois par datacenter dans deux régions différentes
Variation de la geo réplication avec une duplication par zone et locale, 6 copies, dans 4 datacenters différents dont un dans une autre région.

Il va sans dire que essayer d’arriver à ce niveau de durabilité des données sur une infrastructure on premise n’est pas possible car elle fait littéralement exploser les coûts de stockage quand elle n’est pas tout simplement impossible faute de locaux.

Haut niveau de disponibilité, forte durabilité des données sont autant d’avantages qui permettent de construire des applicatifs robustes pour des besoins métier exigeants, comme la gestion du patrimoine digital des gestionnaires d’infrastructures !

Mais ce n’est pas tout ! Dans un prochain billet, je vous présenterais d’autres avantages du cloud public, notamment sur des sujets de cybersécurité et de sécurisation des applications, avec le concept de contrôle d’accès basé sur les rôles (RBAC) et de défense en profondeur .

A bientôt !

Sources

Le jumeau numérique à l’ère du cloud, le nouveau défi des gestionnaires d’infrastructure

La digitalisation des assets est un défi majeur pour les gestionnaires d’infrastructures. Devant l’intensification de leur exploitation, les exigences des consommateurs en terme de qualité de services, la pression de la concurrence et des pouvoirs publics ou bien simplement le vieillissement des équipements, le jumeau numérique (digital twin pour les bilingues) est ce nouveau domaine rendu accessible par des technologies offrant des sources de données toujours plus précises, en quantité, variées et à moindre coût.

L’industrie 4.0 frappe à la porte et la numérisation des assets, leur intégration dans un modèle d’information dédié, dont le BIM fait partie, est un véritable défi. La remontée d’information dans un système centralisé permet d’obtenir une connaissance plus fine de l’état des différents composants de l’infrastructure, de construire des tableaux de bord (dashboard) métiers pertinents facilitant l’exploitation et la maintenance.

Caractérisation du risque végétation sur une infrastructure ferroviaire

Mais concrètement, comment cela peut s’envisager et se construire, lorsqu’il s’agit de données 3D ? Comment acquérir, traiter et proposer des informations pertinentes et en qualité ? Surtout que chaque métier étant différent, il faudra envisager une brique dédiée pour chaque usage.

Monolithe ou microservices ?

Et justement c’est bien de briques qu’ils s’agit. Et pour penser cette usine 3D on arrive à comparer deux architectures, monolithique et en microservices.

monolith vs microservices
Architecture monolithique et en microservices

Une architecture monolithique est conçue comme un grand système déployé comme une seule unité derrière un répartiteur de charge. Les architectures monolithiques sont simples à construire, à tester et à déployer. Mais l’un des principaux inconvénients des architectures monolithes est le couplage étroit. Au fil du temps, les composants deviennent étroitement liés et enchevêtrés. Ce phénomène affecte la gestion, l’évolutivité et le déploiement continu. Généralement, les monolithes sont idéaux lors du développement d’applications petites et simples.

À l’inverse, une architecture en microservices consiste en des services indépendants des uns des autres. Par essence, les  composants sont « divisés » en de petits services autonomes qui peuvent être déployés et industrialisés séparément. Cela facilite le passage à l’échelle car il suffit de passer à l’échelle les composants fortement sollicités. Mais surtout les composants de microservices ne sont pas interdépendants et peuvent donc être testés individuellement. Ce faible couplage facilite les modifications à travers le temps et s’adapte très facilement à un usage très complexe.

Une architecture basée sur des microservices est bon choix lorsque vous développez des systèmes complexes.

Pourquoi une Architecture de Microservices ? | AYMAX Group

Et c’est bien notre cas. La complexité des usages, le diversité des traitements, la quantité de données à traiter nécessitent une réflexion en microservices.

Ainsi, chaque application peut être développée indépendamment par une petite équipe, encapsulée et facilement industrialisée, sans compromettre le fonctionnement de l’usine 3D dans son ensemble. Chaque petite équipe de développement (4-5 personnes maximum) sera ultra efficace, car la communication y est bien meilleure quand dans une très grande équipe en charge d’un monolithe. La distribution et l’intégration continue est simplifiée et bien plus effective, car il est plus facile de déployer un microservice que de tenter d’ériger un monolithe. Le microservice bénéficie de toute l’agilité du devops. Le périmètre du service étant relativement faible, la mise en place de tests dans une approche de « test driven development » est simplifiée.

developers vs communication channels
Canaux de communication monolithiques vs microservices à mesure que la taille totale de l’équipe augmente

Bien évidemment, comme l’échange avec les autres services de fait via des interfaces (API, souvent REST) un effort particulier doit être fait à ce niveau pour garantir la bonne interopérabilité des services.

Et cette approche prend une tout autre dimension si l’on considère la gestion des ressources nécessaire à faire tourner cette usine.

Cloud public ou privé ?

Ce qui vient en tête en premier lieu, c’est que l’applicatif de cette usine 3D sera déployé sur des serveurs et se posera rapidement la question de qui porte la responsabilité de provisionner et de manager les ressources associées et nécessaire au bon fonctionnement de l’ensemble. Même si les grandes entreprises peuvent gérer cela avec un département IT dédié, les processus induits, les logiques d’achats, d’investissement et de RH peuvent ralentir les développements. Comme il est impossible de développer des applications sans l’aide de l’équipe infrastructure cela finit par nous éloigner de notre mission initiale : construire et maintenir cette usine 3D au quotidien.

L’architecture serverless est un modèle dans lequel le fournisseur de services cloud (AWS, Azure ou Google Cloud) est responsable de l’exécution d’un bout de code en allouant de manière dynamique les ressources. Et il ne facture que la quantité de ressources utilisées pour exécuter le code. Le code est généralement exécuté dans des conteneurs sans état pouvant être déclenchés par divers événements, ce sont nos fameux microservices. Non seulement notre usine 3D est robuste de part son architecture et son mode de développement, la mise à l’échelle est simplifiée et les coût de runtime directement lié à la charge de données à traiter.

Combiner serverless et microservices permet d’optimiser les coûts d’exploitation au plus juste

Les services cloud permettent de transformer les dépenses d’investissement de capital dans les équipements informatiques en dépenses d’exploitation

[Dossier] Les CapEx et les OpEx à l’ère du Cloud et des IaaS (lebigdata.fr)

Et pour des décideurs, c’est important. Dans cette configuration, aucun CAPEX, que ce soit au lancement du projet que lors de sa mise à l’échelle, que de l’OPEX, qui est beaucoup plus facile à justifier financièrement pour un asset manager.

D’ailleurs si l’on devait décrire le processus de maturation des données d’un stade « brute, sortie de capteur » à « enrichie, exploitable et structuré », il serait composé de plusieurs étapes, que ce soit de traitement pur ou de contrôle. Chaque étape qui constituerait ce « pipeline » de traitement peut être considéré comme un microservice à part entière.

Et c’est toute cette réflexion que j’accompagne depuis plusieurs années en tant que directeur technique chez Altametris, filiale de sncf réseau. Nous développons toute une usine 3D, de la gestion et la valorisation de données brutes (3D, image, photogrammétrie), extraction de donnés métier avec des algorithmes dédiés, certains exploitant des modèles d’intelligence artificielle, pour offrir tout un catalogue de service, autant de l’assemblage de données de scanner 3D statiques ou dynamiques, de panoramas, de modèles 3D photogrammetriques, à de l’exploitation métier, notamment ferroviaire comme de l’extraction de rail, de fil caténaire, d’objets ferroviaires et général, permettant ensuite, par exemple des analyse de gabarit, de volumétrie de ballast, mesure sur les fils caténaires (entraxe, désaxement), mesure d’entraxe, étude ETCS pour la signalisation, mais aussi des applications en inspection de bâtiments et d’ouvrage d’arts, gestion de la végétation, …

Extraction d’éléments ferroviaire et détection d’obstacles dans un gabarit

La donné en qualité est ensuite distribuée à nos clients finaux, soit directement dans leurs puits de données, soit dans des interfaces de livraisons dédiées et simplifiées, que l’on peut encore penser comme autant de microservices😉

Une approche en microservices permet de ségréger les interfaces
Déployer rapidement des interfaces web avec Streamlit

Et vous comment gérez vous le jumeau numérique dans votre organisation ? Quels sont vos besoins ? Quelles solutions imaginiez vous y apporter ?

Je serais ravi que vous me partagiez vos avis en commentaire !

Sources