mardi 20 avril 2010

Quand on déploie une application sur Weblogic et que l’on veut requête cette application via un navigateur il faut utiliser l’URL suivante


Le nom de l’application étant le nom du package déployé ou du libellé précisé dans le descripteur associé au context root.

(weblogic.xml)



Pour l’exemple de notre application TestSession.war, l’URL de requêtage sera :


Si l’on veut utiliser une autre URL d’accès, voir plusieurs différente sur une même instance, il faut utiliser la notion de Virtual Host.

Le Virtual Host permet d’associer une adresse à une application particulière sur une instance ou un cluster.


 EXEMPLE

Nous allons réaliser un exemple avec l’application TestSession.war dans un environnement cluster.


Un cluster de deux instances est défini avec comme Listen Adresse localhost et port respectivement 7101, 7201. Un Apache avec le plugin Weblogic répartit la charge sur ces URL. On va définir un Virtual Host sur montestcluster targeter sur ce cluster et déclarer montestcluster dans le hosts. L’application sera déployée sur ce Virtual Hosts.

 DNS/hosts



Pour cela, il faut définir une résolution réseau dans votre fichier hosts (ou DNS) pour router le nom montestcluster vers le proxy Apache.

Sur windows sous C:\WINDOWS\system32\drivers\etc\hosts
127.0.0.1       localhost
127.0.0.1       montestcluster

Plugin Weblogic Apache



Sur le proxy Apache, il faut définir un filtre via le plugin Weblogic pour router tous les appels vers le cluster


VIRTUAL HOST

  
Créer un Virtual Host via la console Weblogic

${domaine}àEnvironmentàVirtual Hostà New


Name : VirtualHost-TestSession


${domaine}àEnvironmentàVirtual HostàVirtualHost-TestSessionàConfigurationàGeneral
Virtual Host Names: montestcluster


${domaine}àEnvironmentàVirtual HostàVirtualHost-TestSessionàTargets
cluster


 DEPLOIEMENT

Déployer l’application TestSession.war sur le Virtual Host en précisant dans l’application le context root à « \ »

(weblogic.xml)



${domaine}àDeploymentàInstallà${emplacement du WAR}à${fichier WAR}àNext


Virtual Hosts : VirtualHost-TestSession


Puis Finish

Et enfin activer : Start à Service all request


TEST

Le test avec le target sur le Virtual Host fonctionne :



Maintenant en targetant l’application sur le cluster, nous avons l’erreur suivante :



 Avec comme information dans le plugin :

Tue Apr 20 11:56:41 2010 <633612717574015> Connect returns -1, and error no set to 10035, msg 'Unknown error'
Tue Apr 20 11:56:41 2010 <633612717574015> EINPROGRESS in connect() - selecting
Tue Apr 20 11:56:41 2010 <633612717574015> Local Port of the socket is 2448
Tue Apr 20 11:56:41 2010 <633612717574015> Remote Host 127.0.0.1 Remote Port 7201
Tue Apr 20 11:56:41 2010 <633612717574015> created a new connection to preferred server '127.0.0.1/7201' for '/', Local port:2448
Tue Apr 20 11:56:41 2010 <633612717574015> URL::parseHeaders: CompleteStatusLine set to [HTTP/1.1 404 Not Found]
Tue Apr 20 11:56:41 2010 <633612717574015> URL::parseHeaders: StatusLine set to [404 Not Found]
Tue Apr 20 11:56:41 2010 <633612717574015> parsed all headers OK

vendredi 16 avril 2010


Un domaine Weblogic est un ensemble d’instances regroupé en cluster ou non dans lequel on déclare des ressources JEE comme des files JMS.


La notion de target ou cible de déploiement s’applique aux instances, clusters et serveur JMS.


Un serveur JMS étant le composant logiciel responsable du fonctionnement de l’infrastructure JMS. C’est une ressource co localisée sur une instance. Chaque instance pouvant recevoir (ou pas) un et un seul serveur JMS.


Les ressources JMS étant :

JMS Module
 Regroupement de ressources associées à des instances ou cluster.
Sub Deployment
 Regroupement de ressources au sein d’un même JMS module.
Ressources locales 
 Queue/Topic
Ressources distribuées
 Connection Factory/Uniformed Distributed Queue/Foreigne Server

Le JMS Module est un groupe d’association constitué d’instances et/ou de clusters. Les ressources déclarées dans ce module doivent être targeter sur les serveurs JMS des instances ou cluster appartenant au groupe du JMS module (sous peine d’erreur lors de la création de la ressource).



Au sein d’un même JMS module, on peut regrouper les ressources par SubSeployment afin d’assurer un couplage lâche sur le domaine (un SubDeployment par cluster, par exemple). Un SubSeployment étant targeter sur les clusters ou serveur JMS des instances appartenant au JMS module.

Les ressources type queue ou topic ne peuvent être targeter que sur un serveur JMS unique, alors que les connection factory, uniformed distributed queue destination et foreigne server peuvent être associé à des clusters .

Conseil :

ü Créer un serveur JMS par instance.


ü Créer un JMS module pour regrouper les cibles de target commun. Choisir les groupes par critère techniques (ensemble de cluster ou ensemble d’instance stand alone) ou fonctionnel (ensemble d’instance partageant les mêmes applications).

ü Créer des SubDeployment sur les clusters dans le cas de cluster et créer des ressources associées à ce SubDeployment (Distributed Queue, etc …)

ü Créer des SubDeployment sur des serveurs JMS dans le cas d’instance hors cluster, et associer les ressources créées sur les serveurs JMS des instances (ne pas prendre l’instance comme cible).

ü Prendre des noms JNDI sans caractère spéciaux avec un prefix en « jms/»

ü Dans le cas d’un Store type JDBC, créer un datasource par JDBCStore non XA.

ü Préférer déclarer les ressources JMS via la console (system modules) plutôt que le déclarer dans les applications via les descripteurs JEE (application modules) car non visible pour le monitoring dans ce cas.



mercredi 14 avril 2010

Pour valider une plateforme JEE vous devez vous assurer que toutes les couches traversées fonctionnent correctement. La vérification passe par la validation des versions utilisées, le paramétrage, les testes techniques et fonctionnels, les tests de charges associés. Une architecture sécurisée est avant tout une architecture scalable et redondante afin d’anticiper les charges et incidents.


Une check liste peut être établit afin de ne pas oublier certaines parties de l’architecture ou point technique qui pourrait faire écroulé l’édifice.

ü  Socle de version en accord avec le support
ü  Validation réseau
ü  Tuning OS
ü  Tuning JVM
ü  Architecture
ü  Tuning WLS
ü  Monitoring
ü  Application
ü  Validation des composants externes
ü  Bench
ü  Formation des équipes en charge de la plateforme

Pour isoler les risques, vous devez passer au préalable par une phase d’industrialisation de plateforme afin de sécuriser tous les éléments que vous allez mettre en place dans votre architecture.

Le fait de définir des briques de développements validés et maitrisés par tous les intervenants peut par exemple rendre plus fluide la phase de validation. De même que l’utilisation de scripting normalisé ou l’utilisation d’une virtualisation peut éviter des erreurs dans la réplication des environnements, etc ….

VERSIONS

Vous devez vous assurer que le socle de version est en concordance avec le support éditeur. Cela peut vite devenir un casse-tête quand plusieurs produits sont interdépendants avec des contraintes de version forte.

Il est en général recommandé de prendre les dernières versions pour embarquer un maximum de correctif et d’évolution, mais renseignez-vous sur la stabilité des nouveautés auprès des supports respectifs ou réalisés des POC.

Le plus simple étant d’établir un socle validé en interne dans le cas de l’industrialisation si la structure le permet.

RESEAU

Les problèmes pouvant intervenir sur cette couche étant souvent difficile à isoler et analyser, faites intervenir des experts sur le sujet. Le cas le plus courant étant une interface en half duplex ou un mélange d’interfaces sur une même machine.

OS

Assurer vous que les paramètres systèmes sont correctement positionnés pour un serveur d’applications. En effet, le système vient avec un paramétrage par défaut qui doit convenir avec toute sorte d’application. Il faut donc modifier cette partie pour avoir de meilleurs temps de réponse et éviter certains blocages. Le plus courant étant le TCP_TIME_WAIT (partie TCP) et le nombre de file descripteur.

Valider donc cette partie avec un expert Système en prenant en référence le guide de tuning proposé dans les documentations éditeur comme point de départ.

JVM

La validation de la JVM passe d’abord par sa version. Certaines nécessitent des patches OS, d’autres ne sont pas supportés.

Valider ensuite le sizing mémoire par rapport à la machine et les options de GC à utiliser pour éviter les contentions et dysfonctionnement (GC non approprié, taille mémoire trop petite pour la charge utilisateur ou trop grande par rapport à la mémoire physique de la machine).

Concernant le JIT, toujours utiliser la version serveur qui est dédiée à un environnement de production.

ARCHITECTURE

Assurer vous que l’architecture déployée est scalable, car en cas de problème le mode multiinstance permettra d’assumer des défaillances sur une non tenu de charge ou des interruptions de service.

Vérifier en cas d’utilisation de cluster que les composants utilisés par celui-ci fonctionnent correctement et réaliser des testes techniques (validation des load balancing, failover/failback, dialogue cluster, etc …).

WEBLOGIC

Le tuning Weblogic n’est pas à proprement parler un tuning, mais plutôt un sizing. En effet si celui-ci est sous dimensionnés c’est la plate-forme totale qui sera sous exploitée. Inversement si les paramètres sont trop lâches, c’est trop de ressources déclenchées qui vont s’exécuter et écrouler la plate-forme.

On peut par contre jouer sur les pools ou cache pour obtenir des gains en temps de réponse, mais ces temps sont directement imputables au temps d’exécution JAVA du code applicatif et du backend (excepté les situations de lock).

La 1er chose à valider est le mode de fonctionnement Weblogic. Toujours prendre un domaine en mode PRODUCTION, jamais en mode DEVELOPPEMENT. En effet, ce mode spécifique aux modifications répétées de l’application permet de prendre ceux-ci en compte automatiquement. Les mécanismes mis en jeux sont trop couteux pour un environnement de production en charge et peuvent faire écroulé les temps de réponse.

·         Le mode de déploiement est également important. Assurer vous que les applications sont précompilées et que le mode de déploiement est adéquat (stage/external stage/side by side)

·         Rationaliser les logs générés par le serveur pour éviter trop d’écriture et mieux exploiter leurs contenus.

·         Mettre en place des procédures pour être alertes en cas de défaillance de certaines ressources types threads ou datasource.

·         Tailler vos pools pour assurer la charge.

·         Valider les différends timeout

 MONITORING

Assurer vous que la plate-forme est correctement monitorer afin de pouvoir effectuer des ajustements sur certains paramètres en bench ou en production. Cela permet également d’anticiper les problèmes et faire du capacity planing

APPLICATION

Mettre en place des outils de profiling dès la phase de développement pour détecter à la source les problèmes. Donner des recommandations de développement pour mieux coller à l’architecture finale. Penser à définir certains timeout non prévue par les composants d’infrastructure (timeout http de dialogue externe, etc …). Effectuer des bench avec du profliling pour s’assurer que l’application ne rencontre pas de problème en charge (et les corriger lorsqu’ils sont détectés). Précompiler les packages JEE résultants.

 BACKEND

Validation des composants externes (DataBase, LDAP, etc)

BENCH

Effectuer des tests pour valider l’architecture de production sur une plateforme dédiée à l’identique ou s’en approcher en réalisant plusieurs types de scénario couvrant un maximum la partie fonctionnelle. Les tests pourront être :

Fonctionnel
Pour valider que la plateforme réponde bien à la demande fonctionnelle.
De charge
Pour valider que la plateforme va tenir la charge de production.
De non-régression
Dans le cas d’une plate-forme mise à jour, valider que celle-ci n’a pas subit régression par rapport à la version d’avant
Aux limites
Voir jusqu’où on peut aller (capacity planing)
De vieillissement
Voir s’il n’y a pas de fuite mémoire
De robustesse
Voir le comportement de la plate-forme en cas de panne ou d’incident dégradant la plate-forme.

AUTEUR

Ma photo
Carrières Sur Sein, Yvelines, France
Consultant Oracle (Ancien consultant BEA depuis 2001), je m’occupe des expertises sur les produits Oracle : SOCLE (Weblogic, Coherence, JRockit) SOA (Service Bus, SOA Suite, BPM)
MON CV

LABEL 3D

Blogumulus by Roy Tanck and Amanda Fazani

LABEL CLOUD

MAP

Locations of visitors to this page

AUTRES BLOG

LIVRES

MEMBRES