Un advisor personalizzato è una piccola
parte di codice Java, fornito come file di classe, richiamato dal codice di base di Load Balancerper determinare il carico su un server. Il codice di base fornisce tutti i servizi
amministrativi necessari, come l'avvio e l'arresto di un'istanza
dell'advisor personalizzato, l'indicazione di stato e report, la
registrazione di informazioni cronologiche in un file di log e la notifica dei risultati dell'advisor al componente del gestore.
Informazioni su questa attività
Gli advisor personalizzati vengono richiamati in seguito alla ricerca degli advisor nativi, o standard. Se il Load Balancer non trova un advisor specificato nell'elenco di advisor standard, verrà consultato l'elenco di advisor personalizzati. Quando il codice di base di
Load Balancer richiama un advisor personalizzato, si verifica quanto riportato di seguito:
- Il codice di base di Load Balancer apre una connessione con la macchina server.
- Se il socket viene aperto, il codice di base richiama la funzione GetLoad
dell'advisor specificato.
- La funzione GetLoad dell'advisor effettua le operazioni definite dall'utente per la valutazione dello stato del server, compresa l'attesa di una risposta dal server stesso. L'esecuzione della funzione termina quando viene ricevuta la risposta.
- Il codice di base di Load Balancer chiude il socket con il server e riporta le informazioni sul carico al gestore. A seconda della modalità di funzionamento dell'advisor personalizzato (normale o di sostituzione), il codice di base esegue dei calcoli aggiuntivi una volta terminata la funzione GetLoad.
Gli advisor personalizzati possono essere progettati per interagire con il Load Balancer
in modalità normale o di sostituzione. La scelta della modalità di funzionamento viene specificata nel file dell'advisor personalizzato come un parametro nel metodo constructor. Ogni advisor funziona soltanto in una di queste modalità in base alla propria progettazione.
- Modalità normale: l'advisor personalizzato scambia i dati con il server e il codice dell'advisor di base tempifica lo scambio e calcola il valore di carico.
Il codice di
base invia questo valore del carico al gestore. L'advisor
personalizzato restituisce il valore zero a indicare una riuscita o un valore negativo per indicare un errore.
Per specificare la modalità normale, impostare l'indicatore di sostituzione nel constructor
su false.
- Modalità di sostituzione: il codice di base non esegue alcuna misurazione temporale.
Il codice dell'advisor personalizzato esegue qualsiasi operazione specificata, in base ai soli requisiti univoci, e restituisce quindi un numero per il carico reale. Il codice di base
accetta il numero di carico e lo riporta, inalterato, al gestore. Per ottenere risultati migliori, normalizzare i numeri di carico tra 10 e 1000, dove 10 indica un server veloce e 1000 indica un server lento.
Per specificare la modalità di sostituzione, impostare l'indicatore di sostituzione nel constructor
su true.
Come tutti gli advisor, un advisor personalizzato estende la funzione della classe di base dell'advisor, detta ADV_Base. L'advisor di
base esegue effettivamente la maggior parte delle funzioni
dell'advisor, come ad esempio la notifica dei carichi al gestore
affinché li utilizzi nell'algoritmo di valutazione. Inoltre, l'advisor di base effettua le operazioni di connessione e chiusura del socket e
fornisce i metodi di invio e di ricezione che saranno utilizzati dall'advisor. L'advisor in sé viene utilizzato unicamente per l'invio e la
ricezione dei dati sulla porta specifica del server esaminato. I metodi TCP interni all'advisor di base sono programmati per
calcolare il carico.
Se desiderato, un'indicatore all'interno del costruttore dell'advisor di base sostituisce
il carico esistente con il nuovo carico restituito dall'advisor.
Nota: in base al valore impostato nel costruttore, l'advisor di base fornisce il carico
all'algoritmo di valutazione a intervalli specificati. Se l'advisor non ha completato
l'elaborazione e non può restituire un carico valido, l'advisor di base utilizza il
carico inviato precedentemente.