Vra

Ek het 'n dowwe probleem hier.Ek beoog om 'n raamwerk te bou om die integrasie van verskillende verkeersimulasiemodelle moontlik te maak.Hierdie integrasie is gebaseer op die deel van skakelverbindings, skakelkoste en voertuie tussen simulasies.

Om 'n verspreide simulasie te maak, beplan ek om 'n 'koördineerder' (stertopologie) te hê.Alle deelnemende simulasies registreer eenvoudig daarmee, en praat net met die koördineerder.Die koördineerder koördineer dan die uitvoering van verskeie take tussen elke simulasie.

'n Vinnige voorbeeld van 'n verspreidingsprobleem is wanneer een simulasie 'in beheer' is van sekere voorwerpe, soos 'n pad.En 'n ander is 'in beheer' van ander paaie.Hierdie paaie is egter onderling verbind (en daarom het ons sinchronisasie tussen hierdie simulasies nodig, en moet ons in staat wees om data uit te ruil / metodes op afstand aan te roep).

Ek het na RMI gekyk en dink dit is dalk geskik vir hierdie taak.(Om te abstraheer om 'n oor-draad sein dissipline te skep).

Is dit verstandig?Die probleem hier is dat simulasiedeelnemers moet sentraliseer sommige van hul databerging in die 'koördineerder' om eksplisiete sinchronisasie tussen simulasies te verseker.Verder kan sommige simulasies komponente of metodes van ander simulasies vereis.(Vandaar die idee om RMI te gebruik).

My basiese benadering is om die 'koördineerder' 'n reuse RMI-register te laat bestuur.En elke simulasie soek eenvoudig alles in die register op, om te verseker dat die korrekte voorwerpe by elke stap gebruik word.

Het iemand enige wenke om hierdie pad af te gaan?

Was dit nuttig?

Oplossing

Wil jy dalk ook kyk na Hazelcast . Hazelcast is 'n oop bron transaksionele, versprei / verdeel implementering van tou, onderwerp, kaart, stel, lys, slot en eksekuteur diens. Dit is super maklik om mee te werk; voeg net hazelcast.jar in jou classpath en begin kodering. Byna geen verstellings vereis.

As jy belangstel in die uitvoering van jou uitvoerbare, Call Able take in 'n verspreide mode is, dan gaan jy na Distributed Eksekuteur Service dokumentasie by http://code.google.com/docreader/#p=hazelcast

Hazelcast is vrygestel onder Apache lisensie en onderneming graad ondersteuning is ook beskikbaar.

Ander wenke

Is dit verstandig? IMHO no. En ek sal jou vertel hoekom. Maar eers sal ek die disclaimer dat dit 'n ingewikkelde onderwerp so 'n antwoord moet word beskou as skaars krap die oppervlak te voeg.

Eerste plaas van myself te herhaal ek sal jou wys 'n opsomming van Java rooster / cluster tegnologie dat ek 'n rukkie gelede geskryf. Dit is 'n meestal volledige lys.

Die ster topologie is "natuurlike" vir 'n "naïewe" (ek bedoel nie dat in 'n slegte manier) implementering omdat punt-tot-punt is eenvoudig en sentralisering sleutel kontroleerder logika is ook eenvoudig. Dit is egter nie fout tolerante. Dit stel scalability probleme en 'n enkele knelpunt. Dit stel kommunikasie inefficiences (naamlik die punte te kommunikeer deur middel van 'n twee-stap proses deur die middel).

Wat jy regtig wil, want dit is waarskynlik 'n cluster (eerder as 'n data / bereken rooster) oplossing en ek raai jy kyk na Terracotta . Ideaal wat jy wil kyk na Oracle Coherence maar dit is geen twyfel duur ( in vergelyking met gratis). Dit is 'n fantastiese produk al.

Hierdie twee produkte kan gebruik word op verskeie maniere, maar die kern van beide is vir die behandeling van 'n kas soos 'n verspreide kaart. Jy sit dinge in, wanneer jy iets uit en jy brand af-kode wat die kas verander. Samehang (waarmee Ek is meer vertroud) in hierdie verband skale fantasties goed. Dit is meer "bediener" gebaseerde produkte al vir 'n ware cluster.

As jy kyk na 'n meer verspreide model dan miskien moet jy kyk na meer van 'n SOA gebaseerde benadering.

Het jy 'n blik op http://www.terracotta.org/

Dit is 'n verspreide Java VM, so dit het die voordeel dat dit gegroepeer aansoek lyk nie anders as 'n standaard Java program.

Ek het dit gebruik in programme en die spoed is baie indrukwekkend tot dusver.

Paul

Het jy dit oorweeg om 'n boodskapwag-benadering te gebruik?Jy kan JMS gebruik om take en resultate tussen 'n stel bedieners/nodes te kommunikeer/koördineer.Jy kan selfs Amazon se SQS (Simple Queue Service) gebruik:aws.amazon.com/sqs) en laat jou bedieners op EC2 loop om jou in staat te stel om op en af ​​te skaal soos vereis.

Net my 2 sent.

Neem 'n blik op JINI, is dit dalk van 'n paar gebruik om jou.

Wel, Jini, of meer spesifiek Javaspaces is 'n goeie plek om te begin vir 'n eenvoudige benadering tot die probleem. Javaspaces kan jy 'n meester-werker model, waar jou meester (koördineerder in jou geval) skryf take aan die Javaspace, en die werkers navraag vir implementeer en te verwerk daardie take, skryf die resultate terug vir die meester. Sedert jou probleem is nie verpletterend parallel, en jou werkers moet sinchroniseer / uitruil van data, sal dit 'n paar kompleksiteit te voeg tot jou oplossing.

Die gebruik van Javaspaces sal 'n hele klomp meer onttrekking te voeg tot jou implementering dat die gebruik van gewone RMI (wat gebruik word deur die Jini raamwerk intern as die verstek "draad protokol").

Het jy 'n blik op hierdie artikel href="http://java.sun.com/developer/technicalArticles/tools/JavaSpaces/" rel="nofollow van son vir 'n intro.

En Jini Tutorial Jan Newmarch se is 'n goeie plek om te begin leer Jini

Net soos 'n toevoeging tot die ander antwoorde wat sover ek al fokus op rooster en wolk rekenaar gesien het, moet jy oplet dat simulasiemodelle een unieke kenmerk: simulasie tyd.

Toe hardloop versprei simulasiemodelle in parallel en gesinchroniseer dan sien ek twee opsies:

  • Wanneer elke simulasie model het sy eie simulasie klok en gebeurtenis lys dan hierdie moet gesinchroniseer oor die netwerk.
  • Alternatiewelik daar 'n enkele simulasie klok en gebeurtenis lys wat sal "merk die tyd" vir almal versprei (sub) modelle kan wees.

Die eerste opsie omvattend nagevors vir die hoë vlak Architecture (HLA) sien byvoorbeeld http: / /en.wikipedia.org/wiki/IEEE_1516 as 'n voorgereg.

Maar die tweede opsie lyk meer eenvoudige en met minder oorhoofse na my.

GridGain is 'n goeie alternatief. Hulle het 'n kaart / verminder implementering met "direkte API ondersteuning vir split en samevoeging" en "verspreide taak sessie". Jy kan blaai hul voorbeelde en kyk of sommige van hulle pas met jou nodig het.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top