Kako komunicirati?

Započeo maxogm, 06.05.2009, 13:29

prethodna tema - sledeća tema

maxogm

Na Jboss serveru treba da se napravi da radi jedna aplikacija koja nije WEB, e sad da nema neko neki predlog kako ja da komuniciram sa njom.
Znaci na Application Serveru treba da bude deploy-ovana aplikacija koja nije WEB.

Pozdrav

holodoc

Ako sam te dobro razumeo tebi je potreban predlog kako da putem web-a komuniciraš sa aplikacijom koja je na serveru a koja nije web aplikacija već recimo standalone desktop aplikacija ili recimo neki deamon proces?

Jesi li razmišljao da komunikaciju oraganizuješ preko SOAP-a tj. preko web servisa? Jel komunikacija u tvom slučaju dvosmerna ili jednosmerna tj. kao neko daljinsko prosleđivanje podataka i sl.?
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

Zepi

Možda ideja stvarno nije loša, tj. kreirati web servis sa kojim možes da komuniciras SOAP-om.

Dobra stvar što si već upoznat sa tim i u javi i .net platformi.

Ja nisam imao nekih problema u radu sa Web Servisima a tu bi trebao i eclipse da ti dosta pomogne   =; .


holodoc

06.05.2009, 22:39 #3 Poslednja Izmena: 06.05.2009, 22:42 od holodoc
Jutros onako u žurbi nisam uspeo baš da obuhvatim sve detalje i mogućnosti mada iskreno trebalo bi da prvo definišeš parametre koje sam naveo gore. Dakle da li je potrebna dvosmernost komunikacija kada kažeš "komunikacija" i kakav je intenzitet saobraćaja.

U slučaju da je komunikacija jednosmerna i da je saobraćaj niskog intenziteta klasični XML dump-ovi će ti biti dovoljni. Dakle u intervalima koji su ti potrebni spoljašnja aplikacija kontaktira custom aplikaciju na tvom serveru (ili deamon) zahteva generisanje XML fajla i izvrši njegovo čitavanje direktno od strane tvoje spoljašnje aplikacije. Ovo naravno neće da funkcioniše ako ti je potrebna dvosmerna komunikacija.

E sad, iskreno rečeno ukoliko želiš da ostvariš dvosmernu komunikaciju mogao bi stvarno da porazmisliš da koristiš web servise međutim tu može da se javi problem ako ti aplikacija baš zahteva čestu razmenu podataka jer su servisi skupa rabota. Doduše u tom slučaju gradiš aplikaciju za budućnost mada nisam siguran baš koliko se dobro cela ideja sa SOAP-om razvija.

Less talk more work :D

Evo nekoliko linkova koji će ti sigurno pomoći ukoliko se odlučiš da koristiš SOAP. Od sveg srca predlažem WSDL (<- ovo je link nego brljiva tema brlja) zato što imam relativno pozitivnih iskustva sa njime u nekim PHP baziranim test web servisima. Nažalost nemam nijedan od tih servisa trenutno online da bih mogao da ti demonstriram kako to praktično izgleda.

Pošto ti koristiš Ganymede pretpostavljam da će ti WTP dobro doći :) Možeš ga skinuti u okviru kompletnog "all in one" paketa http://www.eclipse.org/webtools/releases/3.0.4/ ili dodati na postojeću instalaciju. Kompletan info i par dobrih tutorijala ćeš naći na linkovima koje sam ti dao. WSDL Editor će ti omogućiti da preskočiš kompletnu petljanciju oko učenja WSDL-a i da odmah definišeš sve za tvoj SOAP server i SOAP klijent. Na prvom linku je ja mislim sve lepo objašnjeno. Evo još jednog lepog linka http://www.oracle.com/technology/pub/articles/dev2arch/2005/09/eclipse_web_tools_platform.html
Tvoj web servis bi jednostavno funkcionisao na sledeći način. Definišeš SOAP server i SOAP klijenta putem WSDL-a. Kada klijent zatraži neku funkcionalnost on kontaktira servis i čita WSDL, dobija opis servisa i koristi funkciju koja ga interesuje, recimo readMessages (aludiram malo na onu našu priču o chat sistemu :D). Klijent dobija odgovor o recimo statistikama poruka, njihovom broju i sve što te usput interesuje. Usput klijent može da pokupi i info koji mu prosleđuje server po tzv. "calling home" sistemu tj. povratne informacije klijentu sadrže stavku refreshRate koja recimo diktira nakon kog vremena će klijent ponovo uputiti zahtev ("calling home" upravo označava tu stavku da klijent non-stop "zivka" server da proveri stanje). I tako u krug. Prednost ove tehnike je relativna jednostavnost i manje opterećenje mreže kada su poruke i podaci kratki dok je opterećenost utoliko veća ukoliko je refresh rate slanja zahteva klijenta češći i poruke veće.
Imaš još opcija. Jedna je da koristiš klasične sockete. Tu nemas ničeg spornog :) Dakle klasična persistant socket konekcija u okviru klasične klijent server arhitekture. Primera za toga na netu imaš koliko hoćeš. Koristi se klasična direktna komunikacija putem socketa i konstantno otvorena veza između klijenta i servera što oslobađa potrebe za onim "calling back" sistemom. Ovaj pristup ima recimo manu da traži konstantne koneckije pa ako imaš jaku konkurentnost klijenata možeš da zaglaviš sa opterećenjem servera.
I još jedna stvar. Pošto ovo tvoje pitanje možda ima veze sa chat (message relaying) sistemom o kojem smo pričali pogledaj na jako interesantnu ideju ovog tipa koji govori o tome kako da realizuje P2P chat sistem :D Ideja je po meni zaista genijalna pa bih ti preporučio da pročitaš ovu temu a shvatićeš na koga mislim kada na njega naletiš :)
http://forums.devshed.com/php-development-5/chat-system-strategy-605694.html
Ajd toliko za sada :) Javi se kad budeš mogao pa da nasatvimo dalje priču ako zatreba :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

maxogm

Pazi sad...
Veza izmedju te aplikacije koja se nalazi na JBoss-u i klijentske aplikacije treba da bude takva da:

Klijent posalje poruku... Ova aplikacija na Jboss-u je primi i prosledi na neki treci server
Kad se klijent kome je prosledjena poruka nakaci... Aplikacija na Jboss-u vidi ima li poruka za tog klijenta, i ako ima uzme je sa tog treceg servera i prosledi klijentu...

E da minimum je potrebno da 20k klijenata radi istovremeno :-(

@holodoc
Imam j2ee eclipse on sadrzi i web tools

holodoc

Reci mi samo koliki su vremenski intervali u kojima klijent šalje upit JBossu da proveri da li ima poruke za njega? Konkretno da li klijent mora odmah biti obavešten o prijemu poruke ili se provera vrši recimo na svakih minut ili dva?

I vezano za ovih 20K klijenata kako se to meri? 20K konekcija u isto vreme ili recimo 20K opsluženih klijenata na sat?
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

maxogm

Klijent mora biti odmah obavešten o prijemu poruke, 20k konekcija u isto vreme.

Zepi

07.05.2009, 10:32 #7 Poslednja Izmena: 07.05.2009, 10:36 od Zepi
Sad kad sam pogledao šta bi trebalo da ti radi aplikacija nekako mi to ne liči na neku da kažem desktop aplikaciju
već standardnu dinamiku u okviru J2EE platforme.

Zani ma me razlog zbog kojeg umesto aplikacije ne koristiš servlete i da ti u njima bude ta logika.

Znači da kad ti se uloguje klijent pozove se servlet koji ti to odradi i vrati odgovor na klijentsku stranu.
Takođe u servletima možeš da radiš sa nitima pa bi i tih 20 konekcija u isto vreme moglo verovatno da se realizuje na neki način.

Ako se ipak recimo odlučiš za Web Servise u okviru Ganimade-a imas ugrađen framework AXIS koji ti kreira WSDL fajlove i SOAP poruke.
Upravo sam njega koristio kada sam pravio onaj moj servis.

Imaš na ovoj adresi opis wsdl fajla koji je AXIS kreirao za moj Web Servis:
http://csl.tfc.kg.ac.rs:8080/WebService/services/WS?wsdl

I dalje me samo zanima zbog čega ne ideš na standardnu J2EE platformu, možda sam nešto propustio  :dontknow:

holodoc

Citat: Zepi  07.05.2009, 10:32I dalje me samo zanima zbog čega ne ideš na standardnu J2EE platformu, možda sam nešto propustio  :dontknow:
Samo jedno K posle broja 20 =P~ Znači aplikacija mora da bude sposobna da minimalno opsluži 20 000 zahteva u isto vreme što već spada u debelu Enterprise sferu aplikacija pa će se za skladištenje podataka i simulatnu obradu verovatno koristiti cluster ulančani JBoss-ovi za šta verovatno i treba veoma specifična aplikacija :)

Sad sam malkice u gužvi pa ću kasnije ako "pregnam" da se vratim na ovu temu ;) Sori  :((
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php

holodoc

U svakom slučaju mislim da bi ti debeli plus bio da se upoznaš sa prednostima koje JBoss ima u odnosu na ostale servere. Zagledao sam malo njegove specifikacije i jasno je da ima neke specifičnosti koje ne možeš da nađeš kod klasičnih servera. Iskreno da ti kažem ja sa njime nemam apsolutno nikakva iskustva mada čini mi se da to već znaš.

Vezano za tvoj problem sa komunikacijom iskreno ne bih znao šta drugo da ti dodatno preporučim osim da ćeš verovatno morati kod benchmarka da računaš da nećeš ispuniti momentalnu obradu 20K klijenata i da ćeš realno morati da očekuješ određeni zastoj. U tom slučaju opet kažem ne znam da li JBoss poseduje bilo kakvu vrstu queue sistema mada sve zavisi od toga i da li i kako koristiš cluster. Previše meni nepoznatih u jednačini. Generalno trebalo bi da biraš najbrži mogući put a to bi po meni bila potpuno nezavisna aplikacija pisana na nivou OS-a (ne u Javi) jer ne znam koliko iskreno servleti mogu brzinski da isprate tako visoke zahteve za obradom mada možda grešim.

Dakle moj predlog ostaje potpuno nezavisno pisana aplikacija koja direktno koristi cluster (ili bazu). Možda ne bi bilo loše da napišeš dve odvojene aplikacije pri čemu će jedna služiti za skladištenje i eventualno koristiti drugi opseg portova a druga bi služila čisto za prosleđivanje rezultata klijentima. Tako mislim da bi skinuo teret sa jedne jedine aplikacije koja verovatno ne bi radila lepo sa ogromnim brojem niti od kojih pola skladišti podatke a druga polovina ih prosleđuje korisnicima.

Koji DBMS koristite? MySQL, Oracle? Tu bi ste recimo kod MySQL-a mogli da odvojite uloge tabela. Za one koje bi se čisto koristile za prosleđivanje podatka i očitavanje pravi izbor je MyISAMI engine koji opet neće moći da funkcioniše ukoliko radite sa transakcijama. Mislim da vam optimizovana baza ovde može užasno mnogo pomoći. Samo da napravite odgovarajuće indekse nad tabelama, da izdvojite view-ove i recimo koristite triggere.

Al sam se ovde nalomatao sa predlozima... Ništa konkretno :(( Možda ti ne bi bila loša ideja da konsultuješ ljude ovde (http://forums.devshed.com/java-help-9/) jer ćeš ovde zaista naći ljude koji imaju mnogo iskustva sa Javom. Ako ti to ne pomogne na istom forumu imaš sekcije za adminitraciju. Sva je verovatnoća da je neko koristio JBoss :)
<?php
abstract class Ignorance extends Stupidity implements Unavoidable 
    private function 
__construct(){
        
parent::__destruct();
    }; 

// EOF -> life.php