Scalabilitatea aplicațiilor Java EE. Cum ai apropia?

voturi
1

Am lucrat la soluția pentru industria financiară. Funcția principală a aplicației este abilitatea de a încărca fișiere masive de intrare, le digera, să actualizeze starea în magazin persistente și de a genera extrase din magazin persistente la cerere. Destul de direct.

Fișierele de intrare sunt standard pentru industrie formatate XML mare (mai mult de sute de megaocteți) mesaje care conțin mai multe intrări repetate. Stocarea persistentă este baza de date relațională. Motorul a fost implementat ca POJO-based (cadru de primăvară ca back-os) Java aplicație dislocabile pe serverul de aplicatii J2EE.

Problema este despre scalabilitatea și performanța soluției. În cazul în care aplicația procesează intrările din XML în secvența scalabilitatea soluției este destul de slabă. nu există nici o modalitate de a se angaja mai mult de o instanță a cererii în prelucrarea singur fișier. Acesta este motivul pentru care am introdus de procesare paralelă pentru intrările forma fișier XML de intrare. Practic, ideea este de a trimite procesarea înscrierilor individuale pentru lucrătorii din piscină. Am decis să utilizeze JMS pentru expedierea. Componenta care încarcă fișierul citește fluxul și pur și simplu extrage intrări unice și alimentează coada de dispecerizare. Există un număr de consumatori concurente la celălalt capăt al cozii. Fiecare alege un mesaj din coadă și procesează intrarea și este imediat disponibil pentru a procesa alte intrare. Acest lucru este destul de similar cu servlete în container web. Ceea ce am găsit deosebit de puternic cu privire la această abordare este faptul că lucrătorii pot locui în termen de instanțe separate ale aplicației instalate pe servere la distanță, atâta timp cât coada este partajată. Din păcate, toți lucrătorii conectați la aceeași bază de date care mentine stocarea persistenta si acest lucru ar putea fi o strangulare în cazul în care serverul de baze de date nu este suficient de puternic pentru a gestiona sarcinii de muncitori concurente.

Care este opinia dumneavoastră cu privire la această arhitectură? Ai avut aplicație similară pentru a proiecta? Care a fost alegerea ta de design, atunci?

Întrebat 12/03/2009 la 14:56
sursa de către utilizator
În alte limbi...                            


7 răspunsuri

voturi
2

Cred că arhitectura este, în general de sunet. În cazul în care baza de date are probleme de-a face cu un număr mare de actualizări concurente de la muncitori, ai putea introduce o două coadă pe cealaltă „parte“ a aplicației: ca fiecare lucrător completează sarcina lor, acestea se adaugă rezultatele această sarcină coadă. Apoi, un singur proces muncitor apucă periodic obiectele de rezultat din coada de două și actualizează baza de date într-o operațiune de mare lot? Aceasta ar reduce bazei de date și s-ar putea concurrency crește eficiența actualizărilor.

Publicat 12/03/2009 la 15:08
sursa de către utilizator

voturi
3

Puteți avea, de asemenea, o privire la Hadoop, o platforma foarte util pentru harta / Reduce locuri de muncă. Avantajul imens este, că toată infrastructura este asigurată de Hadoop, astfel încât să se aplice doar noi noduri hardware la scară. Implementarea hărții și de a reduce locurile de muncă ar trebui să fie făcut doar o singură dată, după ce acest lucru, puteți hrăni vă grupeze cu sarcină masivă.

Publicat 12/03/2009 la 15:16
sursa de către utilizator

voturi
1

De asemenea, să ia o privire la soluția de grupare Terracota.

Publicat 13/03/2009 la 17:46
sursa de către utilizator

voturi
1

Pentru procesarea paralelă, așa cum a spus Mork0075, Hadoop este o soluție de mare. De fapt, multe companii sunt utilizați pentru analiză foarte mare jurnal. Și un interesant proiect Hive au fost construi pe baza Hadoop de depozitare a datelor.

Oricum, cred ca design-ul actual este destul de scalabil. În ceea ce privește îngrijorarea cu privire la toți lucrătorii lovesc pe baza de date, puteți pune doar o altă coadă de mesaje între muncitori și baze de date. Lucrătorii pune rezultatele de prelucrare în coadă, și vă construi un alt program pentru a vă abona la coadă și să actualizeze baza de date. Dezavantajul este că două cozi ar putea face sistem prea complicat. Desigur, puteți adăuga doar un alt subiect la sistemul MQ existent. Aceasta va face sistemul mai simplu. O altă abordare este utiliza un sistem de fișiere partajate, cum ar fi NFS, fiecare mașină lucrător monta același director de pe serverul de fișiere partajate, și fiecare lucrător scrie rezultatele sale de prelucrare într-un fișier separat de pe serverul de fișiere partajate. Apoi, va construi un program pentru a verifica noi fișiere pentru a actualiza baza de date cu. În această abordare vă prezint o altă complexitate: partajat server de fișiere. Puteți judeca care unul este mai simplu în cazul dumneavoastră.

Publicat 13/05/2009 la 16:51
sursa de către utilizator

voturi
1

Îmi petrec recent o parte din timpul meu liber de investigare Lot de primăvară 2.0. Aceasta este noua versiune a motorului de dozare Java bazate pe cadru de primăvară. Baieti care au implementat Lot de primăvară concentrat pe și paralelizare de concurență execuție pentru această versiune. Trebuie să spun că arată promițător!

Publicat 14/05/2009 la 08:39
sursa de către utilizator

voturi
0

Dacă deja utilizați Spring / Java EE, este normal să se aplice Lot de primăvară ca o soluție pentru dvs. „arhitectura de concurs“.

Două beneficii dreapta de lilieci:

  1. Lot de primăvară (pornind de la 2.0) pune în aplicare partiționare, ceea ce înseamnă că acest cadru va avea grijă de date de partiționare pentru tine în pași partiție separate ( StepExecution), și delegarea executarea efectivă a acestor pași pentru mai multe fire sau alte sisteme distribuite ( PartitionHandlers, de exemplu , TaskExecutorPartitionHandlersau să fie mai distribuite MessageChannelPartitionHandleretc ..)

  2. Spring are un pachet de OXM frumos pentru a face cu XML + Spring are un lot StaxEventItemReadercare extrage fragmente din documentul XML de intrare , care ar corespunde înregistrărilor pentru prelucrarea

Dă-Lot de primăvară o încercare. Lasă-mă să știu dacă aveți întrebări, voi fi bucuros să ajute.

EDIT:

De asemenea , uita - te la Scala/AKKA Actorsși / sau Scala parallel collections. În cazul în care sarcina dumneavoastră este aplicabilă pentru a fi sharded / porționat / distribuit => ca ceea ce actor model pentru.

Dacă doriți să ia în considerare o soluție non JVM, să ia o privire la Erlang OTP=> simplu și elegant.

Publicat 17/11/2009 la 11:00
sursa de către utilizator

voturi
0

Ca răspuns la întrebările dumneavoastră:

Care este opinia dumneavoastră cu privire la această arhitectură? Ai avut aplicație similară pentru a proiecta? Care a fost alegerea ta de design, atunci?

Cred că este o arhitectură bună, și ai dreptate DB este strangulare dumneavoastră. Cu toate acestea design-ul este suficient de flexibil, puteți controla cantitatea de intrare la baza de date.

Am și multi-threading peste lucrări de noduri. Nu sunt sigur că Haddoop, sau alt sistem de procesare distribuit vă va oferi mult mai mult, atunci ceea ce ai deja, din moment ce face pur și simplu I / O la o bază de date.

Am implementat ceva simliar folosind cozi JMS pentru logare centralizată, și a mers destul de bine, cu un impact mai mic la codul scris apoi jurnalele pe disc. Cred că va funcționa bine pentru aplicația dumneavoastră.

Publicat 10/04/2012 la 21:02
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more