lundi 19 mars 2012

Commmunication TCP en Java

<<L'observation scientifique est toujours une observation polémique. >>
Gaston Bachelard



Ceci est un tutoriel permettant de concevoir simplement une communication TCP en Java.
Le code est bien commenté et bien indenté ; j'espère qu'il sera compris avec facilité.

Pour en savoir plus sur le protocole TCP, vous pouvez vous référer à l'article TCP/IP.

Le programme serveur se présente ainsi:

import java.io.*;
public class ServeurTCP {
    public static void main(String[] args)throws Exception {
       
        //S'attacher à un port
        ServerSocket ss = new ServerSocket(7500);
        //Attendre les connexion des clients
        System.out.print("Attente connexion...");
       
        /*
         * NB : La methode accept() bloque le programme jusqu'à ce
         * qu'une connexion soit établie
         */
        Socket s = ss.accept();//Bloquant
       
        //Création du flux binaire de lecture
        InputStream is = s.getInputStream();
        //Création du flux binaire d'écriture
        OutputStream os = s.getOutputStream();
       
        /*
         * NB: La nature des filtres dépend de la nature de
         *        l'information initiale 
         */
        //Filtre de lecture de texte
        BufferedReader tmp = new BufferedReader(new InputStreamReader(is));
        //Filtre d'ecriture de texte
        PrintWriter pw = new PrintWriter(os,true);       



        
        //Lecture de la chaine envoyée par le client
        String recep = tmp.readLine();

        //Je me demande bien ce que fait cette ligne ici
        recep = new StringBuffer(recep).reverse().toString();
       
        //Renvoi au client
        pw.println(recep);    
    }
}

Et de son côté, le client TCP (beaucoup plus simple) s'écrit juste en ces quelques lignes:
NB: Je crois qu'il n'y a rien à commenter sur le client !

import java.net.*;
import java.io.*;
public class ClientTCP {
    public static void main(String[] args)throws Exception {
        //Sattacher à un port     (ici peut être?)
        Socket s = new Socket("localhost", 7500);
       
        InputStream is =  s.getInputStream();
        OutputStream os=s.getOutputStream();
       
        BufferedReader tmp = new BufferedReader(new InputStreamReader(is));
       
        PrintWriter pw = new PrintWriter(os,true);
       
        pw.println("Hello World !");
        System.out.print("Reçu du serveur: "+tmp.readLine());
    }
}

Voilà, c'est rien que ça !
Vous avez réussi à implémenter une communication fiable entre un client et un serveur.
C'est fou ce qu'on nous fatigue pour des choses aussi banales ! ;-)
N'hésitez pas à poster vos commentaires et éventuellement de contribuer à ce blog.
Sinon "enjoyez !".

vendredi 10 février 2012

Le cloud computing expliqué

<< Etre expert c'est tout l'art s'apprendre une science à des vétérans tout en étant un débutant >> Jdan Noritiov

.

.

.

Depuis quelques années, on entend souvent parler de cloud computing sans qu'on sache vraiment de quoi il s'agit.

Voici quelques explications qui, je l'espère, vous permettront de lever certaines zones d'ombre sur le cloud computing..

Pour commencer, Cloud = nuage

Et donc le «cloud computing »  serait l’ «informatique des nuages » ou plutôt l’«informatique dans nuages ».

 Voici donc à quoi ressemble le cloud computing:


 

Voilà c’est tout – vous avez tout compris !!! :-)
Compris ??? … Pas vraiment !
En fait cette terminologie (ou cette technologie, concept… tout ce que vous voudrez) va plus loin.
Le cloud computing se définirait comme la délocalisation de son infrastructure informatique sur des serveurs distants.

Aaaaah, là ça devient intéressant !

Mais oui, on fait tous du cloud sans vraiment le savoir. Que croyez-vous faire lorsque vous vous connectez à votre webmail (hotmail, yahoo, gmail…) ? … … « clouder »  bien sûr.

Evidemment on ne peut parler de cloud sans faire allusion au monde de l’entreprise puisque c’est là qu’on s’aperçoit de son véritable impact … sur les dépenses bien sûr. Ah sacrées entreprises !!!
 Imaginez une entreprise qui ne se soucierait plus de son infrastructure informatique. Aucun souci de gestion, de maintenance, de stockage, d’espace … et donc une forte réduction de la CAPEX

Plaçons nous maintenant du côté des fournisseurs de service cloud (genre SSII ou autres). Oui, on parle de service maintenant ! Et ces services peuvent être fournis à la même manière qu’EDF nous fournit l’électricité. Ces entreprises possèdent un grand nombre de serveurs et peuvent nous (entreprises et/ou particuliers) procurer un espace selon nos besoins. D’autres aussi nous permettent d’accéder à des programmes via le réseau…

Ok ! Mais qu'est-ce-que j'y gagne dans tout ça ?


Euh doucement ! Les entreprises ou moi en tant que particulier ?
Oui parce que tout ceci n’a pas un très grand impact chez un particulier. Allons plutôt voir ce qui se passe chez les entreprises clientes.

-  Comme cité plus haut, le principal avantage est lié à la réduction de la CAPEX et de l’OPEX.

-  Vient ensuite ce qu’on appelle la « servicisation » des ressources informatiques car les entreprises n’auront plus qu’à faire appel aux services informatiques d’autres entreprises.

-  En outre, on peut aussi noter que les ressources (programmes, fichiers…) ne sont plus sur un terminal local. On eut donc y accéder via tut terminal connecté au réseau internet. Ceci permet d’assurer la tolérance aux pannes.

-  La flexibilité de l’espace de stockage. Les entreprises se verront attribuer un espace sur mesure. On parle alors de stockage à la demande.

Mais LA question d'argent, de money, de diñero est bien le principal soucis. 
Aaaah le capitalisme !!!
On peut se faire une idée des économies que peuvent réaliser une entreprise via le schéma suivant. Entre nous, je crois que ça vaut vraiment le coup.

[source: www.wikipedia.org]


Mais comment utiliser le cloud ?

Nous y voilà enfin !
On note trois modes d’utilisation pour le cloud computing:
Infrastructure as a Service (IaaS) :
Dans un tel mode, seules les ressources sont décentralisées. On parle alors de virtualisation des ressources. Ce model demeure le plus répandu. Le fournisseur  s’assure de la partie stockage, de la maintenance mais aussi que les ressources soient prêtes à êtres utilisées (via des machines virtuelles). Le client pour sa part, se charge de l’administration des données, de la mise en marche/arrêt des services…
En guise d’exemple, on a AmazonEC2, Orange Open Cloud…
-   Platfrom as a Service (PaaS):
Ce mode a pour but objectif la mise en place d’environnements de développement spécifiques. Très utile pour les travaux de développement. Le fournisseur met en place des environnements afin que les clients puissent y accéder pour développer des applications, effectuer des tests… Le fournisseur ne se contente plus seulement d’offrir des espaces de stockage mais offre en même temps une plateforme logicielle (middleware) afin de faciliter les travaux des informaticiens.
On peut citer Google Apps, Microsoft Azure…
-   Software as a Service (SaaS):
Dans le mode SaaS, l’utilisateur ne se soucie ni des ressources matérielles ni de l’infrastructure logicielle. En effet, le client n’a plus besoin d’acheter les logiciels (qui coûtent parfois très chers), il les loue.   Ce mode est celui qui génère le plus de revenus. Normal, avec les start-up qui naissent tous les jours. L’avantage pour les clients est qu’ils n’ont plus à se soucier des taches d’installation souvent fastidieuses de même que les mises à jour ; tout relève du domaine du fournisseur.
Exemple : Microsoft Exchange, Sharepoint

Voici un petit récapitulatif des différents modes présentés ci-dessus.
Mode
Utilisateur direct
Visibilité
SaaS
End user
+
PaaS
Développeurs
++
Iaas
Architecte réseau
+++

Autre chose : vous entendrez souvent parler de cloud privé, cloud public et de cloud hybride.
Mais comme ils sont compliqués ! Heureusement que je suis là   :-)
En fait on parle de cloud privé lorsque les ressources matérielles utilisées font partie du patrimoine de l’entreprise cliente ; de cloud publique lorsqu’elles (les ressources) ne font pas partie de leur patrimoine et enfin de cloud hybride lorsqu’une partie des ressources appartient à l’entreprise et une autre partie ne lui appartient pas.
C’est aussi simple que ça !


Mais qu’en est-il de la sécurité des données ?
Et voilà, c’est le point critique du cloud computing. Mais avant, je vous montre un excellent travail réalisé par le club de la sécurité de l’informationfrançais :


En effet, on peut se poser diverse questions du genre :
Où sont stockées mes données ?
Qui aura accès à mes données ?
Qu’arrivera t’il si nous arrêtons notre contrat ?
Mes données sont stockées pendant combien de temps ?
Et bien d’autres…

Avec les différentes lois sur la protection de la vie privée (dépendant de la zone géographique) un vrai problème de sécurité se pose.
Et bien la seule réponse qui tient la route est la suivante : Tout dépend de vos besoins en sécurité, du type de cloud vous souhaitez avoir…  C’est ce qu’on appelle une analyse de risques.
En tout état de causes, la sécurité est partagée entre le fournisseur et le client (tout dépend de leur niveau de contrôle – cf. figure ci-dessus) bien évidemment en mettant en place des mécanismes de contrôle d’accès et de chiffrement des données.
La migration ou le changement de cloud provider s’effectue grâce à un certain nombre d’APIs disponibles sur le marché. Cependant, il est conseillé d’utiliser des APIs standards telles que CDMI (Cloud Data Management Interface) ou encore OVMF (Open Virtual Machine Format) qui permettent l’interopérabilité entre les différents fournisseurs cloud.

Et voilà !
J'espère maintenant que vous aurez plus d'arguments quand vous entendrez parler de cloud computing.
N'hésitez pas à poser vos questions, critiquer, suggérer...


Références Bibliographiques

...