Quando progetto l'architettura di un software mi piace pensare in grande e uno degli obiettivi che mi pongo sempre è quello della scalabilità, che in poche parole significa non porre limiti a priori a quanto grande potrà diventare il software in oggetto. Il progetto che stiamo sviluppano in laboratorio si pone come obiettivo quello di interfacciarsi a tutta una serie di strumenti remoti, raccogliere un certo numero di informazioni e salvarle all'interno di un database. Detta così sempre molto facile, ed infatti lo è, e solo per rendere le cose un pelino più complesse va sottolineato che gli strumenti non sono tutti identici (ne esistono almeno una decina di famiglie con mediamente dieci membri ciascuna) e per nessuno di essi esiste un driver specifico di comunicazione, ma solo una descrizione, più o meno accurata del protocollo utilizzato.
Il primo passo è stato quello di scrivere il driver della prima famiglia e costruire quello che abbiamo chiamato amichevolmente un demone, ovvero un piccolo programmino che può tranquillamente girare in background e che si impegna ad interrogare il suo strumento in base a scadenze programmate e registrate in una sezione apposita del database. Per ogni famiglia di strumenti ci serve un driver e un demone e ogni membro della famiglia necessita della sua istanza del demone.
A questo punto abbiamo preparato un lanciatore di demoni, amichevolmente pokemon, che dal database si legge tutte gli strumenti collegati e in base al loro tipo fa partire un'istanza del demone opportuno. Appena il pokemon è stato pronto abbiamo voluto verificare che non ci fosse nessun impedimento nel collegare alla rete due strumenti uguali e far partire due istanze dello stesso demone, ma la vera prova di scalabilità è stata fatta oggi, quando dopo aver ultimato il driver e il demone per il secondo strumento, avevamo tre oggetti collegati al nostro sistema appartenenti a due famiglie differenti...
E adesso, pronti via si parte, tutto ancora da capo, con una terza famiglia!