IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

[Serveur][Optimisation]Mina ?


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 84
    Par défaut [Serveur][Optimisation]Mina ?
    Bonjour,

    Je surfais sur le forum, et je tombe sur quelqu'un qui cherche à optimiser son serveur Java.

    A la fin du topic, on l'oriente vers une solution utilisant une lib d'apache appelé Mina. Actuellement, je travaille justement sur du développement de server en Java, je me jette donc sur le lien vers le site d'appache (http://directory.apache.org/subprojects/network/). J'ai donc commencer à regarde commant cette API fonctionne...

    J'ai bien compris que ça permettait de faciliter grandement la création d'un serveur, mais je n'ai pas compris en quoi cette API était plus performante comparée à un serveur à base de thread et d'écoute sur les socket ?

    Y a t'il quelque personne qui pourrait éclairer ma lanterne ?

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Par défaut
    Salut,

    Tu peux déjà regarder par ici (fr) et par là (en) pour savoir pourquoi un serveur basé sur java.nio est plus performant.

    Bon courage.
    Personnellement, je trouve Mina très pratique.

  3. #3
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut Re: Mina ???
    Hello,

    Citation Envoyé par jeje99
    Y a t'il quelque personne qui pourrait éclairer ma lanterne ?
    je peux essayer...

    lorsque tu fais un serveur, tu as en général 1 thread par client connecté... si ton serveur doit gérer 5000 clients simultanés, cela fait 5000 threads qui tournent +/- en même temps... Lorsqu'un thread laisse la main à un de ses congénères, le système doit rétablir le "contexte" du thread qui reprend la main... ce qui prend un temps important... et avec 5000 threads, le système ne fait pratiquement plus que ça, ce qui laisse peu de temps pour le "vrai" travail...

    Avec java.nio (ou Mina), un seul thread s'occupe de tous les clients...

    vois ça comme un standardiste téléphonique, qui gère plusieurs appels en même temps... dès qu'un appel arrive sur sa station, et si le standardiste est libre, il effectuera son travail... si plusieurs appels arrivent en même temps, le standardiste va les traiter les uns après les autres...

    en résumé:
    - la vieille méthode, c'est de mettre un standardiste (thread) par ligne téléphonique (client)
    - la nouvelle méthode, c'est de mettre un standardiste pour toutes les lignes téléphoniques de l'entreprise... ça coûte moins cher


  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 84
    Par défaut urais
    Mmm si je comprend bien (dites moi si j'ai bien compris). Le problème de performance est lié à la machine virtuelle, les traitements multitaches sont trop lourd pour une gestion de socket.

    La solution a donc été de faire une sorte d'ordonnanceur dédié à l'échange de flux donc plus optimisé, j'ai bon ?

    Si j'ai bien compris aussi, dans cette api, on utilise un nouveau type de donnée pour les échanges : la classe Buffer à la place des inputStream, outputStream ou autre Reader ou Writer.

    Autre question, est - ce que cette api, implémente une surcouche de protocole au dessus d'une socket TCP. Par exemple, si j'upgrade un serveur vers java.nio. Aurais je besoin de modifier les clients existants programmés en d'autre langage (vb, c, c++, pyton) ?

    Sinon, quelqu'un a t'il des benchmarchs sérieux sur les performances de cette api ?

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Par défaut Re: urais
    Hello,

    Citation Envoyé par jeje99
    Mmm si je comprend bien (dites moi si j'ai bien compris). Le problème de performance est lié à la machine virtuelle, les traitements multitaches sont trop lourd pour une gestion de socket.
    c'est plutôt lié au fait que le multithread est gourmand en ressources. Les socket sont aussi utilisés avec java.nio (classe Socket), mais de manière indirecte (avec les Selector et les SelectionKey), et surtout non bloquant: si tu fais un "read" sur un socket standard, cela bloque le thread courant jusqu'à réception de données.
    avec java.nio, le read est indirect, lorsque la méthode "aSelectionKey.isReadable()" renvoie true cela signifie que des données sont disponibles immédiatement en lecture (contenues dans le buffer de la socket)

    Citation Envoyé par jeje99
    La solution a donc été de faire une sorte d'ordonnanceur dédié à l'échange de flux donc plus optimisé, j'ai bon ?
    vi, c'est ça

    Citation Envoyé par jeje99
    Si j'ai bien compris aussi, dans cette api, on utilise un nouveau type de donnée pour les échanges : la classe Buffer à la place des inputStream, outputStream ou autre Reader ou Writer.
    non, pas du tout
    les Buffer sont là pour simplifier la vie... avec java.nio, tu ne fais qu'envoyer des tableaux de byte, et ByteBuffer est une sorte de liste de byte que l'on peut convertir en tableau. Mais tu pourrais très bien t'en passer. En arrière-plan, les données sont aussi envoyées par des InputStream/OutputStream

    Citation Envoyé par jeje99
    Autre question, est - ce que cette api, implémente une surcouche de protocole au dessus d'une socket TCP. Par exemple, si j'upgrade un serveur vers java.nio. Aurais je besoin de modifier les clients existants programmés en d'autre langage (vb, c, c++, pyton) ?
    selon moi, je dirais non. il ne s'agit que d'une manière différente de gérer les clients, mais les données que tu envoies restent sous ton contrôle... enfin, faut voir

    Citation Envoyé par jeje99
    Sinon, quelqu'un a t'il des benchmarchs sérieux sur les performances de cette api ?
    c'est pas vraiment un bench, mais plutôt un comparatif:
    http://www.projectomega.org/article.php?lg=fr&php=oreilly_nio1&p=3
    Développer un routeur complètement fonctionnel basé sur le multiplexage d'E/S ne fut pas simple. Cela nous a pris trois mois pour obtenir la bonne architecture. Une partie de ce temps nous a permis d'apprendre un nouveau modèle d'E/S peu familier. L'autre partie fut passé à comprendre la complexité qui en découlait. Enfin, nous étions assez contents du résultat. Avec nos benchmarks, le routeur était capable de traiter 10 000 clients sans perte significative de débit. Par comparaison, nous avons implémenté une version basée sur le modèle un-thread-par-client, qui ne pouvait pas servir 3 000 clients, avec une chute significative du débit au fur et à mesure de l'augmentation du nombre de clients.


  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 84
    Par défaut
    Merci bien pour toutes ces informations, ça à le mérite d'être clair !

    Un petit résolu et zoup c'est parti pour le développement à l'aide de java.nio ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XSLT] Prémunir serveur contre surcharge - optimisation XSL
    Par thibaut06 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 22/11/2006, 18h51
  2. Compiler du java en natif & Optimisation serveur socket
    Par Skreo dans le forum API standards et tierces
    Réponses: 32
    Dernier message: 09/07/2006, 16h31
  3. Optimiser les images JPEG sur serveur
    Par camboui dans le forum Imagerie
    Réponses: 7
    Dernier message: 31/05/2006, 10h08
  4. [Apache] Serveur apache 2 (optimisation)
    Par HwRZxLc4 dans le forum Apache
    Réponses: 8
    Dernier message: 11/05/2006, 22h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo