Pour un projet sur lequel je travaille actuellement (dont j’espère vous parler un de ces jours), j’ai été amené à rechercher des services permettant d’envoyer et de recevoir des emails à travers une interface de programmation déportée. Je vais vous résumer cela, ça pourrait vous être utile. La problématique L’envoi…
ZeroMQ, la super bibliothèque réseau
Une fois n’est pas coutume, voici un article particulièrement technique. Le développement d’applications connectées est quelque chose d’à la fois important et délaissé. Important car cela constitue la base de l’informatique moderne, et que c’est une chose qui est enseignée dans tous les cursus informatiques. Délaissé car l’écrasante majorité des…
Cloud Computing : Mythes et réalité
Depuis un an et demi, j’ai donné plusieurs conférences dans diverses écoles et universités. L’une de mes conférences reprend les thèmes de ce blog, l’autre s’intitule «Architecture répartie en environnement Web». Dans cette seconde conférence, j’aborde un certain nombre de concepts, dont le Cloud Computing. Et j’ai réalisé assez vite…
Présentation du framework Temma
Il y a quelques temps déjà, j’ai rapidement parlé d’un projet sur lequel je travaille. Il s’agit de la publication sous licence libre du framework MVC en PHP que j’ai développé pour les besoins de mon entreprise. C’est fait. Le framework se nomme Temma, et il est disponible sur le…
Créer rapidement des sites en local
Un petit article très technique, qui pourra être utile à des développeurs Web qui veulent créer rapidement des sites en local sans se prendre la tête. Je ne sais pas pour vous, mais j’ai souvent besoin de créer des sites qui me servent à prototyper des développements ou à tester…
Gestion de cache et péremption des données
Je suis actuellement en train de travailler sur une couche d’abstraction de données (pour améliorer celle de mon framework afin de la rendre plus transparente). J’ai buté sur un problème assez classique, que je vais partager avec vous car cela pourrait vous intéresser. Ma couche d’accès aux données sert habituellement…
INI vs JSON vs XML
Dans la plupart des applications, on a besoin d’enregistrer des informations. Au minimum, il faut un fichier de configuration, pour savoir comment se connecter à la base de données qui stockera le reste des infos. Dans le cas d’applications sans base de données, tout sera enregistré dans des fichiers. À…
Les joies des problèmes IT
Je vais écrire un billet un peu inhabituel, aujourd’hui. Je dis souvent qu’il ne faut jamais compter sur la fiabilité des ordinateurs. C’est tellement vrai que depuis une semaine, j’enchaîne les problèmes techniques sur mes serveurs, les uns après les autres. Aucune relation entre les problèmes, ce sont juste de fâcheux concours…
Plus loin que la simplicité : la rusticité
J’ai déjà parlé du concept de simplicité sur ce blog. J’espère que tout le monde est convaincu des avantages que cela procure à tous les niveaux :
- Une interface simple sera plus facile à comprendre et à utiliser ; elle sera plus ergonomique.
- Un code simple sera plus facile à corriger et à faire évoluer ; il sera plus facile à maintenir.
- Une procédure ou une méthode sera adoptée d’autant plus rapidement qu’elle sera simple à appréhender et facile à mémoriser.
Nous sommes d’accord, le «simple», c’est bien. Et comme d’habitude, c’est aussi le moment de dire que le «simpliste», ce n’est pas bien. Faire quelque chose de simpliste, c’est lorsqu’on recherche la simplicité aveugle ; quand on confond «en faire moins» avec «en faire le moins». Il faut parfois complexifier un peu un programme pour en simplifier l’ergonomie. Ou faire des concessions sur la simplicité d’une procédure si cela peut en augmenter l’efficacité.
Bref. Ce dont je veux vous parler aujourd’hui, c’est du concept de rusticité.
L’un des fondements du travail d’informaticien, c’est d’aimer la technologie, de se passionner pour l’avant-garde du high-tech, de chercher à connaître les technos du futur. C’est ainsi qu’on cherchera à mettre en œuvre des concepts ou des briques logicielles (ou matérielles) que nous ne maîtrisons pas forcément, pour le plaisir d’apprendre à les utiliser. Souvenez-vous ce que je disais sur la R&D : il ne faut pas confondre développement et veille technologique.
Sans aller jusqu’à faire de la recherche alors qu’on devrait faire du développement, on peut conduire nos choix en se laissant porter par des effets de mode. Quel est la techno «hype» du moment ? Quels sont les derniers «buzzwords» à connaître ?
En entreprise, les facteurs qui conduisent à un choix technologique sont multiples. La stabilité et la pérennité sont très importants. Ils le sont souvent plus que la performance ou le coût.
Ajoutez cela à la simplicité, et vous aboutissez à la «rusticité».
Une techno rustique, c’est quoi ?
Attention à ne pas comprendre de travers ce que j’essaye d’expliquer. Je ne suis pas en train de dire qu’il faut systématiquement utiliser des technologies antédiluviennes, au nom de leur rusticité. Moi je parle de “rusticité high-tech”, si je puis dire 🙂
Prenons un exemple au sujet des langages de programmation :
- Coder un site web en Fortran, ce n’est pas rustique, c’est débile. Votre site sera difficile à maintenir, vous aurez du mal à trouver des développeurs Web compétents dans ce langage, vous n’aurez aucun gain de performance par rapport à d’autres langages, et il vous manquera l’accès à un certain nombre de librairies très utiles.
- Par contre, une application de calcul scientifique distribuée sur un cluster pourra être codée en Fortran. C’est un choix très répandu : C’est un langage sans allocation dynamique, donc qui s’optimise très bien sur les architectures distribuées ; de nombreux scientifiques continuent à maintenir du code écrit en Fortran il y a 30 ans, sans avoir objectivement besoin de changer de langage ; réutiliser ce code est une bonne idée.
Un exemple concernant l’innovation fonctionnelle :
FineFS, système de fichiers redondé
J’ai lancé depuis quelques temps un projet dans mon entreprise, que nous venons de publier sous licence libre. Il s’agit d’un système de fichiers répliqué du nom de FineFS.
Je vais en parler ici parce qu’il s’agit d’un projet intéressant d’un point de vue technique, sur lequel les esprits imaginatifs peuvent venir s’éclater avec nous. Mais aussi parce qu’à travers ce projet, je veux vous présenter l’univers des systèmes répartis/distribués/redondés et des bases de données à très haute disponibilité – que tout directeur technique doit connaître un minimum.
Présentation du projet
Le but de ce projet est de faciliter la création de cluster-disque. Lorsque vous avez plusieurs serveurs qui doivent accéder aux mêmes fichiers, il est toujours délicat de mettre en place une architecture satisfaisante sans dépenser des sommes folles. Et pourtant, la moindre infrastructure Web présente plusieurs serveurs frontaux, qui doivent délivrer des contenus (images, vidéos, musiques) communs. Sans compter que ces différents serveurs doivent aussi pouvoir enregistrer de nouveaux fichiers, qui doivent être accessibles à toutes les autres machines.
Il existe plusieurs moyens de mettre des fichiers à dispositions de plusieurs serveurs :
- Installer un NAS, c’est-à-dire un serveur de fichiers. Mais si ce serveur tombe en panne, plus aucun fichier n’est accessible.
- Installer un SAN, qui prend souvent la forme d’une baie de stockage redondée. Mais les prix de ce genre d’installation grimpent très vite.
- Utiliser un service externe, comme Amazon S3, qui prend en charge les aspects complexes de la gestion des fichiers. C’est souvent une solution satisfaisante pour du Web, mais qui peut induire des latences dans les accès aux fichiers, et des coûts inutiles.
- Mettre en place un système de fichiers réparti, redondé et/ou distribué.
C’est dans cette dernière catégorie que se place FineFS. Il existe déjà des solutions qui s’emploient à résoudre ce besoin, qu’on peut répartir en 5 groupes :