[skylive] ** MAIL TECNICA ** nuovo Server: struttura

From: <nextime_at_nexlab.it>
Date: Wed, 21 Nov 2007 23:32:29 +0100

Ciao a tutti.

D'accordo con Ivan, ho iniziato una riscrittura del "chat server" a
livello software.

Con questo post indico un paio di cose sulla struttura di sviluppo che
sto utilizzando:

Piattaforma: Multipiattaforma (sviluppato sotto Linux, ma portabile
ovunque giri python)
Linguaggio: Python

Struttura sistema:

Il processo principale, lanciato in background come "demone", si occupa
di gestire la comunicazione tra le varie componenti del sistema,
interrogare i sistemi esterni per quanto riguarda autenticazione e
simili, offrire interfacce (via socket) per la comunicazione con le
altre componenti quali i client e il software lx200 di Ivan.

il core e' quindi gestisce una coda di comunicazione inter-thread, e
lancia un thread per ogni interfaccia socket di comunicazione con le
altre componenti esterne. Per ogni interfaccia di comunicazione su
socket viene implementato un modulo separato con il protocollo di
comunicazione necessario.

I thread coinvolti nel core sono:

1- Main thread
--------------

Si occupa dello startup e dello shutdown del sistema, della gestione dei
log su file, di gestire i thread figli e la comunicazione con loro
tramite un sistema di code.
Lancia inoltre alla necessita degli spare thread temporanei per le
richieste http o simili che si rendessero necessarie volta per volta
( ad esempio per l'autenticazione dei client )

2- ClientThread:
----------------

Gestisce le connessioni dei client tramite il modulo clientproto

3- lx200Thread:
---------------

Gestisce le connessioni provenienti dai telescopi e piu' precisamente
dal software "lx200" di Ivan, tramite il modulo lx200proto

4- TimersThread:
----------------

Implementa un timer separato utilizzato per tutte le operazioni
di sincronizzazione e update interne

5- AdminThread:
---------------

Implementa una interfaccia di comunicazione su socket locale per
l'amministrazione e il cambio configurazioni a caldo dal software
esterno di amministrazione

6- SpareThreads:
----------------

Il sesto thread e' lanciato all'occorrenza dal Main e viene chiuso
appena ha finito la propria operazione. Serve esclusivamente per le
operazioni di tipo "autenticazione utente" e simili che richiedono
di eseguire richieste HTTP o simili a servizi esterni.

Un eventuale settimo thread potra' essere inserito in futuro nel caso ci
sia bisogno di una scalabilita' tale da necessitare la distribuzione su
piu' sistemi fisici e/o geografici separati, e gestira' una interfaccia
di comunicazione inter-MainThreads tramite pyro
(http://pyro.sourceforge.net)

Ogni thread puo' gestire client multipli su sessioni TCP differenti,
mantenendo comunque una "memoria" di sessione globale nel MainThread.
La gestione delle multiple connessione e' eseguita con un engine event
driven asincrono con un sistema a callback.

Il framework utilizzato per realizzare questa parte e' Twisted
(http://www.twistedmatrix.org).

I moduli di protocollo vengono tutti implementati come protocolli addons
per twisted stesso.

L'amministrazione e la configurazione del sistema viene eseguita in toto
da un processo esterno che utilizza lo stesso modulo di protocollo
dell'AdminThread.
Tale sistema viene quindi gestito da un processo totalmente esterno e
indipendente, il che permette il pieno controllo del server, riavvio
compreso.

Il protocollo di comunicazione tra i due viene fatto utilizzando o
XML-RPC o direttamente pyro.

L'amministrazione implementa una interfaccia web "protetta" in HTTPS e
con user e password, sviluppata con tecnologia AJAX, che permette la
totale amministrazione remota del sistema.

Per tale interfaccia verra' utilizzato un framework web in python, la
scelta non e' ancora definitiva, ma molto probabilmente ricadra' su
pylons (http://pylonshq.com/)

Ciaps

Franco

-- 
Franco (nextime) Lanza
Busto Arsizio - Italy
SIP://casa@casa.nexlab.it
NO TCPA: http://www.no1984.org
you can download my public key at:
http://danex.nexlab.it/nextime.asc || Key Servers
Key ID = D6132D50
Key fingerprint = 66ED 5211 9D59 DA53 1DF7  4189 DFED F580 D613 2D50
-----------------------------------
echo 16i[q]sa[ln0=aln100%Pln100/snlbx]sbA0D212153574F444E49572045535520454D20454B414D204F54204847554F4E452059415020544F4E4E4143205345544147204C4C4942snlbxq | dc
-----------------------------------

Received on Thu 22 Nov 2007 - 00:28:04 CET

This archive was generated by hypermail 2.2.0 : Thu 22 Nov 2007 - 01:28:02 CET