GUIDE_MVS_JAVA dans CICS _LBP
Transcription
GUIDE_MVS_JAVA dans CICS _LBP
Document C0 - Public C1 - Interne C2 - Sensible C3 - Confidentiel C4 - Secret GUIDE MVS 28 Novembre 2013 JAVA dans CICS – Retour d’Expérience Rédacteurs : JL Lacheny/Ph Carreau 26/08/2013 JAVA dans CICS – Retour d’Expérience Sommaire Java sur Z : Objectifs - Périmètre Démarche du POC sous CICS Périmètre du POC Réalisation du POC JAVA et les Outils de développement JAVA et l’ Exploitation JAVA et DB2 sous CICS Et si on parlait un peu Technique !!! 2 17/12/2013 Synthèse et Suite à donner … JAVA sur CICS - Retour d'Expérience JAVA sur Z : Opportunité La chaine de liaison « PNiLD » actuelle positionne : La Présentation et Navigation sur « Distribué » La Logique métier et le stockage des Données sur « Z » La Logique métier est écrite en langage COBOL et s’exécute sous le gestionnaire transactionnel CICS Le positionnement des données est ancré sur le Z Tant qu’il existera un programme COBOL/CICS Une programmation de JAVA sur Z permettrait d’avoir : Un langage unique sur l’ensemble de la chaine de liaison Et à terme, un choix de placement des traitements et des données (Distribué ou Z) - 3 17/12/2013 JAVA sur CICS - Retour d'Expérience Etude JAVA sur Z : Objectifs et périmètre Objectifs Apporter une vision à Court Terme sur « La faisabilité de JAVA sur Z » Programmation JAVA dans l’ensemble des cas d’utilisation (..) Performance Exploitabilité Et sur les économies potentielles apportées par le langage Utilisation processeurs ZiiP, Non facturation MLC Donner une vision stratégique à MT/ LT Les nouveaux programmeurs sont « JAVA » (en France) Contribuer à l’ouverture des traitements du SI LBP sur différents types de plateformes … etc. Périmètre « Logique Métier » et « Accès aux Données » sur Z En environnement transactionnel CICS En environnement BATCH NB : Hors périmètre : La partie « PRESENTATION » est déjà en JAVA sur « ID » 4 17/12/2013 JAVA sur CICS - Retour d'Expérience Etude JAVA sur Z Démarche du POC avec assistance IBM Maquette JAVA CICS : Réécriture des services applicatifs du SAMPLE La Poste Intégration Z avec la plateforme de dev JAVA Ecriture d’un pgm JAVA pour CICS MDV DAT E&D : CDM DAT + Mise en place des répertoires et outils unix dans USS Intégration et coexistence JAVA avec COBOL JAVA dans CICS : levée des incertitudes MTC / DAT Exécution des programmes / comparatif avec Cobol MTC MTC MTC MTC MDV MDV MDV DAT DAT DAT Pratiques de développement LBP et intégration des composants existants Architecture technique Pratique de Production LBP DAT Validation opportunité Faisabilité de la programmation JAVA dans l’ensemble des cas d’utilisation (Batch , Proc Stock DB2, WAS sur Z) 5 17/12/2013 JAVA sur CICS - Retour d'Expérience POC OK, POC JAVA : Intégration Z Pratiques de développement LBP et intégration des composants existants Pratique de Production LBP Architecture technique OK, à creuser Validation opportunité Client IC Client ID Plateforme de développement Eclipse OK avec Plugin CICS Explorer Utilisation de l’outillage standard (RAD - Pas de révolution) STRADA AESC Architecture applicative Choix cornélien !! Application COBOL + JAVA avec AESC Mais conversion entre COBOL et JAVA Debug Limitation du nombre de debugger Lenteur liée à la plateforme distante. Lié à l’utilisation de la JVM dans CICS SAM GCR Lien I.S. SD Lien direct ID - WOR CNN IS Application full JAVA sans AESC Transformation de l’AESC en JAVA ? Lié à la programmation des Services Applicatifs CICS à la DISFE (Banque Postale) Le Service Applicatif Le Service Applicatif STRADA AESC ACCESSEUR AESC : EAI maison 6 17/12/2013 JAVA sur CICS - Retour d'Expérience OK, POC JAVA : Accesseur DB2 Pratiques de développement LBP et intégration des composants existants Architecture technique Pratique de Production LBP OK, à creuser Validation opportunité Accès aux données relationnelles : interfaces de programmation JDBC : Le cas le plus facile pour un POC La communication est gérée par CICS (DB2Tran) Intégration des package dans la collection NULLID Simplification du FrameWork ID SQLJ : Le cas le plus proche de COBOL Syntaxe plus concise que JDBC (SQL habillé) Procédure de pré-compilation Création d’un pseudo DBRM + Equivalent BIND Mode statique à l’exécution Association d’un package au programme JAVA Sécurisation par l’autorisation d’accès au package/plan Adaptation au packaging OSGI / Développement SQLJ à voir… (.sqlj) NB : en CICS TS v5.1, pas besoin de L8 TCB pour des accès JDBC ou SQLJ, on reste sous le thread Java (T8 TCB) 7 17/12/2013 JAVA sur CICS - Retour d'Expérience OK, POC JAVA : La Production Pratiques de développement LBP et intégration des composants existants Architecture technique Pratique de Production LBP OK, à creuser Validation opportunité Transfert des modules JAVA (étude théorique ) OK Utilisation de l’outillage standard Endévor comme actuellement pour COBOL CVS comme actuellement pour JAVA ! Définition CICS La version 5 de CICS, plus récente, est la mieux adaptée à la gestion des programmes JAVA Boite noire JVM (JVM z/OS = n’importe quelle JVM) Instrumentation JVM standard. Utilisé IBM Support Assistant pour optimisation GC 8 17/12/2013 JAVA sur CICS - Retour d'Expérience JAVA– Si on parlait un peu technique JAVA : Langage de programmation orienté objet. • C’est un langage portable : WRITE ONCE RUN EVERYWHERE • Cette portabilité est fondée sur le concept de Machine virtuelle : la JVM • Le compilateur ne génère pas un exécutable mais du code binaire (bycode) portable sur n’importe quelle machine/OS, pour un processeur virtuel (la JVM). Ce traitement peut être une interprétation ou une compilation dynamique (JIT). • La JVM est un environnement d’exécution qui fait la relation entre le programme JAVA en bytecode et les OS (Linux, Windows, Z/OS …) ainsi que CICS sous 2 formes différentes : le Pool de JVM et le JVM Server. • La JVM gère : la compilation du source (commande JAVAC) le chargement des programmes en mémoire la transformation du bytecode en code machine de l’environnement (JIT) leur exécution la gestion de la mémoire 9 17/12/2013 JAVA sur CICS - Retour d'Expérience Java JVM – Si on parlait un peu technique MAX : Xmx Fonctionnement généraliste de la mémoire (HEAP) d’une JVM Les 3 paramètres principaux de gestion de la mémoire sont : -Xmx : Taille maxi de la JVM. Lorsqu’un objet ne pourra plus être chargé dans cette JVM, on aura un Out Of Memory. -Xms : Taille Mini, à partir de laquelle on doit faire du ménage avec le Garbage Collector. -Xmns : Taille de la NURSERY. Par expérience 25% de –Xmx, en tous cas jamais > 40%. C’est la zone de chargement des nouveaux objets JAVA. -1- Les nouveaux objets JAVA sont chargés dans la moitié de la Nursery jusqu’à « allocation failure ». Alors flip/flop et utilisation de la seconde moitié de la Nursery. -2- Pendant ce temps, déclenchement du Garbage Collector sur la première moitié de la Nursery. C’est le thread qui a subi l’allocation failure qui va déclencher le GC. -3- Pendant le GC, il y a des objets qui sont toujours IN USE, ils sont alors déplacés vers la partie haute de la JVM qui s’appelle la TENURED AREA, de façon à vider la ½ Nusery. -4- Ce mécanisme de flip/flip est déclenché à nouveau lorsque la seconde moitié est pleine. Et ainsi de suite. -5- On accumule donc les objets dans la TENURED AREA. Lorsque l’on atteint une « allocation failure », on déclenche le GC sur cette zone. Cette allocation failure apparaît lorsqu’on a atteint le –Xms. On travaille au maximum à l’intérieur du Min (~ DSA CICS) 10 17/12/2013 Min Xms Max = Min en CICS Car de petits objets Compact si Gab Coll pas suffisant TENURED AREA 6 5 Xgcthreads4 4 Garb Coll 3 Objets JAVA 1 Xmns 25 % In use Nursery 2 Si Full -6- Si le « Retry » de l’allocation mémoire après passage du GC n’est pas OK (zone trop morcellée), il y a une phase de compaction d’objets (~ compression TS) pour avoir une zone de pages contigües la plus grande possible. (Move d’objets en mémoire temps de pause) -7- Si la Compaction est insuffisante, on réalise une allocation au dessus du –Xms. -8- Quand plus d’allocation possible, la JVM tombe en « OUT OF MEMORY ». C’est bien la majorité des cas où on a une fuite mémoire (Memory Leak) : les références sur des objets ne sont pas libérées. JAVA sur CICS - Retour d'Expérience La Java Virtual Machine JVM – Si on parlait un peu technique Quelques points à noter : Réduire au mieux le temps de PAUSE lié aux actions de compression : o Si la –Xmx est trop grande, alors la compression va durer longtemps o Si la –Xmx est trop petite, alors il va y avoir trop d’actions de compression Pour CICS, on positionnera un –Xmx = -Xms (pour un WAS, on aura un –Xms ~ 60% du –Xmx) - Occupation de la Mémoire GC é Lin GC re éai Lin aire - La fuite mémoire On n’arrive plus à libérer de la mémoire GC de plus en plus fréquent augmentation de la consommation CPU fin éventuelle par exception OutOfMemory. Fuite Mémoire Dos de Dinosaure 11 17/12/2013 Important : En tests, il faut exécuter les applications JAVA suffisamment longtemps pour identifier les fuites mémoires. JAVA sur CICS - Retour d'Expérience La Java Virtual Machine JAVA/ COBOL comparatif rapide Langage Implémentation COBOL Procédural Compliateur COBOL + LE JAVA Objet JDK (JRE inclus) Compilation oui en amont oui, en deux temps : 1/ commande javac (facultatif) 2/ par le JIT au moment de l'exécution Link edit Code page Stockage Exécution oui en amont ou non EBCDIC PDS BATCH (JCL) non, tout est dynamique Unicode (ASCII) Répertoire (ZFS) JAVA Stand Alone (script) Lancement Par un EXEC PGM Lancement par la commande JAVA Récupération des modules STEPLIB CLASSPATH chargement des modules Dans l'espace adresse Dans la JVM Taille mémoire maxi taille de de l'espace, ABEND si plus taille de la JVM, Out Of Mémory si plus de place de place Consommation CPU Prog + OS sur CP Prog + JIT + Gestion JVM sur ZaaP OS sur CP Accès à la techno Z standard Classes JAVA à intégrer 12 17/12/2013 JAVA sur CICS - Retour d'Expérience JAVA sur Z Les conteneurs 2 possibilités s’offrent à nous : Les Lanceurs JAVA : Produit intégrant la JVM et puis c’est tout • BPXBATCH par exemple Les Conteneurs JAVA : Produit intégrant la JVM + des services + des APIs supplémentaires • Les services sont instanciés directement, pas besoin de les créer • Les APIs simplifient la programmation (à l’image des macros assembleurs ;-) ) • Pour certains services & APIs des normes ont été établies (norme J2EE par exemple) • Les conteneurs sur Z/OS : Z/OS Batch container (Z/OS 1.13) IMS CICS : Le POC LBP DB2 (procédures stockées) WAS sur Z (répond aux normes J2EE) Websphere computed Grid … 13 17/12/2013 JAVA sur CICS - Retour d'Expérience POC JAVA Résultats des tests – Synthèse et Comparatif Pratiques de développement LBP et intégration des composants existants Pratique de Production LBP Architecture technique Validation opportunité Comparer des choses comparables Chauffer la JVM (ex. opt JITC) Java 6, ou mieux.. 7 et 64 bits ..CICS V4.2 et V5… JMeter : Echantillon de 200 : Traitement Z196 Test Cobol Test SAM JAVA Test Full JAVA ZEC12 Test Cobol Test SAM JAVA Test Full JAVA Temps Resp devraient être identiques Temps utilisateurs Echantillon Moyenne (ms) mediane 200 200 200 115 101 105 100 95 97 Rep CICS 6,5 9,7 20,4 QR CICS 1,303 1,099 0,3825 J9 temps CICS L8 TOTAL CPU Total CP V4 Total CP V5 0 3,1765 5,407 Gain V4 Gain V5 1,529 1,5515 2,5275 2,832 5,827 8,317 2,832 2,6505 2,91 2,832 2,6505 0,3825 -6,41% 2,75% -86,49% 0,865 0,843 1,2825 1,595 2,674 4,518 1,595 1,4445 1,4715 1,595 1,4445 0,189 -9,44% -7,74% -88,15% T8 200 200 200 83 79 93 74 71 90 2,4 4,1 9,4 0,73 0,6015 0,189 0 1,2295 3,0465 Temps de réponse utilisateurs proches Economie de 10 à 90 % sur les MIPS « facturables » Temps de réponse proche et économie des Mips « facturables » Mais il faut comparer des choses comparables 14 17/12/2013 JAVA sur CICS - Retour d'Expérience POC JAVA Résultats des tests – Synthèse et Comparatif Pratiques de développement LBP et intégration des composants existants Architecture technique Pratique de Production LBP Validation opportunité Comparer des choses comparables Chauffer la JVM (ex. opt JITC) Java 6, ou mieux.. 7 et 64 bits ..CICS V4.2 et V5… Tirs de chauffe pour monter les 10 JVM du CICS TS 4.1 (MaxJVMTcbs = 10) en JVMPool. Chauffage des JVM pour atteindre le paramètre Xjit.count (Just In Time Compilation) Temps Resp devraient être identiques TIR : 30.000 transactions sur 4 utilisateurs, soit 7500 par utilisateur Injection sur le CICS Routeur, de telle sorte qu’une transaction Cobol ou Java est injectée en parallèle et dans les mêmes conditions d'activité machine sur l'AOR V4.1 et V5.1. On a ainsi un débit de 12 trans/sec sur chaque AOR (4 XZW1 (cobol), 4 XZW2 (SAM en Java), 4 XZW4 (full Java avec LINK jcics) Temps de réponses CICS quasi identiques Relevés records SMF110 : En attende retour IBM TIR A : 20 utilisateurs à 3000 transactions. L'AOR V4.1 bloque quasiment immédiatement (seulement 10 JVM) TIR B : Augmentation progressive du nombre d'utilisateurs avec 100 transactions chacun. (1 ==> n). Pour n=9, blocage de l'AOR V4.1 TIR C : Tir uniquement sur l'AOR TS 5.1 selon le même principe. Pour n=60 utilisateurs, soit 180 transactions/sec, la partition est à 100% et commence à tousser. Le JVMServer cependant continue de fonctionner au rythme de la puissance donnée au CICS. Pas de blocage. Le MAXThread du JVMServer est à 50. 15 17/12/2013 JAVA sur CICS - Retour d'Expérience POC JAVA : Conclusions du POC avec CICS En CICS Version 4.1 (jusqu’à fin 2013) Programmation : OK dans un cadre expérimental ou limité Framework JAVA : Petite évolution du Framework existant Coexistence avec l’existant : OK Intégration dans les CICS (Définitions) : OK Cas d’Usage préconisé dans le cadre d’une utilisation pour quelques niches En CICS Version 5.1 (disponible fin 2013 – 2014…) Refonte de la méthode de programmation (OSGI) Tendance du marché… Cas d’usage se rapproche plus de ceux du COBOL (ex : Pour PARTAGE, calcul du jeton « sécurité », …) Mais les processus autour des services applicatifs seront à revoir (AESC, …) Temps de réponse/ traitements Les Temps de réponse « utilisateurs » sont de niveaux comparables Economie de 10% sur le coût CPU du service applicatif, si SAM seulement (type 1) Economie de 90% sur le coût CPU du service applicatif, si Full JAVA (type 2), 16 Quasi-immédiate ! Mais nécessite des pré-requis : Réorganisation de l’utilisation de l’AESC Dépendra du nombre de processeurs ZiiP disponibles … 17/12/2013 JAVA sur CICS - Retour d'Expérience JAVA sur Z – Synthèse de L’étude CICS JAVA sous CICS : … une étape Temps de réponse utilisateur proches de COBOL Permet la coexistence avec la programmation COBOL Utilise l’infrastructure standard de la plate forme IC Permet une économie substantielle (90% de consommation du programme JAVA devient éligible aux processeurs ZIIP) Mais Utilisation en CICS 4.1 (actuelle) … limitée Utilisation de CICS 5.1 (2014) … plus ouverte Nécessite le packaging OSGI Quelques contraintes/limites actuelles de programmation 17 JVM mono thread Transaction éligible : K802 (transaction très consommatrice) ou niche … Nécessite la Refresh de la JVM lors des tests Débug « lourd » sur un serveur éloigné … Limite la mise en place d’un développement industriel 17/12/2013 JAVA sur CICS - Retour d'Expérience JAVA sur Z - Suite à donner à l’ETUDE Avant de passer à une phase de généralisation dans une cible MT/LT, il faut : Revoir les impacts de l’architecture AESC, dans le cas d’usage CICS Intégrer la plate forme Z dans l’ingénierie de développement JAVA (framework) Intégrer les procédures et outils d’exploitation 18 Consolider la démarche mise en place lors du POC CICS JAVA en BATCH JAVA sur Proc-stock DB2 JAVA sur WAS z/OS S’assurer de la « gestion de configuration » … Développer l’exploitation « UNIX » sur l’environnement Z (USS) S’assurer de l’intégration de l’ensemble des outils de production Ajouter des indicateurs dans la métrologie … 17/12/2013 JAVA sur CICS - Retour d'Expérience La Banque Postale vous remercie de votre attention !