La plupart présentent toutefois des inconvénients majeurs par rapports à nos besoins qui sont sommes toute assez simples. Soit les fonctionnalités ne sont pas celles qu'on attend, soit le coût d'installation ou de maintenance semble exagéré.

Choix techniques

La philosophie initiale de FineFS se rapproche un peu de celle de MogileFS. Ce n'est pas un système de fichiers au sens habituel du terme (comprendre compatible POSIX), mais une infrastructure logicielle qui permet de partager des fichiers entre plusieurs machines. Par contre, la réalisation technique est complètement différente.

Quelques contraintes ont guidé les choix techniques :

  • La lecture de fichiers doit être la plus rapide possible => on recopie les fichiers en local sur tous les serveurs.
  • La cohérence des données est importante, mais sans contrainte de temps réel => on utilise le paradigme de l'eventual consistency.
  • Le système doit être simple et rapide à développer et bien s'intégrer dans un environnement orienté Web => le fonctionnement repose sur des outils standards, stables et connus (xinetd, crontab), le développement est fait en PHP.

La réalisation technique est en partie inspirée des principes de Dynamo et Cassandra, des bases de données créées respectivement par Amazon et Facebook.
Pour faire simple, les serveurs (ou "noeuds") d'un cluster sont placés dans une boucle au sein de laquelle chaque serveur réplique ses données vers le serveur suivant. Mais le danger est alors qu'un fichier un peu gros prenne beaucoup de temps à faire le tour de la boucle. C'est pour cela que nous avons mis en place une stratégie de réplication en 2 temps :

  1. Dès la création (ou la mise-à-jour, l'effacement, le renommage) d'un fichier, un petit message fait les tour du cluster pour prévenir rapidement tous les noeuds.
  2. De manière asynchrone, un programme s'exécute sur chaque noeud, pour copier vers le noeud suivant le contenu des nouveau fichiers.

Pour en savoir plus

Je vous conseille d'aller jeter un oeil sur les liens suivants :

N'hésitez pas à participer, soit sur le groupe de discussion, soit en testant le logiciel, soit en proposant des amélioration de code.
Et si vous cherchez un poste intéressant en développement web, au sein duquel vous aurez des responsabilité sur FineFS, contactez moi ! ;-)

Et le futur ?

Nous avons de nombreuses idées d'améliorations pour FineFS. Nous n'en sommes qu'aux prémisses de ce projet. Pour commencer, nous allons travailler sur la souplesse d'administration, pour faciliter l'ajout de noeuds à un cluster, ou la création de passerelles entre les clusters. Ensuite, nous allons permettre l'utilisation de noeuds "partiels", qui ne contiennent pas l'intégralité des données du cluster, mais qui gardent en cache les fichiers les plus demandés.

Une des pistes d'amélioration les plus intéressantes sera la possibilité de rechercher des fichiers à partir de leurs méta-données et non pas uniquement par leur nom. Les fichiers peuvent déjà comporter des méta-données, des informations textuelles simples sous forme de paires clé-valeur. Permettre de de faire des recherches sur ces données permettrait de se passer de bases de données relationnelles dans certains cas, ce qui pourrait accélerer les applications. À ce sujet, je vous suggère d'aller lire l'article Is the relational database doomed. Il présente assez bien pourquoi les bases de données non relationnelles reviennent à la mode, principalement sur les grosses architectures Web de "cloud-computing".