nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Re: Consigli su implementazione e uso di Thread con setgid/setuid

Von: Manlio Perillo (manlio_perillono@spamlibero.it) [Profil]
Datum: 06.02.2008 15:26
Message-ID: <rsjqj.239442$%k.371601@twister2.libero.it>
Newsgroup: it.comp.os.linux.development
Il Wed, 06 Feb 2008 05:56:04 -0800, daniele_dll ha scritto:

>> Dai una occhiata ad nginx.
>> Il codice è abbastanza complesso, ma è scritto bene.
>>
>> nginx è asincrono comunque, non so se ti vada bene (dipende da cosa
>> devi servire).
>
> avevo già scaricato, solo che per adesso ho avuto poco tempo libero,
> comunque ci darò un occhiata al più presto
>
>> http://www.opengroup.org/onlinepubs/000095399/functions/setuid.html
>>
>> If the process has appropriate privileges, setuid() shall set the real
>> user ID, effective user ID, and the saved set-user-ID of the calling
>> process to uid.
>
> quindi non posso cambiare l'utente direttamente al thread devo creare un
> fork, switchare utente e da li poi creare i thread che mi servono
>

Già, sembra così.

>> Ma questi esecutori devono eseguire codice "custom" o semplicemente
>> servono dei file statici?
>
> no, dovrà interfacciarsi con php e python principalmente, oltre a
> servire file statici. Gli esecutori, in base alle informazioni estratte
> dall'header, decideranno cosa fare e quindi a quale modulo appoggiarsi
> (file dal disco, php, python o altro)
>

Io per nginx ho sviluppato un modulo per eseguire applicazioni WSGI:
http://hg.mperillo.ath.cx/nginx/mod_wsgi/


Ovviamente una applicazione Python *può* bloccare l'intero main loop, ma
la cosa è mitigata in parte dal fatto che è possibile eseguire n
processi
worker (ma il loro numero è fisso).

In futuro vorrei implementare del supporto per eseguire applicazioni
Python asincrone, ma non è semplice (specialmente per poi rendere l'API
non troppo complessa).

nginx non supporta i threads (c'è del codice, ma al momento è
rotto).

> [...]
>
>> I thread non vengono gratis, rischi di far esplodere il server in caso
>> di un alto numero di richieste concorrenti.
>
> Beh, è vero, ma è anche vero che se devo rispondere ad una
data
> connessione con del codice php e l'interprete mi deve girare sotto uno
> specifico utente non c'ho molti altri modi :\
>

La soluzione semplice esiste: ciascun utente esegue la sua instanza del
server.

Ad esempio su unbit stanno testando nginx + mod_wsgi secondo questa
modalità:
http://unbit.it/listino_application_server/#nginx


Oppure, sempre in un modello asincrono, chiami setuid *esplicitamente*
prima di eseguire il gestore della richiesta.

Non è banalissimo, perchè in teoria una richiesta potrebbe essere
gestita
"a pezzi", ma dovrebbe essere possibile.

In un modello asincrono (concorrenza cooperativa) sei sicuro che solo un
pezzo di codice gira in ogni istante; con i thread (concorrenza
preempitiva) invece la cosa non è possibile


> [...]



Manlio Perillo

[ Auf dieses Posting antworten ]