12 avril 2009

Vertical Scaling vs Horizontal Scaling

Vertical Scaling: également connu sous le nom de scaling up, cette technique consiste à ajouter plus de ressources matérielles à la même machine, en général en ajoutant plus de puissance processeurs (CPU) et de mémoire (RAM). Cette solution est :

  • Chère
  • Très facile à mettre en œuvre (en général, pas de changement nécessaire dans votre application)
  • Un seul point de défaillance (si serveur plante, que faire?)
Horizontal Scaling: également connu sous le nom de scaling out, cette technique consiste à ajouter plus de machines dans l'infrastructure (architecture), en général en ajoutant du matériel bon marché (comme ce bon vieil ordinateur sous votre bureau). Cette solution est :
  • Moins couteuse : du moins les dépenses sont plus linéaires
  • Difficile à mettre en place techniquement parlant (beaucoup plus difficile que la verticale), il faut que l'application supporte cette architecture
  • Beaucoup de points de défaillances possibles, il faut traiter élégamment les points de défaillance (avoir de la haute disponibilité avec de la redondance)
Avant de choisir, l'une ou l'autre des solutions, il faut se poser la question de savoir laquelle est la plus rentable. En effet, est-ce que le cout du matériel pour le vertical scaling est plus rentable que le cout d'un ingénieur et de son travail pour mettre en place la solution pour faire fonctionner de façon transparente l'horizontal scaling ? A vous de juger en fonction de vos contraintes (budgétaires ou autres) et de celles de votre projet (contraintes de cout, disponibilité, scaling, ...).

11 décembre 2008

Boîte à outils pour le développement

VersionDateDescription
1.0.006/12/2006Création de l'article.
1.0.117/02/2007Ajout du plug-in Lomboz.
Ajout de l'outils Gantt Project.
1.0.225/02/2007Ajout de l'add-on firebug pour firefox.
1.0.3
21/06/2007
Ajout du plug-in Mylyn.
1.0.4
08/08/2007
Ajout de l'extension Firebug YSlow.
1.0.5
11/12/2007
Ajout de Notepad++.
1.0.6
17/01/2008
Ajout de Launchy.
1.0.7
01/08/2008
Ajout de SyncBack, WireShark, HTTrack et Loop for Firefox
1.0.8
11/12/2008
Ajout de Todo List

Dans ce petit post, je vous indique les outils que j'utilise pour le développement Java et Web. Si vous avez d'autres outils très sympatiques, n'hésitez pas à m'en faire part.

  1. Eclipse
    • Checkstyle : Plug-in Eclipse permettant de vérifier le code Java pendant la sauvegarde des fichiers.
    • WST (Web Standard Tools) : Plug-in Eclipse permettant de développer et de déployer des applications Web. J'installe ce plug-in via l'update manager d'Eclipse.
    • Hibernate Tools : Plug-in Eclipse permettant de faciliter le travail lors des développements liés à la couche de persistance avec hibernate.
    • DBEdit ou QuantumDB : Plug-in Eclipse permettant de se connecter aux bases de données. Dommage que DBEdit ne soit plus maintenu car il était vraiment bien, je me suis donc rabattu sur QuantumDB.
    • XML Buddy : Plug-in Eclipse permettant d'éditer des fichiers XML et DTD.
    • Subclipse : Plug-in Eclipse permettant de se connecter à un serveur de gestion de configuration subversion.
    • TPTP : Plug-in Eclipse permettant de faire des tests, des mesures de performance et d'analyse de la mémoire des applications Java. J'installe ce plug-in via l'update manager d'Eclipse.
    • Mylyn : Plug-in Eclipse permettant d'avoir des contextes de travail afin de réaliser des tâches. Un contexte étant associé à un ensemble de fichiers, il est possible de switcher d'un contexte de travail à un autre en un simple clic. Ce plug-in permet également de se synchronizer avec des outils de bug tracking tels que Bugzilla, JIRA et TRAC.
    • Visual Editor : Plug-in Eclipse permettant de faire du développement Swing et SWT de façon graphique.
    • Lomboz : Plug-in Eclipse permettant de faire du développement de Portlets (JSR 168).
  2. Outils
    • Firebug : Add-on pour firefox permettant de débugger le JavaScript et le HTML, très utile dans le développement d'applications Web. Le site officiel ainsi que la documentation sont à l'adresse suivante : http://www.getfirebug.com/.
    • YSlow : Add-on pour firefox permettant d'évaluer les performances de votre site web selon les critères de mesures Yahoo. Le site officiel ainsi que la documentation sont à l'adresse suivante : http://developer.yahoo.com/yslow/.
    • Loop for Firefox : Add-on pour Firefox permettant lors du browsing sur le net de construire un PDF de la page en cours de visualisation et de fichiers présent sur le disque en un seul clic. Il permet aussi de construire un PDF complet par aggrégation des différents PDF. Je trouve cet outils très intéressant dans le cas d'une veille technologique : vous browser le net et lorsque vous tromber sur une doc intéressant vous l'ajoutez au PDF. Une fois que vous avez fini de browser le net, vous générez le PDF qui est la somme de toute les docs que vous avez trouvé intéressantes et du coup vous avez dans un seul fichier PDF toute votre base documentaire pour pouvoir travailler.
    • CoolRuler : Règle virtuelle, utile lors que l'on développe des intefaces graphiques afin de mesurer les dimensions des composants affichés.
    • Process Explorer : Un gestionnaire de tâches comme celui de Windows, mais en mieux, il permet de voir les accés au disque, les handles utilisés par les processus, changer le niveau de priorité de processus, ...
    • Notepad2 et Notepad++: C'est un notepad amélioré, après avoir utilisé les deux je préfère Notepad++.
    • TCPView : Pour connaître les ports utilisés par ses applications internet, TCPView gère la liste des ports sur TCP et UDP utilisés et les applications internet associées, ainsi que l'adresse des serveurs distants.
    • Launchy : C'est un utilitaire inspiré de quicksilver dont vous n’allez bientôt plus pouvoir vous passer. Sous Windows, il permet de lancer des applications et d’ouvrir des fichiers au clavier. Pour cela, rien de plus simple : vous appuyez sur la combinaison « Alt + Barre d’espacement » puis vous saisissez le nom de votre application ou de votre fichier. Au fur et à mesure de la saisie, Launchy vous propose les applications et les fichiers pouvant correspondre aux premières lettres écrites.
    • SyncBack : C'est un outils très simple à utiliser permettant de faire de la synchronisation et de la sauvegarde de répertoires. En plus, il est possible de faire de la planification de synchronisation. Je l'ai utilisé sur un projet d'architecture où je rédigé ma documentation en local et je planifiais des synchronisation le midi sur un serveur partagé et qui est backupé, cela a super bien fonctionné. J'ai lu de la documentation qui disait que cet outils permet aussi de faire de la synchronisation FTP, pour information, je n'ai pas utilisé cette fonctionnalité, je ne peux donc pas vous faire part de mon avis.
    • WireShark : C'est un utilitaire permettant d'analyser le traffic réseau d'une interface réseau. Cet outils est très utile dans le cas de développement de protocole mais aussi pour débugger des applications clients-serveur ou bien même des applications qui communiquent via HTTP.
    • HTTrack : C'est un aspirateur de site web. Cela vous permez d'aspirer un site web afin de pouvoir travailler hors ligne sur ce site web.
  3. Gestion de projet
    • Gantt Project : C'est projet opensource permettant de faire des diagrammes de gantt un peu comme les diagrammes de gantt MS Project (et c'est opensource donc c'est mieux).
    • Todo list : C'est un petit exe, permettant de gérer une liste de tâches avec la possibilité d'affecter des priorités, des dead lines, des risques, la progression, ... sur les tâches, de hiérarchiser les tâches et des exports vers différents format excel, texte, Gantt Project, ...

16 novembre 2008

GTalk sous linux

Grille des différents clients GTalk sous les différents OS: http://www.google.com/talk/otherclients.html. Pour le coup, je suis déçu car il n'existe aucun client capable d'envoyer des messages vocaux sous linux, ne parlons même pas de l'utilisation de la webcam.

19 octobre 2008

Passage à Ubuntu

Je me suis enfin décidé à lâcher mon vieux Windows 2K pour le remplacer par ubuntu et je ne vous cache pas que j'en suis ravi.

Ubuntu étant un fork de debian, il permet donc d'installer des paquets .deb, mais je suis aggréablement surpris car contrairement à ce que l'on m'avait dit, on peut également installer des .rpm. Afin de faire cela, il suffit d'installer le paquet alien qui permet la conversion RPM -> DEB et inversement. Alien supporte également d'autres format, il permet aussi d'installer directement des RPM et des DEB.

La documentation est disponible sur ubuntu : http://doc.ubuntu-fr.org/alien

25 septembre 2008

Tutoriel : Load balancing avec Apache et Tomcat

VersionDateDescription
1.0.026/09/2008Création de l'article.

I - Introduction


I-1 - Présentation
Lors de la mise en production d'une application internet ou intranet, il est fréquent de vouloir mettre en frontal un Apache HTTP Server devant un Tomcat. Cela permet une integration plus aisée et plus flexible que la simple utilisation d'un Tomcat. En effet, cela permet d'utiliser pleins de fonctionnalités d'Apache:
  • Re-écriture d'URLs;
  • Compression des flux HTTP (pour une meilleure performance);
  • Utilisation des mécanismes de caches HTTP (pour une meilleure performance);
  • Intégration d'un environnement de répartition de charge "Load Balancing", c'est ce que nous allons voir dans cet article.
I-2 - Qu'est-ce que le load balancing?
L'équilibrage de charge (parfois appelé répartition de charge ou en anglais load balancing) consiste à distribuer une tâche à un pool de machines ou de périphériques afin :
  • de lisser le trafic réseau, c'est-à-dire de répartir la charge globale vers différents équipements;
  • de s'assurer de la disponibilité des équipements, en n'envoyant des données qu'aux équipements en mesure de répondre, voire à ceux offrant le meilleur temps de réponse.
Ce type de mécanisme s'appuie sur un élément, appelé répartiteur de charge (en anglais load balancer) chargé de distribuer le travail entre les différentes machines.

Les avantages du load balancing sont donc multiples:
  • Meilleur performance du service demandé: les requêtes sont réparties sur les différentes machines;
  • Tolérance aux pannes: si un serveur s'arrête, les nouvelles requêtes sont réparties sur le pool de serveurs restant;
  • Continuité du service en cas de maintenance: si un serveur est arrêté pour être maintenu, les nouvelles requêtes sont réparties sur le pool de serveurs restant en service.
L'infrastructure cible de load balancing est la suivante:
Infrastructure avec load balancing

Attention, il ne faut pas confondre load balancing et clustering. Le load balancing consiste à répartir de la charge de travail sur un pool de serveurs. Le clustering consiste à avoir une réplication de l'état des objets sur tous les noeuds du cluster. Une infrastructure en mode clustering ressemble au schéma suivant:
Infrastructure avec load balancing et clustering de sessions

II - Configuration utilisée

Pour ce tutoriel (mise en place du load balancing sans clustering), voilà la configuration que j'ai utilisée:
III - Installation

III-1 - Installation d'Apache HTTP Server
  • Lancez l'installeur du serveur HTTP et laissez-vous guider, choisissez le répertoire d'installation (par exemple D:\prod-apps\apache2.2.9).
III-2 - Installation d'Apache Tomcat
  • Dé-zippez le fichier .zip précédemment téléchargé dans un répertoire (par exemple D:\prod-apps\apache-tomcat-x.y.z-node1)
  • Dé-zippez une seconde fois le fichier .zip précédemment téléchargé dans un répertoire (par exemple D:\prod-apps\apache-tomcat-x.y.z-node2)
Au terme de cette installation, nous avons 2 installation de tomcat, une pour chacun des noeuds du pool de serveurs.

III-3 - Installation du Connecteur mod_jk
  • Copiez le fichier mod_jk-1.2.26-httpd-2.2.4.so dans le répertoire D:\prod-apps\apache2.2.9\modules
  • Renommez ce fichier en mod_jk.so
IV - Configuration

IV-1 - Configuration du premier noeud tomcat (apache-tomcat-x.y.z-node1)
  • Editez le fichier D:\prod-apps\apache-tomcat-x.y.z-node1\conf\server.xml, et remplacez tous les numéros de ports pour avoir des numéros en 9XXX ainsi le numéro de port 8005 devient 9005, 8080 devient 9080, 8443 devient 9443, 8009 devient 9009, ...
  • Positionner l'attribut jvmRoute de l'élement Engine à node1.
  • Sauvegardez et fermez.
IV-2 - Configuration du second noeud tomcat (apache-tomcat-x.y.z-node2)
  • Editez le fichier D:\prod-apps\apache-tomcat-x.y.z-node2\conf\server.xml, et remplacez tous les numéros de ports pour avoir des numéros en 10XXX ainsi le numéro de port 8005 devient 10005, 8080 devient 10080, 8443 devient 10443, 8009 devient 10009, ...
  • Positionner l'attribut jvmRoute de l'élement Engine à node2.
  • Sauvegardez et fermez.
IV-3 - Configuration du connecteur mod_jk
  • Editez le fichier D:\prod-apps\apache2.2.9\conf\httpd.conf, et ajoutez les directive suivantes à la suite des directives LoadModule:
  • [...]
    LoadModule jk_module modules/mod_jk.so

    JkWorkersFile "D:/prod-apps/apache/apache2.2.9/conf/worker.properties"
    JkLogFile "D:/prod-apps/apache/apache2.2.9/logs/mod_jk.log"
    JkLogLevel warning
    JkMount / loadbalancer
    JkMount /* loadbalancer

    [...]
    httpd.conf
  • Enregistrez et fermez.
  • Créez un fichier D:\prod-apps\apache2.2.9\conf\worker.properties avec le contenu suivant:
  • ps=/
    #La liste des tomcat qui rentre dans notre load-balancer, plus l'alias sur le load-balancer
    worker.list=loadbalancer,node1,node2

    #La config du load-balencer
    worker.loadbalancer.type=lb
    worker.loadbalancer.balanced_workers=node1,node2

    #Le premier tomcat
    worker.node1.type=ajp13
    worker.node1.host=127.0.0.1
    worker.node1.port=9009
    worker.node1.lbfactor=10

    #Le second Tomcat, attention soit l'hôte soit le port doivent différés
    worker.node2.type=ajp13
    worker.node2.host=127.0.0.1
    worker.node2.port=10009
    worker.node2.lbfactor=10
    worker.properties
  • Enregistrez et fermez.
V - Lancement des serveurs et test
  • Démarrez votre premier noeud tomcat.
  • Une fois le premier noeud démarré, il doit être accessible sur l'URL http://[hostname]:9080
  • Démarrez votre second noeud tomcat.
  • Une fois le second noeud démarré, il doit être accessible sur l'URL http://[hostname]:10080. Il se peut que le seveur n'arrive pas à démarré si les numéros de port ont mal été configuré et qu'un port déjà ouvert soit utilisé.
  • Démarrer ou re-démarrez votre serveur Apache.
  • une fois le serveur Apache démarré, il doit être accessible sur l'URL http://[hostname]. Sur cette URL le contenu du serveur tomcat doit être visible.
  • Faites des tests en stoppant, un seuveur tomcat (l'application doit toujours être accessible via le second tomcat), puis en stoppant les 2 serveurs tomcat (l'application ne doit plus être accessible), puis redémarrez un tomcat (l'application doit de nouveau être accessible).
VI - Conclusion

Les avantages du load balancing sont nombreux: maintenance, continuité du service en cas de panne d'un serveur, répartition de la charge de travail sur les différents serveurs, ...
L'utilisation des sticky sessions (affinité de sessions) implique qu'un utilisation ayant une session active travaillera toujours avec le même serveur. Cela à l'avantage, d'alléger l'infrastructure car il n'est pas nécessaire de mettre en place du clustering (avec de la réplication de sessions) car c'est lourds à mettre en oeuvre et cela à un cout en terme de réplication de session (surcharge réseau lié à la réplication, plus il y aura de noeuds plus la réplication sera couteuse, ...). Le désavantage est que sans clustering, si un utilisateur travaille avec un serveur et que celui-ci s'arrête (panne, arrêt pour maintenance, ...), l'utilisateur perdra sa session. Cela peut-être problématique pour certaines applications, mais dans la majeur partie des cas cela ne l'est pas. C'est donc à vous de voir en fonction de vos besoins et de vos contraintes.

VII - Bibliographie
Sur le même thème:

15 août 2008

Cours : Design Patterns

VersionDateDescription
1.0.011/07/2008Création de l'article.
1.0.130/07/2008Ajout du cours sur le design pattern de Singleton.
1.0.2
15/08/2008
Ajout du cours sur le design pattern de Factory Method

Ensemble de cours présentant des design patterns accompagné d'exemples illustrés en Java :
  • Design Patterns créationnel
  • Design Patterns structurel
    • Adaptateur (Adapter)
    • Pont (Bridge)
    • Objet composite (Composite)
    • Décorateur (Decorator)
    • Façade (Facade) - Voir le cours
    • Proxy (Proxy)
  • Design Patterns comportemental
    • Chaîne de responsabilité (Chain of responsibility)
    • Commande (Command)
    • Observeur (Observer)
    • Visiteur (Visitor)
  • Design Patterns J2EE

29 avril 2008

Tutoriel : Développer des EJB 3.0

Je viens trouver un tutoriel expliquant comment faire des EJBs 3.0. Ayant fait des EJBs 2.0 dans le passé, j'ai trouvé que l'essentiel était présent dans ce tutoriel : Tutorial : développer des EJB 3 avec Eclipse et JBoss.

Notez que les liens suivants sont aussi pas mal:

  • EJB 3.0 Tutorial : Tutoriel de JBoss illustrant chacune des fonctionnalités EJB 3.0.
  • Patterns J2EE / EJB : Présente les design patterns J2EE à mettre en œuvre pour faire une application fondée sur des EJBs.