Jump to content
Sign in to follow this  
usu

Gestione di una coda di azioni

Recommended Posts

Premetto subito che le mie conoscenze a livello di programmazione non vanno oltre i fondamentali della OOP (metodi, classi, incapsulamento, ereditarietà, polimorfismo, ecc) e non sono neanche sicuro che il titolo sia giusto :emoticons_dent2020:

 

Detto questo, è qualche tempo che ho un tarlo in testa che non riesco a levarmi: che logica utilizzano servizi tipo twitterfeed, notify.me, pingdom, boxcar e tantissimi loro simili?

Sono tutti servizi che eseguono un numero grandissimo di polling di un qualche tipo ad intervalli di tempo prestabiliti.

L'unica cosa sensata che mi viene in mente è che per lo scopo ci sia un demone homemade che fa costantemente qualcosa in background, ma cos'è questo qualcosa? :D

Un altro modo di porre la domanda è: tu come svilupperesti un servizio come twitterfeed?

 

Spero di essere riuscito a farmi capire :)

Share this post


Link to post
Share on other sites

IMHO, hanno un poller che ogni X tempo prende Y valori da db e li esegue, in parallelo. A farlo in PHP, usando i thread, non sarebbe nemmeno troppo complesso.

 

Il parent prende i dati dal database, magari 10, forka 10 child che eseguono l'operazione e ne aspetta la risposta. Man mano che il child termina, vien pescato un nuovo record da db.

 

Il più sarebbe la gestione dei semafori, o si fan su disco o magari appena il child entra in esecuzione fa l'update del record su db, impostando una colonna "running" a "1".

Share this post


Link to post
Share on other sites
Con MapReduce però devi attendere l'elaborazione del tutto, non so quanto sia realmente utilizzato per questo tipo di cose, no?

 

Pensavo la stessa cosa, lo vedrei benissimo per un'eventuale generazione generazione di statistiche ad uso interno e non, ma per un servizio del genere non mi era proprio venuto in mente, c'è qualcosa che mi sfugge?

Poi addirittura C*? Almeno scala, dai :zizi:

Share this post


Link to post
Share on other sites
Con MapReduce però devi attendere l'elaborazione del tutto, non so quanto sia realmente utilizzato per questo tipo di cose, no?

 

Non so quanto sia live il "feed" che eseguono siti del genere, perché non li ho mai usati, comunque:

 

Si potrebbe suddividere l'insieme dei siti degli utenti iscritti per frequenza di aggiornamento dei propri RSS, schedulando tipo 5 job a priorità diversa e facendo eseguire con frequenza superiore quelli per i siti più attivi (che statisticamente saranno in numero molto inferiore rispetto alla totalità dei siti da servire e si ritroveranno con feed quasi istantanei). Poi in background eseguire un ulteriore task ogni giorno o tot giorni che calcola la classe di appartenenza di un sito, per spostare lo stesso da un sottoinsieme all'altro.

Share this post


Link to post
Share on other sites

Si sarebbe una buona idea, anche perchè considero che non siano job particolarmente impegnativi, per cui si possono eseguire anche quasi online con un cluster decente. C'è qualcuno che usa mapreduce in questo modo tra questi famosi citati?

Share this post


Link to post
Share on other sites
Pensavo la stessa cosa, lo vedrei benissimo per un'eventuale generazione generazione di statistiche ad uso interno e non, ma per un servizio del genere non mi era proprio venuto in mente, c'è qualcosa che mi sfugge?

Poi addirittura C*? Almeno scala, dai :zizi:

 

Le operazioni da eseguire sono così semplici che si potrebbe azzardare anche una scrittura in C++ :)

 

Alla fine si tratta di prendere il file xml degli rss, controllare con un sha1 se è cambiato qualcosa rispetto all'ultimo hash salvato, in caso affermativo elaborare il file xml per estrapolare i dati (ad esempio con la libreria xerces).

 

Una volta tornato l'output dal reduce andiamo a bombardare i vari siti con le nuove news da aggiungere (e qui si può usare ancora C o altri linguaggi). :)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×