UNIVERSITÀ DI PISA Facoltà di Scienze MM.FF.NN.
Laurea Magistale in Sicurezza Informatica: Infrastrutture e Applicazioni
Complementi di Programmazione Distribuita - Prof. M. Gatti A.A. 2011/2012
vSphere Inventory Browser for VMware ESX/vCenter 4.x
Salvatore Saeli
Scopo del progetto
Produrre un’Inventory Browser in grado di interfacciarsi con un server ESX/vCenter 4.x sfruttando strumenti e tecniche di ottimizzazione server-side e client-side
¤ Approfondimento dell’infrastruttura di virtualizzazione di VMware
¤ Uso della vSphere Web Services SDK ¤ Uso e approfondimento di Microsoft Visual C# ¤ Installazione di due server ESX e di un server vCenter
vSphere Inventory Browser - Salvatore Saeli
1
Problematiche affrontate
vSphere Inventory Browser - Salvatore Saeli
3
¨ Ottimizzazione del numero di oggetti da creare all’interno del server a ogni sessione
¨ Riduzione del traffico d’informazioni tra il client e il server per contenere l’uso della banda
¨ Gestione dei problemi di coerenza e sincronizzazione dei dati da mantenere sul client
Soluzioni adottate
vSphere Inventory Browser - Salvatore Saeli
4
¨ Server-side ¤ oggetti ViewManager e View
rendono performante l’uso del PropertyCollector ¤ meccanismo di notifica WaitForUpdate
uso efficiente delle risorse di rete, rimane bloccato in attesa di aggiornamenti
¨ Client-side ¤ albero n-ario implementato con tabelle hash
mantiene l’intera struttura in memoria con accesso in tempo costante ai nodi ai vari livelli dell’albero
¤ tecnichedi multi-threading (C#) esecuzione in parallelo delle operazione eseguite in background sincronizzazione dei dati sugli oggetti del server
¤ tecnica di riflessione (C#) accesso alle proprietà degli oggetti di tipo ManagedEntity dall’Inventory UI Tree
Il PropertyCollector
vSphere Inventory Browser - Salvatore Saeli
6
È una service interface che supporta le seguenti tipologie di task da un’applicazione client: ¨ navigare all’interno dell’inventory e ottenere
informazioni su specifici managed object dall’inventory
¨ reperire dati sullo stato del server, nel caso di un’applicazione client sincronizzata con lo stato degli oggetti del server
Performance del PropertyCollector
vSphere Inventory Browser - Salvatore Saeli
7
I fattori che ne possono andare ad intaccarne le performance sono: ¨ il numero di oggetti ¨ il numero di proprietà da trattare su ogni oggetto ¨ la frequenza di cambiamenti degli oggetti e delle
proprietà nel server ¨ la profondità di attraversamento
¤ il numero di proprietà da attraversare
Migliorare le prestazioni di raccolta del PropertyCollector
vSphere Inventory Browser - Salvatore Saeli
8
Utilizzandolo in congiunzione con gli oggetti ViewManager e View permette di minimizzare ¨ l’overhead sul PropertyCollector ¨ l’ammontare di traffico di rete per un’applicazione
client Il ViewManager permette al client di accedere al contenuto dei managed object sul server creando delle View (s.i. di managed entity)
¤ ContainerView, InventoryView, ListView
PropertyFilterSpec usato con una ContainerView
vSphere Inventory Browser - Salvatore Saeli
9
Interazione con il PC tramite il supporto delle View
PropFilterSpec più semplici per definire i filtri
Comunicazione Client-Server molto più efficiente
InventoryView
vSphere Inventory Browser - Salvatore Saeli
10
The InventoryView managed object provides a means of browsing the inventory and tracking changes to open
folders. This managed object is particularly useful for UI clients that display a tree-based navigation panel of the
inventory. (VMware vSphere API Ref)
InventoryView
vSphere Inventory Browser - Salvatore Saeli
11
¨ fornisce le operazioni per aprire e chiudere le folder in un inventory
¨ la sua proprietà view contiene un array dei MORef agli oggetti che compongono l’inventory
¨ quando viene creato il server inizializza la lista degli oggetti della View con la root folder
¨ per aggiungere dei child object occorre eseguire l’operazione OpenInventoryViewFolder passandogli il MORef della managed object entity
InventoryView – host ESX
vSphere Inventory Browser - Salvatore Saeli
12
Nel caso di un host ESX, per ottenere tutti gli oggetti server all’interno della View le operazioni sono : 1. Aprire la root folder
2. Aprire le folder del Datacenter
InventoryView – server vCenter
vSphere Inventory Browser - Salvatore Saeli
13
Nel caso di un server vCenter, per ogni Datacenter occorre iterare l’operazione 2. Risultato: con al più 1+(4*N) chiamate, con N uguale al numero dei Datacenter, è possibile ottenere tutti gli oggetti dell’inventory all’interno dell’InventoryView
Struttura albero n-ario
vSphere Inventory Browser - Salvatore Saeli
15
Analizzando la gerarchia dell’inventory si evince che ci sono dei livelli prestabiliti
Permette di inserire i nodi in ordine in base al loro livello di appartenenza
È possibile gestire l’inventory di un server vCenter allo stesso modo d’invenotory di un host ESX standalone
Struttura nodo dell’albero n-ario
vSphere Inventory Browser - Salvatore Saeli
16
¨ Key: ¤ MORef.Value, valore univoco per ogni oggetto del server
¨ Value: ¤ MORef, si ottengono le proprietà Value e Type ¤ ManagedEntity Object, rappresenta una classe per ogni
tipo di oggetto nell’inventory ¤ Rif. ai Child, permettono di attraversare l’albero in
profondità
Tabelle Hash ad indirizzamento diretto
vSphere Inventory Browser - Salvatore Saeli
17
Generalizzazione del concetto di array ordinario.
L’indirizzamento diretto di un array ordinario permette di esaminare una posizione arbitraria in tempo constante
Funziona bene quando l’universo U delle chiavi è ragionevolmente piccolo e si tratta di valori univoci
I dati satellite vengono memorizzati in un oggetto esterno
N-ary HashTree Node
vSphere Inventory Browser - Salvatore Saeli
18
* più oggetti uguali in un host ESX ** più oggetti uguali in un server vCenter
Key : MORef.Value Value: puntatore ad un array dinamico con locazioni MORef ; ManagedEtity Object; Puntatori ai nodi child (nessuno nel caso di nodi foglia)
N-ary HashTree
vSphere Inventory Browser - Salvatore Saeli
19
Albero n-ario ottenuto tramite l’implementazione dei nodi con delle tabelle di hash
La struttura a puntatori permette di attraversare in profondità l’albero
N-ary HashTree – inserimento nodi
1. Si ottiene la chiave del nodo parent dal ManagedEntity Object 2. In base alla tipologia del nodo da aggiungere, si accede al nodo
di livello superiore tramite la chiave ottenuta 3. si aggiunge il riferimento nel nodo parent
20
vSphere Inventory Browser - Salvatore Saeli
Attraversamento di un albero
vSphere Inventory Browser - Salvatore Saeli
21
¨ Per attraversamento o visita di un albero s’intende l’ispezione dei nodi dell’albero in modo che tutti i nodi vengano ispezionati una ed una sola volta
¨ Definisce un ordinamento totale tra i nodi dell’albero in base alla loro posizione ¤ ogni nodo ha un predecessore e un successore
all’interno di un attraversamento
Attraversamento Preorder 22
vSphere Inventory Browser - Salvatore Saeli
Visita preorder di un BST Adattamento per l’N-ary Tree
Tecniche usate per il Multi-Threading
vSphere Inventory Browser - Salvatore Saeli
24
¨ Delegati Sincroni ¤ discovery delle Managed Entity ¤ chiamate Thread-Safe ai Windows Form Controls
¨ BackgroundWorker ¤ operazione di Login ¤ caricamento dell’inventory ¤ event listener
¨ Delegati Asincroni ¤ notifica di tipo Enter
Descriviamo i casi più interessanti
Discovery delle Managed Entity
vSphere Inventory Browser - Salvatore Saeli
25
Per caricare tutti gli oggetti server all’interno dell’InventoryView viene eseguita l’apertura delle folder di un Datacenter su quattro thread separati
Nel caso di un server vCenter viene l’operazione viene ripetuta per ogni Datacenter
Classe BackgroundWorker
vSphere Inventory Browser - Salvatore Saeli
26
¨ Rende semplice l’uso dei thread in un Window Fom ¨ Per eseguire un’operazione onerosa in background
si crea un BrackgroundWorker ¨ Si resta in attesa degli eventi che segnalano
l’avanzamento e il completamento dell’operazione
Caricamento dell’Inventory
vSphere Inventory Browser - Salvatore Saeli
27
¨ Consiste di più sotto-fasi che sono eseguite all’interno di un BackgroundWorker: 1. Discovery delle ManagedEntity 2. Raccolta delle proprietà delle ManagedEntity 3. Creazione dell’Inventory per tipologia delle
ManagedEntity 4. Costruzione dell’N-ary HashTree 5. Costruzione dell’Inventory UI Tree
¨ L’avanzamento e il completamento delle operazioni sono segnalati aggiornando una ProcessBar
Event Listener
vSphere Inventory Browser - Salvatore Saeli
28
¨ La sincronizzazione con il server è mantenuta usando il meccanismo di notifica WaitForUpdate, eseguito all’interno di un BackGroundWorker.
¨ 3 Thread, uno per ogni tipologia di notifica ¤ Enter, un managed object è visibile a un filtro per la prima volta ¤ Leave, un managed object non fa più parte dell’insieme degli oggetti
del filtro ¤ Modify, una proprietà di un managed object cambia il suo valore
¨ Avanzamento dell’operazione segnalato tramite ¤ Aggiunta di elementi a una ListBox (tipo di notifica, managed object al
quale è applicata) ¤ Modifica della struttura dell’Inventory UI Tree ¤ Aggiornamento di un DataGridView che mantiene l’elenco delle
proprietà e dei corrispettivi valori
Delegati Asincroni
vSphere Inventory Browser - Salvatore Saeli
29
¨ Permettono di eseguire un metodo in modo asincrono
¨ Attraverso un delegato è possibile chiamare un metodo e ritornare immediatamente all’esecuzione del codice successivo ¤ Il metodo esegue in un thread separato
Notifica di tipo Enter
vSphere Inventory Browser - Salvatore Saeli
30
¨ All’inserimento di un nuovo nodo all’Inventory UI Tree (ed eventualmente dei sui nodi figli), occorre creare il nodo e aggiungerlo al suo nodo parent
¨ Può accadere che la notifica d’inserimento non sia data in ordine di livello di profondità quindi non viene trovato il parent
¨ Viene impiegato un delegato asincrono 1. fa uno o più tentativi di ricerca fin quando non trova il
rispettivo nodo parent del nodo entrante 2. aggiunge il nodo entrante tra i nodi figli del nodo parent
Riflessione
vSphere Inventory Browser - Salvatore Saeli
32
¨ Fornisce oggetti di tipo Type che incapsulan l’assembly, i moduli e i tipi
¨ È possibile usare la riflessione per ottenere il tipo da un oggetto esistente, per poi richiamarne i metodi o per accedere ai campi e alle proprietà dell’oggetto
¨ Si ottiene un’unica procedura che permetta di asaminare tutte le proprietà accessibili, in lettura o in scrittura, di un oggetto ManagedEntity
TreeNode e la proprietà Tag
vSphere Inventory Browser - Salvatore Saeli
33
¨ Inventory UI Tree implementato con un controllo TreeView
¨ La proprietà Tag dell’oggetto TreeNode permette di ottenere o settare l’oggetto che contiene i dati sul nodo dell’albero
¨ Viene caricato nella proprietà Tag di ogni TreeNode un’istanza del rispettivo oggetto ManagedEntity
Dettaglio delle VirtualMachine appartenti all’host
Form More Info 38
vSphere Inventory Browser - Salvatore Saeli