[Libri] Recensione libro Release It! parte 2


Thread bloccati


Situazioni del genere, che accadono quando vari thread cercano di accedere concorrentemente ad una risorsa esterna,
spesso sono difficili sia da testare che da valutare in fase di sviluppo. La soluzione è adottare un buon stile di
programmazione, ad esempio usando librerie solide (in java 5 ad esempio la java.util.concurrent).
Ci sono molte librerie disponibili; il consiglio è di dubitarne, scrivendo test il cui scopo è proprio quello
di romperle.
Un decisivo smell nel design è rappresentato da metodi sincronizzate negli oggetti di dominio.
In tal caso è opportuno rivedere il design. Il primo effetto negativo è dato dal fatto che se l'applicazione
gira su più server è inutile l'integrità dei dati su una sola istanza se l'altra può comunque modificare i dati.
L'altro effetto è del tutto legato alle performance e alla possibilità di essere scalabili: thread che richiedono
oggetti di dominio non dovrebbero mai bloccarsi vicendevolmente.
Di nuovo viene citata l'esigenza di avere dei timeout (quindi basta chiamate java del tipo wait() ).


Davvero illuminante l'esempio di violazione di LSP nel caso in cui in java un metodo di una sottoclasse
è definito sincronizzato mentre lo stesso metodo della superclasse o dell'interfaccia non lo è.
E' una violazione perchè ogni proprietà valida per un oggetto di classe T deve essere valida (no side effect)
su tutte le sottoclassi di T.



Self Denial Attack

Tipicamente quando il reparto marketing organizza una offerta speciale mandando mail con un link
che punta alla pagina dell'offerta. Evitare in quei casi hard link ma far approdare a pagine intermedie.


Point-to-point communication

La comunicazione di questo tipo funziona solo se si hanno uno o due application server che comunicano tra loro.
Se tutte le istanze devono comunicare una con l'altra il numero totale di connessioni cresce come
il quadrato del numero di istanze. In tal caso è opportuno usare altre forme di comunicazione.

Slow Response

E' da valutare quando notificare all'utente di 'riprovare più tardi' ; questo perchè per i siti
la slow response si autoalimenta. Può essere causa di mancanza di memoria ma se si verifica la alimenta anche.
Sla inversion

SLA = Service-level agreement , contratti in cui si definiscono misurazioni relative ai servizi software
consegnati da garantire. In caso di fallimento sono previste penalità. Ad esempio la quantità di tempo
in cui un sito può non essere up&running oppure i tempi di risposta etc..
Un servizio può essere di per sè adatto a rispettare lo SLA definito ma deve considerare la SLA dei
servizi presso cui si interfaccia.


Unbounded Result Set

Bisogna pensare che ogni query può potenzialmente catturare milioni di record. Può essere controintuitivo questa
affermazione in certe circostanze, eppure talvolta la popolazione dei record può essere effettuata
da terze parti il cui comportamento può generare tali situazioni.E' quindi opportuno
che il client definisca quanti risultati può accettare.

Nessun commento: