[Java] Shared queue

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 17-09 19:30
Inleiding
Sinds een paar dagen ben ik bezig met het schrijven van een spider die een aantal sites moet gaan indexeren. Dit gaat aardig goed, helaas gaat het bij sommige sites traag.

Het probleem
Het probleem hierbij is dat er maar b.v. ~ 50 aanvragen per 2 uur mogen worden gedaan per IP, en vervolgens het bericht krijg dat er teveel aanvragen zijn gedaan met het IP adres. Ik moet dus de aanvragen gaan verdelen over meerdere IP adressen en dus ook over meerdere servers (of mijn spider faken als google, dat zal misschien 9 van de 10 sites goedkeuren, echter wil ik mijn programmatuur dit soort dingen niet laten doen).

De brainstorm
Hierboven staat al een deel van de oplossing, ik wil dus de queue gaan verdelen over meerdere servers. Nu leek het me makkelijk om een gedeelde queue te maken waar de verschillende "slaves" bij kunnen. Om even te illustreren:

code:
1
2
3
4
5
6
[ Master ]           [ Slave 1 ]
 #queue    -------->
   link 1  geefLink 
   link 2
   link 3
 #geefResultaat() <-


Ik hoop dat het een beetje duidelijk is, maar de master verzamelt dus een queue met links die moeten worden geindexeerd, en de verschillende slaves verdelen deze queue onderling.

Wat ik dus wil
Ik wil bij slave 1 bij de queue van de Master komen, hiervan 1 item (of meer) af te halen, en zo ook bij slave2 etc. etc. vervolgens wil ik de resultaten weer terugzenden.

Heeft iemand hier ervaring mee, is er misschien iets handigs voor? Zelf heb ik rondgekeken en kwam ik alleen neer op ActiveMQ, wat denk voor dit project te kolossaal is.

Wat ik niet wil
De links stoppen in MySQL, en dit als queue gaan gebruiken... De resultaten moeten dan ook weer in een temp tabel, ik los het liever (als het kan) direct native op.

[ Voor 5% gewijzigd door XiniX88 op 30-07-2009 10:42 ]


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

XiniX88 schreef op donderdag 30 juli 2009 @ 10:40:
Heeft iemand hier ervaring mee, is er misschien iets handigs voor? Zelf heb ik rondgekeken en kwam ik alleen neer op ActiveMQ, wat denk voor dit project te kolossaal is.
Waarom denk je dat ActiveMQ te groot is voor een project als dit? Dit soort dingen is juist een ideale toepassing voor een messaging broker. Je kan gewoon in je server applicatie zo'n broker embedden met een paar regels code. De jar file weegt een paar MB, maar voor de rest valt het allemaal wel mee.

Java:
1
2
3
4
5
6
BrokerService broker = new BrokerService(); 
 
// configure the broker 
broker.addConnector("tcp://localhost:61616"); 
 
broker.start();


Je moet zoiets niet meteen zien als een zware toepassing ofzo, de broker is net zo licht of zwaar als je messaging load.

[ Voor 14% gewijzigd door Gerco op 30-07-2009 11:07 ]

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Marv
  • Registratie: Oktober 2000
  • Laatst online: 19-05-2021
Mijn eerste idee bij dit probleem zou JMS zijn, dus iets als ActiveMQ :)

Een ander idee is wellicht het 'pollen' van een netwerk drive. De master schrijft een file weg, met info over de op te halen informatie (url etc). De slave die als eerste de file gelocked heeft gaat de actie uitvoeren.

"Everything I've ever done or said is the complete opposite of what I've wanted" -- George


Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 17-09 19:30
Gerco schreef op donderdag 30 juli 2009 @ 11:04:
[...]

Waarom denk je dat ActiveMQ te groot is voor een project als dit? Dit soort dingen is juist een ideale toepassing voor een messaging broker. Je kan gewoon in je server applicatie zo'n broker embedden met een paar regels code. De jar file weegt een paar MB, maar voor de rest valt het allemaal wel mee.

Java:
1
2
3
4
5
6
BrokerService broker = new BrokerService(); 
 
// configure the broker 
broker.addConnector("tcp://localhost:61616"); 
 
broker.start();


Je moet zoiets niet meteen zien als een zware toepassing ofzo, de broker is net zo licht of zwaar als je messaging load.
Laat ik het dan anders zeggen, ik heb nergens een goede tutorial gevonden, alleen het boek over ActiveMQ, nu ben ik opzich bereid het boek te kopen, maar wil dan wel zeker weten dat het iets hiervoor is. Ik snap bij die broker namelijk alsnog niet hoe je een queue gaat beunen en die shared tussen 2 of meerdere applicaties. Iemand die ergens een goede website heeft om meer info hierover te krijgen?

Acties:
  • 0 Henk 'm!

  • BHR
  • Registratie: Februari 2002
  • Laatst online: 17-09 21:58

BHR

Het is niet moeilijk. Hier is een kant en klaar voorbeeld
http://activemq.apache.org/version-5-hello-world.html

Met de javadoc erbij heb je het zo aan de gang.

[ Voor 19% gewijzigd door BHR op 30-07-2009 11:50 ]

No amount of key presses will shut off the Random Bug Generator


Acties:
  • 0 Henk 'm!

  • FragFrog
  • Registratie: September 2001
  • Laatst online: 18-09 17:57
XiniX88 schreef op donderdag 30 juli 2009 @ 10:40:
Inleiding
Sinds een paar dagen ben ik bezig met het schrijven van een spider die een aantal sites moet gaan indexeren. Dit gaat aardig goed, helaas gaat het bij sommige sites traag.
Als het om gewone HTTP requests gaat, is het dan niet (veel) simpeler om een stel eenvoudige doorgeef proxy-servers op te zetten? Hebben we ook eens gedaan voor een geotagging service, request naar random een van de stuk of 20 proxies sturen en het resultaat direct teruggeven zonder verdere processing. Enige wat er op die proxies nog gebeurde was een check of er geen error terugkwam, in dat geval werd de status van die proxy in een gesharede (MySQL) database op nonactief gezet voor een uurtje. Dat was een keer 15 regels code voor de proxies en werkte perfect :Y)

[ Site ] [ twitch ] [ jijbuis ]


Acties:
  • 0 Henk 'm!

  • XiniX88
  • Registratie: December 2006
  • Laatst online: 17-09 19:30
FragFrog schreef op donderdag 30 juli 2009 @ 11:51:
[...]

Als het om gewone HTTP requests gaat, is het dan niet (veel) simpeler om een stel eenvoudige doorgeef proxy-servers op te zetten? Hebben we ook eens gedaan voor een geotagging service, request naar random een van de stuk of 20 proxies sturen en het resultaat direct teruggeven zonder verdere processing. Enige wat er op die proxies nog gebeurde was een check of er geen error terugkwam, in dat geval werd de status van die proxy in een gesharede (MySQL) database op nonactief gezet voor een uurtje. Dat was een keer 15 regels code voor de proxies en werkte perfect :Y)
Je hebt helemaal gelijk, t was al eerder door mn hoofd geschoten, maar totaal vergeten. Bedankt, ik ga wat proxyservers opduiken!
Pagina: 1