java management extensions (jmx) -...

35
Sistemi Distribuiti LS Gestione di Componenti e JMX 1 Java Management Java Management Extensions Extensions (JMX) (JMX) Università di Bologna CdS Laurea Specialistica in Ingegneria Informatica III Ciclo - A.A. 2008/2009 Corso di Sistemi Distribuiti LS Monitoraggio e Gestione di Componenti Distribuiti – Tecnologia JMX Docente: Paolo Bellavista [email protected] http://lia.deis.unibo.it/Courses/sd0809-info/ http://lia.deis.unibo.it/Staff/PaoloBellavista/ Sistemi Distribuiti LS Gestione di Componenti e JMX 2 Controllo e Monitoraggio Controllo e Monitoraggio Distribuito di Componenti Distribuito di Componenti Come già detto più volte, siamo interessati non solo alla fase di sviluppo, ma principalmente alla fase di deployment, configurazione ed esecuzione in ambiente reale Necessità di controllo on-line e conseguenti azioni di gestione (non solo di network equipment ma anche di componenti applicativi e di servizio) Obiettivi: fault detection, misura di performance e riconfigurazione/re-deployment, identificazione colli di bottiglia, … “Soliti” modelli: push vs. pull, reattivi vs. proattivi, ottimistici vs. pessimistici, con manager centralizzato vs. parzialmente distribuito vs. completamente distribuito, … Con quali pro e quali contro?

Upload: others

Post on 02-Jun-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 1

Java Management Java Management ExtensionsExtensions (JMX)(JMX)

Università di BolognaCdS Laurea Specialistica in Ingegneria Informatica

III Ciclo - A.A. 2008/2009

Corso di Sistemi Distribuiti LS Monitoraggio e Gestione

di Componenti Distribuiti – Tecnologia JMX

Docente: Paolo [email protected]

http://lia.deis.unibo.it/Courses/sd0809-info/

http://lia.deis.unibo.it/Staff/PaoloBellavista/

Sistemi Distribuiti LS – Gestione di Componenti e JMX 2

Controllo e Monitoraggio Controllo e Monitoraggio Distribuito di ComponentiDistribuito di Componenti

Come già detto più volte, siamo interessati non solo alla fase di sviluppo, ma principalmente alla fase di deployment, configurazione edesecuzione in ambiente reale

Necessità di controllo on-line e conseguenti azionidi gestione (non solo di network equipment ma anche dicomponenti applicativi e di servizio)

Obiettivi: fault detection, misura di performance e riconfigurazione/re-deployment, identificazione colli dibottiglia, …

“Soliti” modelli: push vs. pull, reattivi vs. proattivi, ottimistici vs. pessimistici, con manager centralizzato vs. parzialmente distribuitovs. completamente distribuito, …

Con quali pro e quali contro?

Page 2: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 3

Controllo e Monitoraggio Controllo e Monitoraggio Distribuito di ComponentiDistribuito di Componenti

Importanza di standard per controllo distribuito in ambientiaperti e interoperabili (la stessa necessità di standard, a che cosaha portato nel mondo del networking?)

Solo per fare un esempio, Distributed Management Task Force (DMTF) è un’organizzazione per la standardizzazione per IT system management in ambienti industriali e Internet. Gli standard DMTF permettono la costruzione di componenti per system management indipendenti dalla piattaforma e technology-neutral, abilitando cosìinteroperabilità fra prodotti per la gestione di sistemi di diversi vendor

Alcuni elementi fondamentali in DMTF:

Common Information Model (CIM)

Common Diagnostic Model (CDM)

Web-Based Enterprise Management (WBEM)

Sistemi Distribuiti LS – Gestione di Componenti e JMX 4

Controllo e Monitoraggio Controllo e Monitoraggio Distribuito di ComponentiDistribuito di Componenti

Common Information Model (CIM) – modello astratto per la rappresentazione degli elementi gestiti (ad esempio, computer o storage area network) come insieme di oggetti e relazioni. CIM è estensibile per consentire l’introduzione di estensioni product-specific

Common Diagnostic Model (CDM) – modello di diagnosticae definizione di come questo debba essere incorporato nell’infrastrutturadi management

Web-Based Enterprise Management (WBEM) – protocolliper l’interazione fra componenti di system management (conformi a CIM e ai suoi profili) e la loro interrogazione

Qualcuno si ricorda qualcosa di SNMP e CMIB?

Qualcuno ha mai visto altrove il concetto di profilo?

Page 3: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 5

Panoramica GeneralePanoramica Generale

Prima di Java Management Extensions (JMX) non vi era nessun approccio standardizzato in Java per far partire, gestire, monitorare e fermare l’esecuzione di componenti softwareComponenti software conformi alla specifica JMX vengono chiamatiMBean (managed bean)

Componenti MBean sono gestiti attraverso un agente:Che svolge il ruolo di registryChe offre alle applicazioni di management (clienti di tale agente) un modo di effettuare query e modificare i bean gestiti

Sistemi Distribuiti LS – Gestione di Componenti e JMX 6

JMX realizza e sfrutta, ancora una volta, il ben noto principio di decoupling. Tutte le comunicazioni fra clienti e MBean avvengono attraverso il livello intermedio dell’agente:

i clienti mandano query all’agente relative agli MBean registrati

i clienti chiedono all’agente l’esecuzione di metodi di business/management sugli MBean desiderati

NON viene passato MAI alcun riferimento diretto a componenti MBean (visibilità solo all’interno dell’agente)

Panoramica GeneralePanoramica Generale

Page 4: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 7

Architettura JMXArchitettura JMX

JMX è organizzato secondo un’architettura a tre livelli:I componenti gestiti appartengono al livello instrumentation

Il livello agente è costituito dal registro per gli MBean(MBeanServer) e da alcuni servizi standard addizionali

Il livello dei servizi distribuiti è costituito da adattatori e connettori (adaptor e connector), necessari per supportare l’accesso remoto al livello agente

Sistemi Distribuiti LS – Gestione di Componenti e JMX 8

Livello Livello InstrumentationInstrumentation

Il livello instrumentation definisce come creare risorse gestibili tramite JMX (MBeans),ovvero oggetti che offrono metodi per:

gestire un’applicazionegestire un componente softwaregestire un serviziogestire un dispositivo…

Un MBean non è altro che un componente che implementa una interfaccia di gestione, staticamente o dinamicamente:

Nel primo caso, implementa un’interfaccia Java standard e l’agente ne fa inspection tramite tecniche di reflection e convenzioni sui nomiNel secondo caso, offre un insieme di oggetti metadata attraverso i quali l’agente riesce a scoprire i metodi di management esposti

Page 5: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 9

JMX definisce 4 tipi di componenti MBean:Standard MBean: creato dichiarando una interfaccia Java con l’informazione di management che l’oggetto gestito implementaDynamic MBean: un oggetto che implementa l’interfaccia DynamicMBean e offre la descrizione dei suoi veri metodi di management attraverso un insieme di oggetti metadata che tale interfaccia richiede di fornire Model MBean: un dynamic MBean esteso con descrittori addizionali che definiscono proprietà aggiuntive (behavioralproperties)Open MBean (non di implementazione obbligatoria per essere conformi alla specifica): un MBean in cui i tipi utilizzati nei metodi di management sono inclusi in un set predefinito di classi e tipi di base

Il supporto ai primi tre tipi di MBean è mandatory a partire dalla specifica JMX1.0 (ricordiamo che JMX è una specifica di API, con diverse implementazioni possibili, come quella di Sun o IBM Tivoli)

Livello Livello InstrumentationInstrumentation

Sistemi Distribuiti LS – Gestione di Componenti e JMX 10

Livello AgenteLivello Agente

Il livello di agente è costituito da un server MBean e da un insieme di servizi di agente basati sul livello di instrumentation4 servizi di agente sono definiti nella specifica JMX: M-Let, Timer, Monitoring e RelationIl livello agente introduce il concetto di naming per gli oggetti, nomi che il lato cliente può utilizzare come riferimento indiretto alle risorse gestite

Page 6: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 11

Livello AgenteLivello Agente

Il server MBean è uno dei componenti chiave dell’architettura di management:

Opera come un canale di comunicazione che smista/delegatutte le invocazioni fra applicazioni di management e risorse gestite

Espone metodi per la creazione/effettuazione di query, perinvocare operazioni e per manipolare attributi su MBean

Il tipo di implementazione dei componenti MBean (Standard, Dynamic, Model, …) è trasparente alle applicazioni client-side di gestione

Sistemi Distribuiti LS – Gestione di Componenti e JMX 12

Livello dei Servizi DistribuitiLivello dei Servizi Distribuiti

MBeanServer è un oggetto locale alla JVM dei componenti gestiti e non offre particolare supporto alla connessione remota verso di sé:

– Servono connettori JMX o adattatori di protocollo per accettare chiamate provenienti dall’esterno della JVM

– Questi componenti (connettori/adattatori) sono spesso essi stessi degli MBean, registrati sull’agente, e forniscono una pluralità di differenti forme di connettività

Page 7: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 13

I connettori JMX sono strutturati in due componenti:

Lato server, l’agente registra un server per le connessionicapace di ricevere invocazioni remote di metodo

Lato cliente, si può utilizzare una vista remota del server MBeanper invocare operazioni su di esso

Adattatori di protocollo possono adattare le operazioni del server MBean ad una rappresentazione secondo un determinato protocollo (o anche verso un diverso modello di informazioni, come SNMP Management Information Base), permettendo così ad applicazioni di management legacy o a strumenti non-Java di interoperare con JMX

Livello dei Servizi DistribuitiLivello dei Servizi Distribuiti

Sistemi Distribuiti LS – Gestione di Componenti e JMX 14

La specifica JMX Remote API definisce come si possa fare l’advertising e trovare agenti JMX usando infrastrutture didiscovery e lookup esistenti:

La specifica NON definisce un ulteriore servizio di discovery e lookup

La tecnologia JMX offre una soluzione standard per l’esportazione delle API di JMX instrumentation verso applicazioni remote, basata su RMI

Inoltre, JMX Remote API definisce un protocollo opzionale (non-mandatory) basato direttamente su socket TCP, chiamato JMX Messaging Protocol (JMXMP)

Livello dei Servizi DistribuitiLivello dei Servizi Distribuiti

Page 8: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 15

In In brevebreve……

MBean sono stati progettati per essere flessibili, semplici e facilida implementare

Gli sviluppatori di applicazioni, servizi di supporto e dispositivipossono rendere i loro prodotti gestibili (manageable) in modostandard, senza necessità di conoscere a fondo e di investire in sistemi complessi di management

Gli oggetti esistenti possono facilmente essere estesi per produrre MBean standard o essere oggetto di wrapping come MBean dinamici, rendendo così le risorse esistenti facilmentemanageable a basso costo

Sistemi Distribuiti LS – Gestione di Componenti e JMX 16

Scendiamo in qualche Dettaglio: Scendiamo in qualche Dettaglio: Standard Standard MBeansMBeans

Standard MBeans

Il modo più semplice per rendere JMX-managed nuove classi Java

Interfaccia statically-typeddichiara esplicitamente gli attributi (tramite metodi getter e setter) e le operazioni di gestione

Convenzione sui nomi: quando un managed object viene registrato, l’agente cerca una interfaccia di management con lo stesso nome dell’oggetto + suffisso MBean (nel caso, navigando l’albero di ereditarietàdella classe)

public interface UserMBean{public long getId();public void setId(long id);public boolean isActive();public void setActive(booleanactive);

public String printInfo();}

public class Userimplements UserMBean { ... }

public class Studentextends User { /* anche questa classe può essere registrata come un UserMBean */

... }

Page 9: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 17

Uso di Uso di MBeanServerMBeanServer::RegistrazioneRegistrazione

Per registrare un manageable object come un MBean è necessario creare prima ObjectName

Il riferimento all’agente può essere ottenuto da una lista di implementazioni disponibili di MBeanServer o creandolo from scratch

La registrazione di MBeanconsiste semplicemente nell’associare il manageable object con il suo nome di oggetto

ObjectName username = new ObjectName( “example:name=user1”);

List serverList =MBeanServerFactory.findMBeanServer(null);

MBeanServer server = (MBeanServer)serverList.iterator().next();

/* oppure per la creazione…MBeanServer server =MBeanServerFactory.createMBeanServer(); */

server.registerMBean( new User(), username);

Sistemi Distribuiti LS – Gestione di Componenti e JMX 18

L’applicazione di management riferisce MBean passando un riferimento a objectname all’agente, per ogni operazione invocata

Server MBean cerca il riferimento Java corrispondente a MBeannel suo repositoryinterno e invoca l’operazione corrispondente (o la modifica dell’attributo) su MBean

ObjectName username = new ObjectName(“example:name=user1”);

Object result =server.invoke(username, // nome MBean“printInfo” // nome operaznull, // no paramnull); // void signature

Uso di Uso di MBeanServerMBeanServer::InvocazioneInvocazione

Page 10: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 19

Meccanismo di NotificaMeccanismo di Notifica

L’architettura JMX definisce un meccanismo di notificaper MBean che consente di inviare eventi verso altri MBean o applicazioni di management

MBean che vogliono emettere eventi di management devonoimplementare l’interfaccia NotificationBroadcasterOggetti listener per gli eventi deviono invece implementare l’interfaccia NotificationListener e sono registrati presso MBeanbroadcasterQuesta registrazione è fatta attraverso il livello di agenteOperazioni di notifica svolte da broadcaster MBean sono parte della loro interfaccia di management JMX:

Applicazioni possono effettuare query sul livello agent per avere info su quali tipi di notifica gli MBean di interesse possono emettereA tal fine, MBean broadcaster forniscono oggetti MBeanNotificationInfo

Sistemi Distribuiti LS – Gestione di Componenti e JMX 20

La classe JMX Notificationestende EventObjectintroducendo campi per il tipo di evento, numero di sequenza, timestamp, messaggio e dati utente opzionaliLe notifiche possono essere filtrate:

Implementazione dell’interfaccia NotificationFilter è registrata presso broadcaster MBean, insieme con il listeneril broadcaster deve controllare se la notifica supera il filtro prima di inviarla

public interface NotificationFilter {public booleanisNotificationEnabled(Notification notification);

}

public interface NotificationBroadcaster {

/* ... */

public voidaddNotificationListener(NotificationListener listener,NotificationFilter filter,Object handback) throwsIllegalArgumentException;

}

Meccanismo di NotificaMeccanismo di Notifica

Page 11: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 21

Poiché l’implementazione di broadcaster MBean può diventare anche piuttosto complessa, è messa a disposizione una classeNotificationBroadcasterSupport che implementa l’interfacciaNotificationBroadcaster. I propri broadcaster MBean possono:

O estendere tale classe per ereditare quella implementazione dei metodi di broadcasting

O delegare a questa classe il supporto alla gestione delle registrazioni e all’invocazione delle notifiche

Il meccanismo di notifica è generico e adatto a qualsiasi tipo di notifica user-defined. Comunque JMX definisce la specifica classe AttributeChangeNotification per MBean che vogliano inviare notifiche sul cambiamento dei loro attributi di management

Meccanismo di NotificaMeccanismo di Notifica

Sistemi Distribuiti LS – Gestione di Componenti e JMX 22

MBeanMBean DinamiciDinamici

MBean dinamici implementano l’interfaccia genericaDynamicMBean che offre metodi all’agente per fare il discovery di metodi e attributi di management(reale interfaccia di gestione)

I metadati che descrivono l’interfaccia di management sono completamente sotto la responsabilità dello sviluppatore

Casi possibili di utilizzo di DynamicMBean:

Situazioni in cui l’interfaccia di management può cambiare spessoAbilitare management su risorse esistenti

public interface DynamicMBean {

public MBeanInfo getMBeanInfo();

public Object getAttribute(String attribute) throws … ;

public AttributeList getAttributes(String[] attributes) throws … ;

public void setAttribute(Attribute attribute) throws … ;

public AttributeList setAttributes(AttributeList attributes) throws … ;

public Object invoke(String actionName, Object[] params, String[] signature) throws … ;

}

In MBean Standard i metadati vengono generati dall’agente stesso tramite introspezione

Page 12: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 23

In MBean dinamici:Interfaccia di management esposta tramite le classi di metadatadefinite in JMX APImetadata ritrovati dinamicamentedall’agente come istanza della classe MBeanInfo

MBeanInfo include tutti gli elementi di metadata (che ereditano caratteristiche comuni dalla classe MBeanFeatureInfo)

Restituisce un array di oggetti, uno per ogni tipo di notifica che

MBean può emettere

public MBeanNotificationInfo[] getNotifications()

Restituisce un array di oggetti, uno per ogni

costruttore pubblico di MBean

public MBeanConstructorInfo[]getConstructors()

Restituisce un array di oggetti, uno per ogni

operazione di management

public MBeanOperationInfo[]

getOperations()

Restituisce un array di oggetti, uno per ogni

attributo di management

public MBeanAttributeInfo[]

getAttributes()

Restituisce una descrizione di MBean

public StringgetDescription()

Restituisce il nome della classe di MBean

public StringgetClassName()

Metodi della classe MBeanInfo

MBeanMBean DinamiciDinamici

Sistemi Distribuiti LS – Gestione di Componenti e JMX 24

public class DynamicUser extends NotificationBroadcasterSupportimplements DynamicMbean {

// Attributifinal static String ID = “id”;private long id = System.currentTimeMillis();public Object getAttribute(String attribute) throwsAttributeNotFoundException, MBeanException, ReflectionException {if (attribute.equals(ID)) return new Long(id);

throw new AttributeNotFoundException(“Missing attribute ” + attribute);

}

// Operazionifinal static String PRINT = “printInfo”;public String printInfo() { return “Sono un MBean dinamico”; }public Object invoke(String actionName, Object[] params, String[] signature) throws … {if ( actionName.equals(PRINT)) return printInfo(); )throw new UnsupportedOperationException(“Unknown operation “ +

actionName);}...

MBeanMBean DinamiciDinamici

Page 13: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 25

public MBeanInfo getMBeanInfo() {final boolean READABLE = true; final boolean WRITABLE = true;final boolean IS_GETTERFORM = true;String classname = getClass().getName(); String description = “Sono un MBean dinamico”;

MBeanAttributeInfo id = new MBeanAttributeInfo(ID,long.class.getName(),”id”,READABLE,!WRITABLE,!IS_GETTERFORM);

MBeanConstructorInfo defcon = new MBeanConstructorInfo( “Default”,”Creates”,null);

MBeanOperationInfo print = new MBeanOperationInfo(PRINT, ”Prints info”,null,String.class.getName(),MBeanOperation-Info.INFO);

return new MBeanInfo(classname,description,new MBeanAttributeInfo[] { id },new MBeanConstructorInfo[] { defcon },new MBeanOperationInfo[] { print },null);

}}

MBeanMBean DinamiciDinamici

Sistemi Distribuiti LS – Gestione di Componenti e JMX 26

Model Model MBeanMBean

ModelMBean sono estensioni di MBean dinamiciForniscono un template generico per:

Creare un’implementazione di gestione per risorse esistentiSeparare l’implementazione di management dall’implementazione della risorsaEstendere metadata di gestione per fornire informazioni addizionali e proprietà behavioral:

Proprietà di cachingProprietà di sicurezzaProprietà di transazionalitàProprietà di persistenza…

Tutti gli agenti JMX devono fornire almeno una implementazionedell’interfaccia ModelMBean tramite la classe RequiredModelMBean

public interface ModelMBeanextends DynamicMBean, PersistentMBean, ModelMBeanNotificationBroadcaster {public void setModelMBeanInfo(ModelMBeanInfo inModelMBeanInfo) throws … ;

public void setManagedResource(Object mr, String mr_type) throws… ;

}

public class RequiredModelMBeanimplements ModelMBean, … {…

}

Page 14: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 27

Model Model MBeanMBean

Oggetti che implementano l’interfaccia Descriptor sono usati nei metadati di Model MBean per aggiungere politiche:

Politiche specifiche per la particolare implementazione dell’agente JMXLa specifica JMX definisce alcuni comportamenti standardImplementazioni di Model MBeanpossono essere estese per supportare comportamenti custom

Un descrittore è una collezione di coppie nome-valore in base alle quali l’implementazione dell’agente adatta il suo comportamentoLe classi di metadata di Model MBeanestendono le classi corrispondenti usate con MBean dinamici e standard (implicitamente) e implementano l’interfaccia DescriptorAccess

public interface Descriptorextends Serializable, Cloneable{public String[] getFields();public void setField(String

name, Object value);public void removeField(String

name);...

}

Sistemi Distribuiti LS – Gestione di Componenti e JMX 28

Model Model MBeanMBean

Oggetti che implementano l’interfaccia Descriptor sono usati nei metadati di Model MBean per aggiungere politiche:

Politiche specifiche per la particolare implementazione dell’agente JMXLa specifica JMX definisce alcuni comportamenti standardImplementazioni di Model MBeanpossono essere estese per supportare comportamenti custom

Un descrittore è una collezione di coppie nome-valore in base alle quali l’implementazione dell’agente adatta il suo comportamentoLe classi di metadata di Model MBeanestendono le classi corrispondenti usate con MBean dinamici e standard (implicitamente) e implementano l’interfaccia DescriptorAccess

public interface DescriptorAccess{public Descriptor getDescriptor();public void setDescriptor(Descriptor desc);

}

public class ModelMBeanAttributeInfoextends MBeanAttributeInfoimplements DescriptorAccess, Cloneable{... }

public class ModelMBeanOperationInfo ...public class ModelMBeanConstructorInfo

...public class ModelMBeanNotificationInfo

...

Page 15: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 29

Model Model MBeanMBean

Ad esempio, è possibile aggiungere un attributo di management domain-specific senza modificare la classe originale

public class Printer { public boolean isActive() { return true; } }

...Descriptor activedesc = new DescriptorSupport();activedesc.setField(“name”,“Active”);activedesc.setField(“descriptorType”,“attribute”);activedesc.setField(“getMethod”,“isActive”);

ModelMBeanAttributeInfo activeInfo = new ModelMBeanAttributeInfo(“Active”,boolean.class.getName(),“Stato della stampante”, READABLE,!WRITABLE,IS_GETTERFORM,activedesc);

Descriptor roomdesc = new DescriptorSupport();roomdesc.setField(“name”,“Room”);roomdesc.setField(“descriptorType”,“attribute”);roomdesc.setField(“displayName”,“Room Number”);roomdesc.setFielD(“default”,“D325”);

Sistemi Distribuiti LS – Gestione di Componenti e JMX 30

Model Model MBeanMBean

Example: adding a domain-specific management attribute without affecting the original class:

ModelMBeanAttributeInfo roomNameInfo = new ModelMBeanAttributeInfo(“Room”,String.class.getName(),“Questa è la stanza della stampante”,READABLE,WRITABLE,!IS_GETTERFORM,roomdesc);

Descriptor activegetterdesc = new DescriptorSupport();activegetterdesc.setField(“name”,“isActive”);activegetterdesc.setField(“descriptorType”,“operation”);activegetterdesc.setField(“role”,“getter”);

ModelMBeanOperationInfo isActiveInfo = new ModelMBeanOperationInfo(“Room”,“Comunica lo stato della stampante”,null, boolean.class.getName(), MBeanOperationInfo.INFO,activegetterdesc);

Descriptor beandesc = new DescriptorSupport();beandesc.setField(“name”,“Printer”);beandesc.setField(“descriptorType”,“mbean”);

ModelMBeanInfo modelmbeaninfo = new ModelMBeanInfoSupport(RequiredModelMBean.class.getName(), ”Printer”, new ModelMBeanAttributeInfo[] { activeInfo, roomNameInfo}, new ModelMBeanOperationInfo[] { isActiveInfo }, null, beandesc};

RequiredModelMBean model = new RequiredModelMBean();model.setManagedResource(new Printer(), “Object reference”);model.setModelMBeanInfo(modelmbeaninfo);

Page 16: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 31

Servizi Standard Servizi Standard a Livello di Agentea Livello di Agente

La specifica JMX definisce 4 servizidistinti che devono essere disponibili su ogni implementazione conforme alla specifica:

M-Let Service: permette agli MBean di essere caricati dalla rete e inclusi nel livello di agente a runtimeTimer Service: scheduler che si occupa dell’invio di notifiche agli altri MBeanMonitoring Service: MBean che svolge il ruolo di osservatore per gli attributi di management degli altri bean e che notifica le modifiche avvenuteRelation Service: permette di creare associazioni fra MBean e mantiene la loro consistenza

Sistemi Distribuiti LS – Gestione di Componenti e JMX 32

MM--LetLet ServiceService

Loading dinamico di nuove classi Java dal server MBean:

Da macchina localeDa macchina remota (attraverso la rete)

Spostamento della configurazione di una applicazione verso un server remotoCome ogni altro standard MBean, l’interfaccia MLetMBean espone le operazioni di managementconsiderate rilevanti per il servizio:

addURL();getMBeansFromURL();…

All’URL specificato si trovano i file di testo M-Let che descrivono i componenti MBean tramite MLET tag

<MLET CODE = class | OBJECT = serfileARCHIVE = “archiveList”

[CODEBASE = codebaseURL][NAME = MBeanName][VERSION = version] >[arglist]

</MLET>

Ad esempio:

<MLET CODE=com.mycompany.Foo

ARCHIVE=“MyComponents.jar,acme.jar”

</MLET>

Page 17: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 33

Servizio di TimerServizio di Timer

Il servizio di Timer è basato sul meccanismo di notifica di JMX:

TimerMBean è un broadcaster MBeanPer ricevere notifiche dal timer, il consumatore deve implementare l’interfaccia NotificationListener e registrarsi

Analogo al servizio di cronin Unix/Linux o a Task Scheduler Service su Windows NT

// fa partire il servizio di timerList list =

MBeanServerFactory.findMBeanServer(null);MBeanServer server = (MBeanServer)list.

iterator().next();ObjectName timer = new ObjectName(“service:

name=timer”);server.registerMBean(new Timer(),timer);server.invoke(timer,”start”,null,null);

// configurazione di notification timeDate date = new Date(System.

currentTimeMillis()+Timer.ONE_SECOND*5);server.invoke(timer, // MBean”addNotification”, // metodonew Object[] { // args“timer.notification”, // tipo“Schedule notification”, // messaggionull, // user data

date}, // timenew String[] { String.class.getName(),String.class.getName(),Object.class.getName(), // signatureDate.class.getName()} );

// registra il listener MBeanserver.addNotificationListener(timer,this,null,

null);

Sistemi Distribuiti LS – Gestione di Componenti e JMX 34

Servizio di Servizio di MonitoringMonitoring

Un insieme di MBean che possono essere utilizzati per effettuare il monitoring degli attributi di risorse gestite

Le notifiche dei monitor differiscono dalle usuali notifiche di modifica di attributi perché si possono introdurre threshold e periodi di granularità

3 implementazioni differenti:

Counter monitor traccia le variazioni di attributi che si comportano come contatori in modo idealmente continuo

Gauge monitor per attributi integer e float, ad intervalli di granularitàconfigurabile, con threshold

String monitor per informare in relazione a string matching/dis-matching rispetto a valori attesi

Page 18: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 35

Servizio di Servizio di MonitoringMonitoring

Un insieme di MBean che possono essere utilizzati per effettuare il monitoring degli attributi di risorse gestite

Le notifiche dei monitor differiscono dalle usali notifiche di modifica di attributi perché si possono introdurre threshold e periodi di granularità

3 implementazioni differenti:

Counter monitor traccia le variazioni di attributi che si comportano come contatori

Gauge monitor per diminuire/ aumentare valori numerici di tipo integer e float

String monitor per informare in relazione a string matching/dis-matching rispetto a valori attesi

Sistemi Distribuiti LS – Gestione di Componenti e JMX 36

Servizi Servizi AgentAgent--levellevel Standard: Standard: RelationRelation

Permette di definire relazioni fra MBean e di reagire a modifiche (ad esempio in caso di dipendenze):

Consistenza delle relazioni mantenuta tramite la definizione di ruoli per gli MBean e associando/ disassociando oggetti MBean a ruoli differentinelle relazioniNotifiche emesse alla modifica nelle istanze di relazione (creazione, aggiornamento, rimozione, ,,,)

RoleInfo monInfo = new RoleInfo(“Monitor”,“javax.management.monitor.GaugeMonitor”,true,true,0, ROLE_CARDINALITY_INFINITY, // [0,*]“Descrizione del monitor”);

RoleInfo obsInfo = new RoleInfo(“Observable”,“examples.ThreadMonitor”,true,true,1,1, //[1,1]“Descrizione del ruolo observable”);

/* Oggetti relazione implementano l’interfaccia RelationType */

RelationTypeSupport relationType =new RelationTypeSupport(

“ObservedMBean”, new RoleInfo[] { observableInfo, monitorInfo }

);

/* ... */

Page 19: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 37

JMX Remote APIJMX Remote API

Per effettuare operazioni remote su MBean, un server per connettori RMI è a disposizione lato server:

Tramite chiamata alla classe JMXServiceURL si crea un nuovo URL di servizio (indirizzo per il server di connector)Il server di connector RMI ècreato via JMXConnector-ServerFactory, con parametri URL di servizio e MBeanServerIl server di connector deve essere messo in esecuzione

On the server side:MBeanServer mbs = MBeanServer-

Factory.createMBeanServer();JMXServiceURL url = new

JMXServiceURL("service:jmx: rmi:///jndi/rmi://" + "localhost: 9999/server");

JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnector-Server(url, null, mbs);

cs.start();

URL (in formato JNDI) indica dove reperire uno stub RMI per il connettore (tipicamente in un direttorio riconosciuto da JNDI come RMI registry o LDAP):

connettore usa il trasporto di default RMI

registry RMI in cui lo stub èmemorizzato risponde alla porta 9999 (arbitraria) su local host

indirizzo del server è registrato al nome “server”

Sistemi Distribuiti LS – Gestione di Componenti e JMX 38

Il cliente crea un RMI connectorclient configurato per connettersi al server RMI connector creato lato server:

URL di servizio utilizzato deve fare match con quello usato alla registrazione del servizio di connectoril connector client è restituito come risultato della connessione al connector server

Il cliente ora può registrare MBeaned effettuare operazioni su di essi tramite MBeanServer remoto in modo trasparente alla distribuzione

Lato cliente:JMXServiceURL url = new

JMXServiceURL(service:jmx: rmi:///jndi/rmi://" + "localhost:9999/server");

JMXConnector jmxc = JMXConnector-Factory.connect(url, null);

MBeanServerConnection mbsc = jmxc.getMBeanServerConnection;

mbsc.createMBean(...);

JMX Remote APIJMX Remote API

Page 20: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 39

Piccola nota aggiuntiva, per chi svolgerà approfondimenti su JMX…

Oltre agli usuali connettori standard RMI e RMI/IIOP, si possonoutilizzare connettori JMXMP (ad esempio per disporre di un livello disicurezza maggiore tramite meccanismo SSL). Per farlo, occorreeffettuare il download di JSR 160 Reference Implementation dahttp://java.sun.com/products/JavaManagement/download.html e aggiungere il file jmxremote_optional.jar al classpath

Esempi di utilizzo di connettori JMXMP sono inclusi in JMX Remote API Tutorial, reperibile insieme alla Reference Implementation di JSR 160

JMX Remote APIJMX Remote API

Sistemi Distribuiti LS – Gestione di Componenti e JMX 40

Esempio Semplicissimo (1)Esempio Semplicissimo (1)

/* Hello.java implementa l’interfaccia HelloMBean */

package com.example.mbeans;

public class Hello implements HelloMBean {

public void sayHello() {

System.out.println("hello, world");

}

public int add(int x, int y) {

return x + y;

}

/* metodo getter per l’attributo Name. Spesso gli attributi sonoutilizzati per fornire indicatori di monitoraggio come uptime o utulizzo di memoria. Sono read-only e non possono esseremodificati tramite l’interfaccia di management */

public String getName() {

return this.name;

}

/* invece anche metodi getter e setter */

Page 21: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 41

Esempio Semplicissimo (2)Esempio Semplicissimo (2)

/* invece anche metodi getter e setter */

public int getCacheSize() {

return this.cacheSize;

}

/* perché synchronized? */

public synchronized void setCacheSize(int size) {

this.cacheSize = size;

System.out.println("Cache size now " + this.cacheSize);

}

private final String name = “My First MBean";

private int cacheSize = DEFAULT_CACHE_SIZE;

private static final int DEFAULT_CACHE_SIZE = 200;

}

Sistemi Distribuiti LS – Gestione di Componenti e JMX 42

/* HelloMBean.java - interfaccia MBean che descrive le operazionie gli attributi di management: 2 operazioni (sayHello e add) e 2 attributi (Name e CacheSize) */

package com.example.mbeans;

public interface HelloMBean {

// operazioni

public void sayHello();

public int add(int x, int y);

// attributi

public String getName();

public int getCacheSize();

public void setCacheSize(int size);

}

Esempio Semplicissimo (3)Esempio Semplicissimo (3)

Page 22: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 43

/* Main.java deve semplicemente istanziareHelloWorld MBean, registrarlo e attendere */

package com.example.mbeans;

import java.lang.management.*;

import javax.management.*;

public class Main {

public static void main(String[] args) throws Exception {

// Ottiene il server MBean

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();

// Costruisce ObjectName per MBean da registrare

ObjectName name = new ObjectName("com.example.mbeans:

type=Hello");

// Crea istanza di HelloWorld MBean

Hello mbean = new Hello();

// Registra l’istanza

mbs.registerMBean(mbean, name);

System.out.println("Waiting forever...");

Thread.sleep(Long.MAX_VALUE); } }

Esempio Semplicissimo (4)Esempio Semplicissimo (4)

Sistemi Distribuiti LS – Gestione di Componenti e JMX 44

Esempio con Esempio con Uso di Uso di NotificationNotification (1)(1)

package com.example.mbeans;

import javax.management.*;

public class Hello

extends NotificationBroadcasterSupport implements HelloMBean {

public void sayHello() {

System.out.println("hello, world");

}

public int add(int x, int y) {

return x + y;

}

public String getName() {

return this.name;

}

public int getCacheSize() {

return this.cacheSize;

}

Page 23: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 45

Esempio con Esempio con Uso di Uso di NotificationNotification (2)(2)

public synchronized void setCacheSize(int size) {

int oldSize = this.cacheSize;

this.cacheSize = size;

/* In applicazioni reali il cambiamento di un attributo di solitoproduce effetti di gestione. Ad esempio, cambiamento didimensione della cache può generare eliminazione o allocazionedi entry */

System.out.println("Cache size now " + this.cacheSize);

/* Per costruire una notifica che descrive il cambiamentoavvenuto: "source" è ObjectName di MBean che emette la notifica(MBean server sostituisce "this“ con il nome dell’oggetto); mantenuto un numero di sequenza */

Notification n = new AttributeChangeNotification( this,

sequenceNumber++, System.currentTimeMillis(),

“CacheSize changed", "CacheSize", "int", oldSize,

this.cacheSize);

/* Invio della notifica usando il metodo sendNotification() ereditato dalla superclasse */

sendNotification(n);

} …

Sistemi Distribuiti LS – Gestione di Componenti e JMX 46

Esempio con Esempio con Uso di Uso di NotificationNotification (3)(3)

@Override

/* metadescrizione */

public MBeanNotificationInfo[] getNotificationInfo() {

String[] types = new String[] {

AttributeChangeNotification.ATTRIBUTE_CHANGE

};

String name = AttributeChangeNotification.class.getName();

String description = “è stato cambiato un attributo!";

MBeanNotificationInfo info =

new MBeanNotificationInfo(types, name, description);

return new MBeanNotificationInfo[] {info};

}

private final String name = “My first MBean";

private int cacheSize = DEFAULT_CACHE_SIZE;

private static final int DEFAULT_CACHE_SIZE = 200;

private long sequenceNumber = 1;

}

Page 24: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 47

Caso di Studio: JMX at work Caso di Studio: JMX at work in in ApplicationApplication Server Server JBossJBoss

Esempio notevole: Application server JBoss è stato costruito on top dell’infrastruttura JMX

Architettura microkernel basata su componenti MBean(application server non-monolitico)Sia le applicazioni realizzate su JBoss che l’application server sono facilmente manageableConfigurazione del server altamente flessibile

Possibile scegliere fra differenti implementazioni di servizio (ad es. JMS)Si può fare l’embedding del server in differenti container (ad es. servlet container come Tomcat, Jetty, …)Se un’implmentazione di servizio non offre una funzionalitàrichiesta da un’applicazione (ad es. transaction manager, un determinato datasource, …), se ne può scegliere un’altraServizi non necessari possono essere disattivati (shut down)

Sistemi Distribuiti LS – Gestione di Componenti e JMX 48

Il nucleo dell’application server JBoss è JMX MBean server :

Questo rende l’application server estremamente semplice da estendere con nuove funzionalità

Aggiungere nuovi servizi o componenti application-specificsi traduce nella creazione di nuovi MBean e nella loro registrazione al server MBean

Caso di Studio: JMX at work Caso di Studio: JMX at work in in ApplicationApplication Server Server JBossJBoss

Page 25: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 49

Architettura di Architettura di JBossJBoss 5.x 5.x ApplicationApplication ServerServer

Oltre all’architettura a microcontainer(evoluzione del bus JMX delle versioni precedenti), ritroviamo come moduli una serie di vecchie conoscenze…

Da notare, anche per il successo di utilizzo avuto negli ultimi tempi:

JGroups – framework disupporto alla realizzazione dicomunicazione multicast affidabile

Sistemi Distribuiti LS – Gestione di Componenti e JMX 50

Architettura Architettura JBossJBoss::ModularitModularitàà e Livellie Livelli

Architetturale modulare e a stack, basata su comunicazione di gruppo (JGroups), caching (JBossCache) e supporto ad alta disponibilità (HAPartition)

Page 26: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 51

Esempio: uno dei componenti corecaricati dal servizio M-let di JBossè un’implementazione di ConfigurationService MBean:

Effettua bootstrap del serverFa il download e configura i servizi usando il file di configurazione XML jboss.jcml

jboss.conf...<MLET

CODE=“org.jboss.configuration.ConfigurationService”

ARCHIVE=“jboss.jar,../xml.jar”CODEBASE=“../../lib/ext”>

</MLET>...

jboss.jcml...<mbean code=“org.jboss.naming.

NamingService”name=“DefaultDomain:service=Naming”><attribute name=“Port”>1099</attribute>

</mbean><mbeancode=“org.jboss.naming.JNDIView”name=“DefaultDomain:service=

JNDIView”/>...

Caso di Studio: JMX at work Caso di Studio: JMX at work in in ApplicationApplication Server Server JBossJBoss

Sistemi Distribuiti LS – Gestione di Componenti e JMX 52

Esempio di Utilizzo di Esempio di Utilizzo di JBossJBoss: : ClusteringClustering ServiceService

Approfittiamo della parentesi su JBoss per parlare di questo application server in relazione a una funzionalità molto importante in moltiservizi distribuiti di livello enterprise: clustering

Clustering, perché?esecuzione su server multipli in parallelo fornendo una visionesingola ai clienti applicativi (ad es. motore di ricerca di Google)

cruciale per:

Tolleranza ai guasti e disponibilità

Load Balancing

Scalabilità (miglioramento di performance tramite sempliceaggiunta di nuovi nodi al cluster e load balancing)

JBoss Clustering è una soluzione con buona trasparenza (no ricompilazione di stub, cluster mantenuto automaticamente, approccio modulare) e open-source

Page 27: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 53

Per utilizzare il clustering di JBoss è sufficiente:

Usare la configurazione “all” diJBoss

run.bat -c all

./run.sh -c all

Abilita tutte le librerienecessarie al clustering, come JGroups.jar, jboss-cache.jar, ...

Esempio di Utilizzo di Esempio di Utilizzo di JBossJBoss: : ClusteringClustering ServiceService

Sistemi Distribuiti LS – Gestione di Componenti e JMX 54

Comunicazione Comunicazione allall’’interno del Clusterinterno del Cluster

Un cluster (o partizione) JBoss è semplicemente un insieme di nodi; ogni nodo JBoss è definito come unaistanza del server JBoss (anche più nodi “logici” su una stessamacchina, con differenti porte associate ovviamente)

Uso di canali JGroupUn canale JGroup:

Tiene traccia automaticamente di chi fa parte del cluster (sullabase di configurazione e nome del canale JGroup utilizzato)

Supporta scambio affidabile di messaggi all’interno del cluster

A default JBoss utilizza 4 canali JGroup separati:

Un canale usato dal servizio general-purpose di HAPartition

Tre canali creati da JBoss Cache, anche per replicazione dellostato

Page 28: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 55

Comunicazione Comunicazione allall’’interno del Clusterinterno del Cluster

Configurazione JGroupFile cluster-service.xml nella directory /deploy

descrive la configurazione per la partizione di default del cluster

configurazioni JGroups come attributi innestati di servizi MBean del

clusterAttributo PartitionConfig di MBean ClusterPartition

descrive e configura lo stack di protocolli JGroups

configurazione di default usa UDP con IP multicast

<mbean code="org.jboss.ha.framework.server.ClusterPartition"

name="jboss:service={jboss.partition.name:DefaultPartition}">

<attribute name="PartitionConfig">

<Config>

<UDP mcast_addr="${jboss.partition.udpGroup:228.1.2.3}"

mcast_port="${jboss.hapartition.mcast_port:45566}”

tos="8” …

Sistemi Distribuiti LS – Gestione di Componenti e JMX 56

Comunicazione Comunicazione allall’’interno del Clusterinterno del Cluster

<PING timeout="2000"

down_thread="false" up_thread="false"

num_initial_members="3"/>

<MERGE2 max_interval="100000”

down_thread="false" up_thread="false"

min_interval="20000"/>

<FD timeout="10000" max_tries="5"

down_thread="false" up_thread="false" shun="true"/>

<VERIFY_SUSPECT timeout="1500" down_thread="false"

up_thread="false"/>

<pbcast.STATE_TRANSFER down_thread="false" up_thread="false"/>

Ad esempio, MERGE2 èper il discovery di nuovi

sottogruppi

Ad esempio, PING è il protocollo per la scoperta iniziale dei membri

del cluster

FD è invece il protocollo per failure detection

Page 29: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 57

Comunicazione Comunicazione allall’’interno del Clusterinterno del Cluster

HA PartitionServizio general-purpose di alta disponibilità (High Availability)

utilizzato per diversi compiti in JBoss AS clustering

Astrazione costruita sulla base dei canali JGroups

Supporto per effettuare/ricevere invocazioni RPC da/verso nodicluster

Supporto a registry distribuito (servizi del cluster e su quali nodieseguono)

Notifiche a listener per modifiche nell’appartenenza al cluster o per cambiamenti di servizi nel registry

Nucleo di molti altri servizi di clustering:smart proxy lato cliente

farming

HA-JNDI

Sistemi Distribuiti LS – Gestione di Componenti e JMX 58

Comunicazione Comunicazione allall’’interno del Clusterinterno del Cluster

Esempio di configurazione HA Partition

<mbean code="org.jboss.ha.framework.server.ClusterPartition"

name="jboss:service=DefaultPartition">

<attribute name="PartitionName">

${jboss.partition.name:DefaultPartition}</attribute>

<! – Indirizzo usato per determinare il nome del nodo -->

<attribute name="NodeAddress">${jboss.bind.address}</attribute>

<! -- deadlock detection abilitata o no -->

<attribute name="DeadlockDetection">False</attribute>

<! -- Max time (in ms) di attesa per il completamento del trasferimento distato -->

<attribute name="StateTransferTimeout">30000</attribute>

<! – configurazione protocolli JGroups -->

<attribute name="PartitionConfig”>... ... </attribute>

</mbean>

Per fare parte dello stesso cluster, i nodi devono avere lo stessoPartitionName e gli stessi elementi PartitionConfig

Page 30: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 59

Comunicazione Comunicazione allall’’interno del Clusterinterno del Cluster

Possibilità di deployment omogeneo (replica su tutti i nodi del

cluster – automatico attraverso farming) o disomogeneo(sconsigliato dagli sviluppatori JBoss, ad es. per mancanza di supporto a transazioni distribuite sul cluster)

Clustering JNDIIl cliente usa un proxy HA-JNDI per invocare JNDI lookup

Lato server, il servizio HA-JNDI mantiene un albero JNDI (context tree) sul cluster:Albero sempre disponibile fino a che almeno un nodo è presente nel cluster

Ogni nodo ha la sua copia locale dell’albero JNDI

Il servizio HA-JNDI su di un nodo può effettuare il binding di oggetti presentinella sua copia locale JNDI dell’albero

All’atto del lookup:Se binding non è nell’albero del nodo interrogato, delega a JNDI locale

Se non trovato, coordinamento fra componenti HA-JNDI nel cluster

NameNotFoundException se non presente in nessun JNDI del cluster

Sistemi Distribuiti LS – Gestione di Componenti e JMX 60

Comunicazione Comunicazione allall’’interno del Clusterinterno del Cluster

Clustering JNDI:Componenti HA-JNDI mantengono conoscenza reciproca e copiaparziale dell’albero JNDI locale

Componenti JNDI locali possono avere alberi più estesi rispetto ailoro HA-JNDI

Page 31: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 61

Comunicazione Comunicazione ClientClient--toto--ClusterCluster

Due tipi di configurazione:

1) JBoss fat clientI clienti usano HA smart proxy che contengono logica di load balancing (ad es. Round Robin) e capacità di resilienza (failover)La logica di HA smart proxy può essere modificata e plugged-in daparte del programmatore (differenti politiche di failover e load balancing basate su pesi differenziati e carico)

2) JBoss thin clientTutta la logica di load-balancing + failover è lasciata allosviluppatore che può adottare soluzioni hw o sw (ad es. Apache mod_jk/mod_proxy + Tomcat)

Sistemi Distribuiti LS – Gestione di Componenti e JMX 62

Comunicazione Comunicazione ClientClient--toto--ClusterCluster

Nel caso semplice e specifico di invocazioni RMI:Logica di clustering messa in atto dagli stub cliente (HA-RMI)Stub contiene la lista dei nodi disponibili nel cluster + politica diload balancing

Random/Round Robin/First Available

Se avviene una modifica nella composizione del cluster, allainvocazione seguente il server fa piggybacking della listaaggiornata

Lista dei nodi mantenuta automaticamente lato server tramiteJGroups

Solita soluzione tramite intercettori client-side che si occupanotrasparentemente di load balancing e failover all’invocazione dimetodi nell’interfaccia dello stub

Page 32: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 63

Replicazione dello StatoReplicazione dello Stato

JBoss CacheJBoss Cache è un framework per il supporto a cache distribuita

(che può essere utilizzato anche in altri ambienti AS)

Realizza il caching di oggetti Java acceduti frequentemente per motivi di performance

In JBoss, fornisce servizi di caching perSessioni HTTP

Session bean EJB 3.0

Entity bean EJB 3.0

Ogni servizio di cache è definito in un Mbean separato (con il suocanale JGroups)

JBoss Cache è cluster-aware: lo stato è mantenuto consistente fra i vari nodi nel cluster

Tolleranza ai guasti in caso di server crash

Necessità di invalidazione e/o aggiornamento dello stato nella cache

Sistemi Distribuiti LS – Gestione di Componenti e JMX 64

Replicazione dello StatoReplicazione dello Stato

Failover e Load Balancing di sessioni HTTPReplicazione dello stato della sessione gestita da JBoss

Configurazione “all” di JBoss include session state replication

Occorre configurare session state replication da gestire tramiteJBoss Cache

Load balancing è invece gestito usualmente da software esterno o a livello hardware:

Ad es., Apache+mod_jk (suggerito da JBoss)

Page 33: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 65

Replicazione dello StatoReplicazione dello Stato

In alternativa, sticky sessionSi può chiedere un clustering con sticky session (nessuna

replicazione di sessioni HTTP)Tutte le richieste dello stesso cliente vengono inviate allo stesso nododel cluster

ProDisabilitazione di HTTP session replication => notevoli vantaggi in termini di performance

ControCaduta del server produce perdita

dello stato di sessione

Sistemi Distribuiti LS – Gestione di Componenti e JMX 66

Replicazione dello StatoReplicazione dello Stato

Soluzioni ibride: Sticky session + HTTP state replication

Spesso, in casi reali, si utilizzano soluzioni ibride piùarticolate. JBoss supporta:HTTP replication sincrona e asincrona

HTTP replication asincrona ha migliore scalabilità

Si può inoltre specificare la granularità desiderata per la replicazione (per motivi di performance)

session - intera sessioneattribute – solo gli attributi modificati (dirty attributes) + alcunidati specifici di sessione come lastAccessTime. Particolarmenteadatto per sessioni con stato di ampia dimensione

con decrescenti livelli di overhead

Page 34: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 67

Replicazione dello StatoReplicazione dello Stato

In modo molto pratico, configurazione di HTTP session replication sui vari framework di supporto:Session replication viene abilitata a livello di singola applicazioneWeb in WEB-INF/web.xml, tag <distributable>

Configurazione di JBoss (replicazione sincrona o asincrona) vienefatta in WEB-INF/jboss-web.xml

Replicazione della sessione viene configurata nel container per la sessione Web, ad es. Tomcat, in deploy/tc5-cluster-service.xml

...

<!– Modalità consentite: LOCAL, REPL_ASYNC e REPL_SYNC ! -->

<attribute name="CacheMode">REPL_SYNC</attribute>

...

Sistemi Distribuiti LS – Gestione di Componenti e JMX 68

Replicazione dello StatoReplicazione dello Stato

Clustering di componenti EJB

Stateless Session BeanFacile ☺, data la mancanza di stato, le chiamate possono esserebilanciate su ogni nodo

Stateful Session BeanStato replicato e sincronizzato sul cluster

Ad ogni modifica sullo stato di uno di questi bean, entra in azione session state replication di JBoss Cache

Entity BeanEJB 2.x: impossibilità di utilizzare caching/clustering

EJB 3.0: uso di caching/clustering tramite JBoss Cache

In generale, uso di una annotazione (specifica di JBoss) per informare il container EJB di JBoss che il componenteconsiderato deve essere clustered

Page 35: Java Management Extensions (JMX) - unibo.itlia.deis.unibo.it/Courses/sd0809-info/lucidi/08-JMX(2x).pdfSistemi Distribuiti LS – Gestione di Componenti e JMX 5 Panoramica Generale

Sistemi Distribuiti LS – Gestione di Componenti e JMX 69

BibliografiaBibliografia

Alcuni interessanti riferimenti bibliografici specifici (anche perché non citati nella bibliografia iniziale del corso; per chi eventualmente volesse approfondire nel suo progetto di approfondimento…):

J. Lindfors, M. Fleury, The JBoss Group, “JMX – Managing J2EE with Java Management Extensions”, SAMS, 2001Sun Microsystems, Inc., “Java Management Extensions (JMX) Technology Overview”, Sep. 2004Sun Microsystems, Inc., “Java Management Extensions (JMX) Technology Tutorial”, Sep. 2004Sun Microsystems, Inc., “Java Management Extensions (JMX) Examples”, 2004Sun Microsystems, Inc., “Java Management Extensions (JMX) –Best Practices”, 2006