Triaj
Marshalling sau Marshaling ( prezentare ) este procesul de transformare a reprezentării datelor într-un format adecvat, realizat după standarde specifice și al cărui obiectiv principal este transferul acestora prin rețea. Vom vedea principala utilizare a marshalling-ului în sistemele distribuite , deoarece în acest tip de sistem putem găsi diferite tipuri de hardware, din cauza cărora este posibil să avem probleme la interpretarea datelor primite la salvarea lor pe disc, ceea ce ar duce la o eroare. Această problemă se datorează faptului că diferitele CPU-uri folosesc fiecare propriile reguli pentru poziționarea câmpurilor structurilor în memorie. Mecanismul pe care îl urmează marshalling-ul pentru ca expedierea să se facă satisfăcător ar fi, mai întâi să avem informațiile în formatul platformei utilizate de emitent, să convertim aceste date într-un format standard pe care îl vom folosi pentru transfer, odată transferat receptorul va trebui să decodeze acele date și să creeze date noi pe platforma ta. În cadrul conceptului de marshaling, putem defini 2 fire de execuție, codificare și decodare, la care ne putem referi ca marshaling și unmarshaling.
Utilizare
Marshalling-ul este utilizat în principal în apelurile de proceduri la distanță ( RPC ), în care vom avea nevoie de mecanisme pentru comunicarea cu succes între procese. Marshallingul este suportat de multe limbaje precum C , C++ , Java , C# , PERL , Python , Scala , printre multe altele, care au inclus pachete, module și API-uri pentru a oferi acest serviciu utilizatorilor lor.
Diferențele cu serializarea
În multe limbi, termenul de serializare este folosit ca sinonim pentru marshalling, deoarece ambele proceduri ar putea părea să facă același lucru, ambele transformă datele într-un alt format care le avantajează fie pentru trimitere, fie pentru stocarea lor. Dar vom vedea că sunt mecanisme similare dar că au scopuri diferite.
În serializare, copiem date structurate către sau de la o primitivă ca un flux de octeți, indiferent de tipul de date. Acest lucru poate fi util atunci când comunicăm în același mediu.
Pe de altă parte, marshalling-ul este conceput în principal pentru sisteme distribuite și, prin urmare, trebuie să avem mai multe informații în afară de datele în sine. Pentru a interpreta datele, va trebui să trimitem împreună aceste metadate , care vor fi responsabil pentru ca datele să fie afișate așa cum au fost trimise.
Tipuri de reprezentare
Pentru a putea distribui informațiile pe care dorim să le trimitem, avem nevoie de un format standard și bine structurat, în care să ne transformăm datele astfel încât, după trimitere, transformarea inversă să fie satisfăcătoare și transmiterea datelor cu succes.
CORBA
CORBA este un standard definit de OMG . Ceea ce face această metodă este să creeze un obiect la distanță specific CORBA în reprezentarea obiectului local, astfel încât comunicarea între diferite computere să fie satisfăcătoare.Putem face acest lucru între diferite mașini, dar nu toate limbile sunt acceptate de CORBA. Din cauza erorilor de implementare și a problemelor de proiectare CORBA, acesta a fost depreciat.
Serializare Java
Aici vedem cum în Java termenul de serializare este folosit indiferent pentru ambele procese. În acest caz vom putea să facem repartizare între diferite computere dar avem dezavantajul că funcționează doar în java, nu vom putea avea comunicare între limbi.
XML
XML , formatul principal pentru marshalling, se datorează faptului că nu există incompatibilități de comunicare între limbi sau platforme. De fapt, este atât de popular încât multe limbi au deja API-uri pentru a facilita acest tip de marshalling, de exemplu avem JAXB în java sau XmlSerializer pentru C#.
Unmarshalling
În cadrul procesului de marshalling avem firul de unmarshalling. Aceasta se ocupă de partea receptorului care reconstruiește elementul prin informațiile primite într-un format standard. Acest proces poate fi ceva mai complicat decât triajul, deoarece nu este o traducere directă. Acest lucru se datorează faptului că nu trimitem doar date, ci și metadate . Această diferență face ca marshaling și unmarshaling să nu fie simetrice, iar demarshalingul are o sarcină de lucru mai mare.