FonShare : Le cloud appliqué aux téléchargements

Il y a quelques temps, j’avais posté un article sur l’arme ultime anti-Hadopi.

Apres mûre réflexion, j’ai abouti a un concept qui commence à prendre forme et qui devrait concrétiser les dires de mon précédent post.

Pour marier téléchargements privés et réseaux sociaux, il faut impérativement un serveur personnel fournissant du contenu. Un serveur FTP fait parfaitement l’affaire mais la fonera 2 semble être l’outil idéal pour valider le concept.

  • Prenez donc une fonera 2, branchez un disque dur et fournissez quelques fichiers a votre serveur FTP accessible sur le web.
  • Inscrivez-vous au service FonShare (pas encore déployé, prenez patience) et remplissez les informations concernant votre fonera.
  • Créez un groupe ou rejoignez un groupe existant.
  • Visualisez les fichiers de ce groupe et choisissez ceux que vous souhaitez télécharger,
  • Patientez pendant le téléchargement entre les foneras, puis profitez de vos nouveaux fichiers téléchargés.
  • Partagez avec vos autres groupes les nouveaux fichiers téléchargés.

Voici quelques schémas décrivant les détails techniques du projet.

Cloud Concept of groups between servers

Cloud Concept of groups between servers

Le service FonShare permet de créer des groupes de serveurs et de partager les fichiers entre ces serveurs.

File Sharing Concept between groups

File Sharing Concept between groups

Ainsi comme on le voit sur le schéma précédent, l’utilisateur de la Fonera 1, par l’intermédiaire du service FonShare,  a accès à l’ensemble des  fichiers des serveurs des groupes 1 et 2. Soit dans  l’exemple, 6 serveurs.

File Download Concept from one server to another one

File Download Concept from one server to another one

Lorsque l’utilisateur souhaite télécharger un fichier, il sélectionne le dit fichier a partir du service FonShare et lance le téléchargement. FonShare envoie une commande FTP aux 2 serveurs. Le premier pour envoyer le fichier au deuxième serveur, le second pour le recevoir. Le fichier transite alors d’une fonera à une autre, il n’y a aucun intermédiaire.

File Transfer Concept between servers

File Transfer Concept between servers

Ainsi un fichier transite d’un serveur privé à un autre, uniquement par des connexions privés, point a point. En fonction du nombre de groupes, du nombre d’utilisateurs dans chaque groupe et du nombre de fichiers sur chaque serveur, un utilisateur peut avoir accès à un très grand nombre de fichiers.

Prenons maintenant une hypothèse. Vous êtes utilisateur de FonShare et vous avez rejoint 3 groupes de 4 personnes en moyenne,  chacun mettant environ 50 Gigaoctets de données en partage. Vous avez alors un accès direct à une base de 3 x 4 x 50 Go de fichiers, soit quelques 600 Go tout de même. Rejoignez un groupe plus important et vous démultipliez la quantité de données accessibles.

Points positifs du service :

  • Connexion privée entre 2 serveurs, non visible de l’extérieur,
  • Les fichiers résident uniquement sur les serveurs personnels et ne sont transférés qu’entre les serveurs,
  • Les utilisateurs d’un groupe ne connaissent pas les informations de connexion des serveurs personnels des autres membres du groupe et n’ont aucun moyen de les connaitre,
  • Les accès aux autres serveurs personnels sont en lecture seulement, l’écriture est disponible uniquement sur son propre serveur,
  • Les transferts entre serveurs ftp sont rapides. Un fichier de 700 Mo est théoriquement transférables en moins de 2 heures à 100 Ko/s, moins de 25 minutes à 500 Ko / s.
  • Vous pouvez à tout instant rajouté un groupe ou supprimé un groupe.
  • Pas de trace.

Points negatifs :

  • Les transferts sont limités à la capacité d’upload des utilisateurs,
  • Le système est encore assez technique et ne peut pas etre utilisé par le quidam moyen,
  • Il faut avoir des amis et des amis de confiance,
  • Il faut des sources extérieures pour alimenter les serveurs personnels.
Publicités

Appeler un Web Service REST/JSON en .NET

Les Web Services REST avec le format JSON sont devenus en peu de temps un nouveau moyen d’implémenter des Web Services de manière simple (sans formatage XML et parsing) et orientés données.

Si la procédure de création de Web Services RPC ou REST et SOAP ou JSON en .Net est simplifiée grâce à WCF, et que l’appel d’un Web Service RPC/SOAP est quasi transparent pour le développeur, il n’en est pas de même pour la création du client en REST/JSON.

Ce petit post va vous permettre de mettre en place rapidement un client Web Service .NET avec REST/JSON. Je fais l’impasse sur l’implémentation serveur, je vous laisse vous référer aux différents liens placés en fin de billet.

  • Ajoutez une référence a votre Web Service dans votre projet VS et pointez sur votre URL de type : www.monsite.com/monservice.svc
    • Cet étape va générer votre client Web Service, mais surtout ce qui nous intéresse, les objets en transit,
  • Ajoutez JSON.NET dans votre projet afin de déserialiser vos données automatiquement,
  • Implémentez le code suivant :
Uri requestUri = new Uri("www.monsite.com/monservice.svc/users/5474");
WebRequest webRequest = WebRequest.Create(requestUri);
WebResponse webResponse = webRequest.GetResponse();
Stream response = webResponse.GetResponseStream();
StreamReader reader = new StreamReader(response);
Newtonsoft.Json.JsonSerializer jsonSer = new Newtonsoft.Json.JsonSerializer();
MyUser user = (MyUser) jsonSer.Deserialize(reader, typeof(MyUser));
  • Vous obtenez ainsi votre objet côté client, il ne vous reste plus qu’à en faire bon usage,
  • Vous pouvez également récuperer une liste ou un tableau d’objets avec le code suivant :
List<MyUser> usersList = (List<MyUser>)jsonSer.Deserialize(reader, typeof(List<MyUser>));

Je vous conseille fortement de créer une méthode générique avec 3 parametres (URL, type de résultat et résultat) afin de pouvoir réutiliser ce code a loisirs.

Update : Vous avez également la possibilité de ne pas utiliser JSON.NET avec le Serializer intégré dans .Net 3.5

DataContractJsonSerializer jsonSer = new DataContractJsonSerializer(typeof(List<MyUser>));
List<MyUser> usersList = (List<MyUser>)jsonSer.ReadObject(response);

Après quelques tests, il semblerait que le parser de MS soit le plus rapide. Cependant cette page semble donner plus d’informations concrètes :

%d blogueurs aiment cette page :