Welcome to Sign in | Help
in Search

Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

Last post 11-27-2006, 7:16 AM by rremus. 9 replies.
Sort Posts: Previous Next
  •  10-25-2006, 9:58 PM 534

    Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Am postat acest mesaj în urma unei discuţii pe care am avut-o cu un coleg, referitoare la aplicaţiile distribuite (client-server sau n-tier) în legătură cu necesitatea existenţei conceptului de tranzacţii şi în lumea obiectuală (nu doar în cea relaţională): vreau să ştiu cam care sunt opiniile voastre în această direcţie, dar mai întâi iată o introducere ca să vă încălzească :).
    Notă: Iniţial am postat mesajul pe RONUA dar m-am gândit că se aplică destul de bine şi aici... sorry pt. cross-site posting. Aştept comentariile însă oriunde, şi sper să le găsească şi cei ce le vor căuta ulterior. Google după titlul articolului (e identic) :)
    Aplicaţiile distribuite au apărut deoarece, în unele cazuri (tot mai multe, în zilele noastre):
    • datele trebuie stocate pe un server central
    • interfaţa cu utilizatorul trebuie să fie disponibilă de pe alte dispozitive (printr-o reţea, fie ea locală sau Internet-ul).
    De obicei aceste aplicaţii au mai multe layere dintre care le menţionez pe cele importante pt. discuţia noastră:
    • data layer - de obicei o bază de date relaţională
    • business layer - domeniu de obiecte (clase) şi business logic pentru acestea, cu suport suplimentar pt. data access (încărcarea din data layer, şi salvarea modificărilor înapoi în data layer)
    • user interface layer - partea care afişează datele din obiectele de business pentru utilizator şi permite modificarea lor şi execuţia logicii de business la comanda utilizatorului.
    Desigur, uneori există separat data access layer şi/sau un data caching layer, între data layer şi business layer, iar alteori există un nivel separat, de asemenea, între business layer şi user interface, sub formă de user services layer - dar aşa cum am spus, momentan ignorăm aceste aspecte.
    Data layer-ul este de cele mai multe ori bazat pe un SGBD relaţional, precum SQL Server (sau Oracle). Restul layer-elor sunt de cele mai multe ori bazate pe un engine obiectual, precum .NET Framework.
    De aceea, de cele mai multe ori, este nevoie de o transformare (mapare) a datelor relaţionale din tabelele din baza de date către clasele din domeniul obiectual (şi înapoi), lucru pe care îl pot face bine sistemele ORM (Object-Relational Mapping) disponibile azi. Deşi uneori greu de configurat, să spunem că acceptăm această situaţie, fără să ne gândim că ar trebui (în loc de asta) să folosim baze de date obiectuale (probabil din motive de performanţă?)
    Totuşi, în plus, între cele două lumi - relaţional şi obiectual - există şi alte discrepanţe (care sunt naturale dacă stăm să ne gândim) şi de asemenea acceptate:
    • SGBD relaţional = entităţi, relaţii, integritate, persistenţă, query-uri, tranzacţii, replicare;
    • domeniu obiectual = valori, referinţe, moştenire, instanţe în memorie, serializare în stream-uri, accesare directă a proprietăţilor şi metodelor, non-tranzacţionalitate a operaţiilor efectuate.
    O parte din aceste diferenţe încearcă să fie rezolvate de noile tehnologii la care Microsoft şi alţii lucrează, precum ADO .NET vNext (LINQ, Entity Data Model). Nu sunt sigur însă că aceste versiuni vor rezolva problema.
    În lumea de azi distribuţia acestor layere se poate face diferit, după cum urmează (considerăm tehnic doar soluţiile bazate pe servere şi clienţi Windows, dar conceptele se aplică şi în alte direcţii):
    • Thin clients: server = Data + BLL; client = UI
      • aplicaţiile Web, stocate pe un server Web, şi generând interfaţa într-un limbaj intermediar (DHTML), trimis şi interpretat de un browser pe client; autentificarea utilizatorilor poate fi Windows dar şi custom
      • aplicaţiile Windows disponibile prin Terminal Services (în care interfaţa se generează pe server şi e transmisă clientului la nivel de pixel/sunet fără un limbaj intermediar, clientul având doar o aplicaţie Remote Desktop (care vine în Windows XP); problema aici este faptul că autentificarea utilizatorilor trebuie să fie Windows, deci nu e o soluţie pt. proiecte pt. clienţi anonimi pe Internet, ci doar în intranet
    • Rich clients: server = Data + opţional o parte din BLL (validări, logică pe server); client = BLL + UI
      • aplicaţiile Windows care rulează pe client, folosind pt. BLL procesorul clientului dar accesând online un server de date (din internet sau intranet), prin servicii intermediare; autentificarea poate fi Windows dar şi custom, însă trebuie implementat un serviciu intermediar de transmitere a datelor între server data layer şi client business layer, precum .NET Remoting sau XML Web Services (modul recomandat azi)
    • Un alt fel de clienţi: server = Data (+ replication publication); client = Data (+ replication subscription) + BLL + UI
      • aplicaţii Windows stand-alone, care rulează pe o bază de date instalată local, pe un SGBD instalat local (poate fi o versiune "Express", de exemplu SQL Server 2005 Express); baza de date însă e configurată să se sincronizeze automat, prin replicare de tip Merge (care în SQL Server 2005 poate fi Web-based prin https) cu baza de date de pe server;  aici nu prea există exemple de proiecte actuale - care chiar au fost finalizate şi sunt disponibile, sau nu ştiu eu exemple (le aştept de la voi, dacă aveţi cunoştinţă de aşa ceva): momentan nu cred că face lumea aşa probabil din motive de performanţă la nivelul replicării.
    Pariul pe care l-aş face eu, este că în câţiva ani (să spunem 5-10) acest model care nu are acum nici măcar un nume bine definit (eu l-aş numi Data Replication clients, dar ar fi mai bun un nume din aceeaşi gamă cu "thin" şi "rich" - poate îi daţi voi un alt nume) va deveni un model f. utilizat (doar aşteptăm ca hardware-ul şi conexiunile Web să permită procese de data replication cât mai rapide şi programatorii să îşi revină din lumea ORM - object transactions etc, la vechile obiceiuri - fără să revină şi la vechile probleme de când aplicaţiile nu erau distribuite :)).
    De ce? Păi iată avantajele: aplicaţiile client nu vor mai şti că sunt de tip distribuit; ele pot lucra cu datele stocate local, nu mai e nevoie de caching la nivel de BLL client (cache de obiecte), nici suport pt. tranzacţii pe business objects (care, apropo, nu sunt implementate decât în f. puţine framework-uri, precum CSLA .NET şi nu sunt, se pare, native în lumea obiectuală): aplicaţiile pot utiliza direct SGBD-ul şi suportul lui pt. tranzacţii pt. a executa operaţiile din UI tranzacţional, ca şi cum ar fi aplicaţii clasice (non-distribuite), şi pt. că baza de date e pe hard diskul local, va merge repede. BLL-ul va exista pt. logică nu pentru caching de obiecte (şi poate fi chiar mutat în SQL Server, fie în proceduri stocate T-SQL sau proceduri stocate .NET). Iar interfaţa va fi de cele mai multe ori sincronă, BD-ul mergând repede (ştim cu toţii câte dificultăţi avem când introducem multi-threading în aplicaţiile noastre, pt. a creşte responsivitatea UI-ului). Iar de sincronizarea clienţilor cu serverul de date (să zicem că acesta ar fi un SQL Server 2005 Enterprise, dacă pe clienţi avem SQL Server Express) se va ocupa mecanismul de replicare de tip merge, prin Web. Iar noii clienţi înregistraţi îşi vor înregistra subscripţia de replicare pe server, după care vor lucra doar local cu baza de date.
    Desigur modelul se aplică doar atunci când datele necesar de afişat în UI sunt bune chiar dacă sunt puţin out-dated. Dar asta nu e oare identic când avem un cache de business objects la nivel de BLL? Aşadar aceasta nu va fi un argument prea bun împotriva acestui model...
    Voi ce ziceţi? Credeţi că pariul făcut e bun sau nu?
    Şi încă o întrebare: voi aţi avea curajul să alegeţi acest model azi, într-un proiect real? Cam câţi clienţi concurenţi credeţi că ar suporta SQL Server 2005 Web Replication, pe un server "bun" (cumpărat în zilele noastre)? Eu recunosc că nu le am cu preformanţa acestor procese de replicare mai ales pe Web, de aceea vă cer părerea (eu doar mă bucur că avem un model conceptual mai util decât ce aveam până acum, în sensul că programatorul va avea o viaţă mai uşoară în a crea aplicaţiile. :))

    Sorin Dolha, DlhSoft
    Filed under:
  •  10-26-2006, 10:37 AM 542 in reply to 534

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Salut Sorin,

    Nu pot sa estimez daca o sa castigi pariul sau nu. Insa pot sa iti reamintesc de incercarea cu ObjectSpaces si mai nou entity data model (EDM) (Next-Generation Data Access: Making the Conceptual Level Real). Eu cred ca SOA o sa prinda si datele de orice tip vor fi consolidate intr-un spatiu comun. In plus evolutia bazelor de date este descrisa destul de bine (zic eu) de Jim Gray aici:  What's Next for Database?

    Jim Gray vorbeste despre un ecosistem de informatii, despre baze de date de Petabytes etc. Merita prezentarea.


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
  •  11-17-2006, 3:12 AM 906 in reply to 534

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Chiar si numai din punct de vedere strict teoretic replication ascunde multe alte probleme, subiectul a fost pe larg tratat in urma peste zece ani de Jim Gray si Pat Helland, o lectura obligatorie este http://portal.acm.org/citation.cfm?id=233330&coll=portal&dl=ACM. Si in implementarile practice replication nu scaleaza peste sute de subscriptions in primul rind din motive operationale (mentinerea/administrarea subscriptiilor este practic imposibila).

    Dar problema este mult mai fundamentala, si anuma din abordarea 'aplicatiilor distribute' ca aplicatii care share-uiesc date relationale. Modelul acesta introduce un tight-coupling care blocheaza orice proiect la scurt timp dupa darea in functionare: modificarile cer o schimbare a tuturor partenerilor implicatzi in applicatie. Daca upgrade-uri ale clientilor intr-un mediu omogen pot fi, cu greu, scoase la capat, in mediile heterogene (business-to-business si adesea intre departamentele aceluiasi business) acesta este imposibil din cauza independentei operationale a partenerilor. Cu alte cuvinte, un partener pur si simplu refuza (fundamentat!) sa upgradeze schema de date, blocind upgrade-ul intregii aplicatzii.
    Un alt tight-coupling introdus de replication si adesea neglijat in proiectarea aplicatiilor este cel legat de securitatea accesului la date. Adesea se ajunge ca totzi participantzii in aplicatiza distribuita sa stie despre userii/grupurile tutror celorlatzi participantzii. Problema in general este pur si simplu ignorata la design, considerindu-se ca totzi participantzii la aplicatie apartzin la acelasi domeniu. In practica aceasta nu mai este adevarat in momentul in care aplicatia incerca sa intre in domeniul business-to-business si, din nou, adesea intre departamentele aceluiasi business.

    In alta ordine de idei este destul de raspindita misconceptia in aplicatiile distribuite ca 'tranzactiile trebuiesc propagate intre parteneri'. Pentru dezvoltatori, este o solutie simpla. Si daca tranzactiile sint asa de bune pentru mediul client-server, ele nu pot decit sa fie la fel de bune si pentru mediile distribuite, nu? In realitate introducerea tranzactiilor distribuite e primul pas spre dezastru. 2-phase-commit limiteaza throughput-ul aplicatiei de la mii de tranzactii pe secunda la zeci. Pentru a functiona, aplicatia are nevoie de disponibilitatea imediata a tuturor partenerilor implicatzi in tranzactie. Un router are un hick-up de 5 secunde, aplicatzia e blocata 5 secunde (pentru ca nu poate continu pina COMMIT-ul nu intoarce controlul). Un partener in aplicatie are un crash la momentul oportun, log-ul tuturor celor implicatzi nu poate fi reciclat pina cind 2-phase-commit nu-si da acordul (si imaginatzi-va cazul cind un X lock nu poate fi eliberat din acelasi motiv!!). Ca idee generala, in momentul in care un design contzine termene ca 'linked server', 'ITransactionContext' sau '[Transaction(TransactionOption....)]' e timpul pentru a merge innapoi la 'plansa de proiectare'.

    Solutziile care au avut de satisfacut cerintele de consistenta in medii distribuite si au supravietzuit in practica au totate un numitor comun: tranzactii locale si logica de compensare in applicatie pentru erori. Ceea ce introduce oarecum ideea de baza pentru aplicatiile distribuite: independenta locala. Fiecare participant in aplicatie are control asupra datelor (schema etc)/securitatzii/tranzactiilor locale si comunica cu ceilalti participanti prin intelegeri 'contractuale' (adica 'service level agreements'), implementate ca mesaje. Cu alte cuvinte, SOA. Si nu, SOA nu inseamna XML si Web Services :). Pentru o introducere in domeniu recomand din nou Pat Helland, in special Architect Webcasts: Autonomous Computing: Fiefdoms and Emissaries

    Ca solutie practica cu ce exista la momentul actual pe piatza recomandarea principal este http://msdn2.microsoft.com/en-us/library/aa964144.aspx

    Cei 2 centi ai mei,
    ~ Remus

     


    http://rusanu.com
  •  11-23-2006, 7:53 PM 1003 in reply to 906

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Am o parere care intareste ceea ce spune Remus cand recomanda in principal utilizarea Service Broker ca o solutie practica: intre servere prin SB poti schimba documente XML adica informatie semistructurata in timp ce la replicare informatia este in principal structurata - lucru dat de caracterul relational al datelor.

    Pe de alta parte, in documentul de la link-ul indicat in finalul postarii, se spune

    "While SSB is a database feature that can be accessed in a variety of ways from many different platforms (basically, anything that can connect to SQL Server), you can't build a Service Broker without SQL Server, and you can't run SQL Server on anything but Windows."

    mai departe intreb:

    Pe o masina undeva am SQL Server 2005 instalat ; este configurat Service Broker; printr-un endpoint creat pentru SOAP adica

    CREATE ENDPOINT endPointName [ AUTHORIZATION login ]
    [ STATE = { STARTED | STOPPED | DISABLED } ]
    AS { HTTP | TCP } (
       <protocol_specific_arguments>
            )
    FOR { SOAP ......

     sa inteleg ca pot, Service Broker-ul meu poate sa accepte XML-uri, sau orice alte pachete, sa spunem de pe o masina Linux cu  ORACLE sau altceva pe ea?

    Stie cineva de o incercare de felul asta, reusita sau nu ?


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  11-25-2006, 8:26 AM 1031 in reply to 1003

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Service Broker communica intre instantele SQL folosind un protocol binar care la momentul actual nu ests public. Ca atare SSB poate fi folosit doar ca solutie pentru commincare intre instante de SQL Server 2005 (orice SKU). Endpoint-ul de SSB nu ests SOAP, este un endpoint FOR SERVICE_BROKER (....). Nivelul de performanta dorit pt SSB (>2000 msgs/sec pt a obtine credibilitate in mediul enterprise) a eliminat din calcul varianta XML/SOAP. In plus la momentul cind SSB a fost proiectat/implementat nu existau standardele necesare W3C pt interoperatibilitate SOAP (ceea ce mai tirziu a devenit WS-Security, WS-Auth, WS-Trust, WS-ReliableMessaging, WS-Reliability, WS-Transactions etc etc, majoritatea nefiind inca definite nici acum). SSB permite transmiterea de mesaje XML ca user-payload si ofera validarea XML (well formatted sau schema).

    In practica am vazut clienti care folosesc SSB ca mediu de comunicare intre server Informix! prin linked server pe o instanta SQL Express.

    HTH,
    ~ Remus

     


    http://rusanu.com
  •  11-25-2006, 8:50 AM 1034 in reply to 1031

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Asa cum exista de acum "Oracle snapshot publications " sper ca in versiunile viitoare sa fie facut pasul inainte si pe directia

    SSB mai ales pentru faptul ca se preconizeaza aplicatii spectaculoase la care acesta isi aduce aportul.


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  11-25-2006, 9:56 AM 1035 in reply to 1034

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Revin la discutia/intrebarea ridicata de mine mai sus:

    Tot cautand prin resursele indicate pe aceasta tema de dl. RRemus (multumesc mult) am dat peste ceva care, intuiesc eu ar fi un prim pas pentru  comunicarea SSB cu alte sisteme ( sa nu uitam ca un linked server inseamna o legatura directa cu masina de care te legi, adica te bagi in intimitatea acesteia !, lucru care uneori poate deranja sau deveni o poarta de intrare pentru alte lucruri)

    Iata aici   ,la ExternalActivator-0.1-docs ,este un sample , citez : "This sample shows how to build a Windows Service for dynamically launching Service Broker programs as external processes. ". In concluzie poti activa SSB cu acest mecanism ca un prim pas in comunicarea cu alta aplicatie.

    (In curand, voi fi in postura testarii acestei piste asa ca atunci voi avea un feed-back)


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  11-25-2006, 8:16 PM 1047 in reply to 1035

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Absolut de acord, linked server introduce un 'tight-coupling' din multe puncte de vedere: availability (server-ul respectiv trebuie sa ruleze cind il accesezi), schema (trebuie sa stii exact ce catalog/tabele/proceduri treuiesc apelate pentru a realiza 'serviciul' dorit), security (trebuie sa ai un context care serverul il poate autentifica si autoriza) etc etc. L-am mentionat ca examplu de ingeniozitate din partea user-ilor.

    Sample-ul de external activator arata cum se poate folosi mecanismul de 'external activation' (un 'event notification for queue_activation') pentru a lansa instante ale unui process (.exe) care sa implementeze un serviciu. Mesajele SSB sint schimbate tot intre instante de SQL Server, dar procesarea lor (implementarea serviciului) este realizata (posibil) pe o alta masina (adevarat insa ca acest proces poate sa ruleze pe orice platforma care se poate conecta la SQL Server via ODBC, JDBC, FreeTDS, SOAP etc)

    Daca vrei sa descrii proiectul la care lucrezi/testezi pot sa-tzi dau un feedback mai 'la obiect'.

    HTH,
    ~ Remus


    http://rusanu.com
  •  11-26-2006, 6:10 PM 1049 in reply to 1047

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    In linii mari , iata despre ce e vorba: intre 2 parteneri se schimba date in pachete (printr-un port oarecare) modul in care se impacheteaza si apoi despacheteaza acele date este standardizat; doresc ca tratarea acestor mesaje adica receptia si trimiterea pentru mine ca partener A, sa o fac prin mecanismul SSB; nu ma intereseaza ce mecanism are partenerul B, nu intru in bucataria lui; pe mine ma intereseaza sa-i trimit si sa receptionez acele date standardizate. Daca e sa desenam arhitectura SSB cu cei 2 parteneri , sa ne imaginam ca undeva la mijloc se taie cu o linie , nu stiu ce este la celalat, insa in continuare tratez ce primesc si ce trimit.

    De aceea mai devreme am avansat ideea cu SOAP: ma gandeam ca endpointul de tip SOAP este poarta de intrare pt ce vine de la/pentru partenerul B in timp ce, normal SSB , primeste/trimite prin endpoint de tip service broker. Ramane ca endpointurile sa se "inteleaga" intre ele cumva.


    Gheorghe Ciubuc,SQL Server Influencer, MCP(SQL 2000), MCTS (SQL Server 2005) , OCA(Oracle 9i), Sybase(Brainbench)
  •  11-27-2006, 7:16 AM 1051 in reply to 1049

    Re: Model propus pt. arhitectura aplicaţiilor distribuite în viitor: părerea voastră?

    Ma gindeam la o descriere mai la obiect, nu generica. Ce contin pachetele? Ce este 'A'? Ce este 'B'?


    http://rusanu.com
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems