Вы находитесь на странице: 1из 44

Client UDP

import java.net.*;
import java.io.*;
public class UDPClient {
public static void main(String args[]) {
DatagramSocket aSocket = null;
try {
aSocket = new DatagramSocket();
byte [] m = args[0].getBytes(); // Conversie mesaj in sir de
octeti.
InetAddress aHost = InetAddress.getByName(args[1]); // Get
hostname.
int serverPort = 6789;
DatagramPacket request =new DatagramPacket(m, args[0].length(),
aHost, serverPort);
aSocket.send(request);
byte[] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer,
buffer.length);
aSocket.receive(reply);
System.out.println("Reply: " +
new String(reply.getData(),0,reply.getLength()))
} catch (SocketException e)
{System.out.println("Socket: "+e.getMessage());
} catch (IOException e) {System.out.println("IO: " + e.getMessage());
} finally {if (aSocket != null) aSocket.close();}
}
}

Server UDP
import java.net.*;
import java.io.*;
public class UDPServer{
public static void main(String args[]){
DatagramSocket aSocket = null;
try {
aSocket = new DatagramSocket(6789);
byte[] buffer = new byte[1000];
while (true) {
DatagramPacket request = new DatagramPacket(buffer, buffer.length);
aSocket.receive(request);
DatagramPacket reply =new DatagramPacket(request.getData(),
request.getLength(),request.getAddress(),request.getPort());
aSocket.send(reply);
}
} catch
(SocketException e){System.out.println("Socket: " + e.getMessage());
} catch (IOException e) {System.out.println("IO: " + e.getMessage());
} finally {if(aSocket != null) aSocket.close();}
}
}
Client TCP - I
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main (String args[]) {
Socket s = null;
try {
int serverPort = 7896;
s = new Socket(args[1], serverPort);
DataInputStream in =new DataInputStream(s.getInputStream());
DataOutputStream out =
new DataOutputStream(s.getOutputStream());
out.writeUTF(args[0]); // UTF is a string encoding.
String data =in.readUTF();
System.out.println("Received: "+ data) ;
}
Server TCP. Acceptarea unei conexiuni
import java.net.*;
import java.io.*;
public class TCPServer {
public static void main (String args[]) {
try {
int serverPort = 7896;
ServerSocket listenSocket =
new ServerSocket(serverPort);
while (true) {
Socket clientSocket = listenSocket.accept();
Connection c = new Connection(clientSocket);
}
} catch(IOException e) {
System.out.println("Listen socket:"+e.getMessage());
}
}
}
Server TCP. Tratarea unei conexiuni - I
class Connection extends Thread {
DataInputStream in;
DataOutputStream out;
Socket clientSocket;
public Connection(Socket aClientSocket) {
try {
clientSocket = aClientSocket;
in =new DataInputStream(clientSocket.getInputStream());
out =new DataOutputStream(clientSocket.getOutputStream());
this.start();
} catch(IOException e)
System.out.println("Connection:"+e.getMessage());
}
}
Server TCP. Tratarea unei conexiuni - II
public void run() {
try { // An echo server.
String data =
in.readUTF();
out.writeUTF(data);
} catch (EOFException e) {
System.out.println("EOF:"+e.getMessage());
} catch(IOException e) {
System.out.println("readline:"+e.getMessage());
} finally {
try {
clientSocket.close();
}
catch(IOException e) { /* close failed */ }
}
}
}
Program Java pentru trimitere multipla IP – I
import java.net.*;
import java.io.*;
public class MulticastPeer {
public static void main(String args[]) {
MulticastSocket s = null;
try {
InetAddress group =InetAddress.getByName(args[1]);
s = new MulticastSocket(6789);
s.joinGroup(group);
byte [] m = args[0].getBytes();
DatagramPacket messageOut =
new DatagramPacket(m, m.length, group, 6789);
s.send(messageOut);
System.out.println("sent");

Implementarea unui client simplu de HTTP - I


import java.io.*;
import java.net.*;
public class WebRetriever {
Socket soc;
OutputStream os; InputStream is;
WebRetriever(String server, int port) throws IOException,
UnknownHostException {
soc = new Socket(server, port);
os = soc.getOutputStream();
is = soc.getInputStream();
}
void request(String path) {
try {
String message = "GET " + path + "\n\n";
os.write(message.getBytes());
os.flush();
} catch (IOException e) {
System.err.println("Error in HTTP request");
}
}
Implementarea unui client simplu de HTTP - II
void getResponse() {
int c;
try {
while ((c = is.read()) != -1)
System.out.print((char) c);
} catch (IOException e) {
System.err.println("IOException in reading from Web server: “
+ e.getMessage());
}
}
public void close() {
try {
is.close();
os.close();
soc.close();
} catch (IOException e) {
System.err.println("IOException in closing connection");
}
}
Implementarea unui client simplu de HTTP - III
public static void main(String[] args) {
try {
// WebRetriever w = new WebRetriever("www.nus.edu.sg", 80);
// w.request("/NUSinfo/UG/ug.html");
// Din broswer: http://127.0.0.1:8080/exemplu.html
WebRetriever w = new WebRetriever("localhost", 8080);
w.request("/exemplu.html");
w.getResponse();
w.close();
} catch (UnknownHostException h) {
System.err.println("Hostname Unknown");
} catch (IOException i) {
System.err.println("IOException in connecting to Host");
}
}
}
Implementarea unui server de Web - II
import java.io.*;
public class WebServer {
Socket soc;
OutputStream os; BufferedReader is;
String resource;
void getRequest() {
try {
String message;
while ((message = is.readLine()) != null) {
if (message.equals(""))
break; // end of command block
System.out.println(message);
StringTokenizer t = new StringTokenizer(message);
String token = t.nextToken(); // get first token
if (token.equals("GET")) { // if token is ”GET”
resource = t.nextToken(); // get second token
System.out.println(resource);
}
}
} catch (IOException e) {
System.err.println("Error receiving Web request");
}
}

Implementarea unui server de Web - III


void returnResponse() {
int c;
try {
FileInputStream f = new FileInputStream("."+resource);
while ((c = f.read()) != -1)
os.write(c) ;
f.close();
} catch (IOException e) {
System.err.println("IOException in reading in Web server");
}
}
public static void main(String args[]) {
try {
ServerSocket s = new ServerSocket(8080);
for (;;) {
WebServer w = new WebServer(s.accept());
w.getRequest();
w.returnResponse();
w.close();
}
} catch (IOException i) {
System.err.println("IOException in Server");
}
}
Implementarea unui server de Web - IV
public void close() {
try {
is.close(); os.close(); soc.close();
} catch (IOException e) {
System.err.println("IOException in closing connection");
}
}
WebServer(Socket s) throws IOException {
soc = s;
os = soc.getOutputStream();
is = new BufferedReader(
new InputStreamReader(soc.getInputStream()));
}
}
Fisierul HTML de invocare
• Fisier HTML pentru invocarea miniserverului cu un buton de
activare:
<HTML>
<HEAD>
<TITLE>A First Servlet</TITLE>
</HEAD>
<BODY>
<BR><BR><BR>
<CENTER>
<FORM METHOD=GET ACTION="FirstServlet">
<INPUT TYPE="Submit" VALUE = "Click me!">
</FORM>
</CENTER>
</BODY>
</HTML>

<FORM METHOD=GET ACTION="PersonalServlet">


Enter your first name:
<INPUT TYPE="Text" NAME="FirstName" VALUE="">
<BR><BR>
<INPUT TYPE="Submit" VALUE="Submit">
</FORM>

http://localhost:8080/mywebapp/PersonalServlet?FirstName=<v
aloare>

Exemplu de miniserver
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet {

public void doGet(HttpServletRequest


request,HttpServletResponse response)
throws IOException,ServletException {
response.setContentType("text/HTML");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>Simple Servlet</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<BR><BR><BR>");
out.println("<CENTER><H1>A Simple Servlet</H1></CENTER>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
}
}
Cod miniserver cu parametrii
import javax.servlet.http.*;
public class PersonalServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException,ServletException {
response.setContentType("text/HTML");
PrintWriter out = response.getWriter();
out.println("<HTML>");
out.println("<HEAD>");
out.println("<TITLE>Simple Servlet</TITLE>");
out.println("</HEAD>");
out.println("<BODY>");
out.println("<BR><BR><BR>");
String name = request.getParameter("FirstName");
out.println("<CENTER><H1> A Simple Servlet for ");
out.println(name + "</H1></CENTER>");
out.println("</BODY>");
out.println("</HTML>");
out.flush();
}
}

Exemplu de DTD pentru o fisa de contacte


<!ELEMENT client (nume, telefon*,
companie?, (contact|atitudine|
personal)*)>
<!ELEMENT nume (prenume,
initiala_tata?, familie, porecla*)>
<!ELEMENT telefon (#PCDATA)>
<!ELEMENT companie (#PCDATA)>
<!ELEMENT contact (#PCDATA|data)*>
<!ELEMENT prenume (#PCDATA)>
<!ELEMENT initiala_tata (#PCDATA)>
<!ELEMENT familie (#PCDATA)>
<!ELEMENT porecla (#PCDATA)>
<!ELEMENT data (#PCDATA)>
<!ELEMENT personal (#PCDATA|data)*>
<!ELEMENT atitudine EMPTY>
<!ATTLIST atitudine interes (mare|
potrivit|mic|necunoscut)
"necunoscut">
<!ATTLIST companie limba (engleza|
franceza|romana) "engleza">
<!ATTLIST contact tip (prim|ultim|
altceva) "altceva">

XML:

<client>
<nume><prenume>Costin</prenume>
<initiala_tata>P.</initiala_tata>
<familie>Badica</familie>
<porecla>Costu</porecla>
</nume>
<telefon>0251-145190</telefon>
<companie limba="romana">
Universitatea din Craiova
</companie>
<contact type="prim">
<data>20 Ian 1995</data>
</contact>
<contact type="ultim">
<data>19 Dec 2002</data>
</contact>
<atitudine interes="potrivit"/>
<personal> Ii place fotbalul
<data>23 Nov 1995</data> Ii
place mancarea italiana
</personal>
</client>

Exemplu de transformare (II)


<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="organization">
<result>
<xsl:apply-templates
select="/organization/topmgr/employee" mode="selecttopmgr"/>
</result>
</xsl:template>
<xsl:template match="employee" mode="selecttopmgr">
<xsl:variable name="varID">
<xsl:value-of select="@id"/>
</xsl:variable>
<xsl:if test="$varID != 'Bill'">
<xsl:apply-templates mode="display"
select="//group[mgr/employee[@id=$varID]]/group//employee">
<xsl:with-param name="varID" select="$varID"/>
</xsl:apply-templates>
</xsl:if>
</xsl:template>
<xsl:template match="employee" mode="display">
<xsl:param name="varID"/>
<pair>
<xsl:attribute name="topmgrID">
<xsl:value-of select="$varID"/>
</xsl:attribute>
<xsl:attribute name="employeeID">
<xsl:value-of select="@id"/>
</xsl:attribute>
</pair>
</xsl:template>
</xsl:stylesheet>
web.xml for resteasy <web-app>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>resteasy.resource.method-interceptors</param-name>
<param-value>
org.jboss.resteasy.core.ResourceMethodSecurityInterceptor
</param-value>
</context-param>
<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap
</listener-class>
</listener>
</web-app>

web.xml for Jersey


<web-app>
<servlet>
<servlet-name>ApplicationWS</servlet-name>
<servlet-class>
com.sun.jersey.spi.container.servlet.ServletContainer
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ApplicationWS</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>

Writing the actual web service


code
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path ("/service1")
public class HelloWorldResource {
@GET
@Produces ("text/plain")
public String sayHello() {
return "Hello World";

Using a web service – an universal web service


client
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class RestfulClient {

public static void main(String[] args) {


String uri ="http://serverIP:8080/ApplicationWS/service1";
URL url;
try {
url = new URL(uri);
HttpURLConnection connection =(HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "text/plain");
BufferedReader answer = new BufferedReader(new
InputStreamReader(connection.getInputStream()));

Remember that the SOAP only handles data in the form of XML.
REST data types:
• JSON @Produces("application/json")
• XML @Produces("application/xml")
• HTML @Produces("text/html")
The actual Web Service
Create a text file with the extension "*.jws" with the java code of the Web
Service
and drop it in the Web Content file of the "axis" dynamic project , or in the root of
the web application.
The HelloWorld.jws source file:
public class HelloWorld {
public HelloWorld() {
}
public String getHelloWorldMessage(String name, String surname) {
return "Hello World to" + name+" "+surname;
}
}
try{
//remember to replace localhost with the IP of the service provider (server)
//remember to use the port of your particular Tomcat installation
//this invokes HelloWorld service, change the URL to invoke other services
String endpointURL = "http://localhost:8080/axis/HelloWorld.jws";
org.apache.axis.client.Service service = new Service();// requires jars from axis
org.apache.axis.client.Call call = (Call) service.createCall();
call.setTargetEndpointAddress (new URL (endpointURL));
call.setOperationName ("getHelloWorldMessage");
// getHelloWorldMessage has two String parameters
String result = (String) call.invoke (new Object[] { "John", "James" } );
System.out.println (result);
}
catch (Exception e) { }
Crearea unui agent (II)
import jade.core.Agent;
import java.util.Iterator;
public class SimpleAgent extends Agent {
protected void setup() {
// Printout a welcome message
System.out.println("Hello World. I’m an agent!");
System.out.println(
"My local-name is "+getAID().getLocalName());
System.out.println("My GUID is "+getAID().getName());
System.out.println("My addresses are:");
Iterator it = getAID().getAllAddresses();
while (it.hasNext()) {
System.out.println("- "+it.next());
}
}
}
Terminarea unui agent
import jade.core.Agent;
public class TerminateAgent extends Agent {
protected void setup() {
// Printout a welcome message
System.out.println("Hello World. I am an agent!");
System.out.println(
"My local-name is "+getAID().getLocalName());
System.out.println("My GUID is "+getAID().getName());
doDelete();
}
protected void takeDown() {
System.out.println("Bye World. I am going off-line ...");
}
}
Transmiterea de parametrii unui agent
import jade.core.Agent;
public class AgentWithArgs extends Agent {
protected void setup() {
// Printout a welcome message
System.out.println("Hello World. I am an agent!");
System.out.println("My local-name is "+getAID().getLocalName());
System.out.println("My GUID is "+getAID().getName());
System.out.println("My arguments are:");
Object[] args = getArguments();
if (args != null) {
for (int i = 0; i < args.length; ++i) {
System.out.println("- "+args[i]);
}
}
}
}

Comportament generic
public class ThreeStepBehaviour extends Behaviour {
private int step = 0;
public void action() {
switch (step) {
case 0:
// perform operation X
step++; break;
case 1:
// perform operation Y
step++; break;
case 2:
// perform operation Z
step++; break;
}
}
public boolean done() {
return step == 3;
}
}

Planificarea temporala a operatiilor (I)


public class WakerAgent extends Agent {
protected void setup() {
System.out.println("Adding waker behaviour");
addBehaviour(new WakerBehaviour(this, 10000) {
protected void onWake() {
// perform operation X
}
} );
}}

Planificarea temporala a operatiilor (II)

public class TickerAgent extends Agent {


protected void setup() {
System.out.println("Adding ticker behaviour");
addBehaviour(new TickerBehaviour(this, 10000) {
protected void onTick() {
// perform operation Y
}
} );
}
}
Trimiterea unui mesaj
ACLMessage msgTx = new ACLMessage(ACLMessage.INFORM);
msgTx.addReceiver(new AID("Ionel", AID.ISLOCALNAME));
msgTx.setLanguage("Romana");
msgTx.setOntology("Saluturi");
msgTx.setContent("Buna ziua");
send(msgTx);
Receptionarea unui mesaj
ACLMessage msg = receive();
if (msg != null) {
// Process the message
}
Blocarea unui comportament in asteptarea unui
mesaj (II)
Metoda action() a unui comportament ce asteapta
receptionarea
unui mesaj se va programa astfel:
public void action() {
ACLMessage msg = myAgent.receive();
if (msg != null) {
// Message received. Process it
...
}
else {
block();
}
}
Filtrarea mesajelor (II)
import jade.core.Agent;
import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
public class SimpleFilteringAgent extends Agent {
public void setup() {
System.out.println("Hello. My name is "+getLocalName());
addBehaviour(new CyclicBehaviour() {
private MessageTemplate mt =
MessageTemplate.MatchPerformative(ACLMessage.PROPOSE);
public void action() {
System.out.println("Incerc sa preiau un nou mesaj PROPOSE");
ACLMessage msgRx = receive(mt);
if (msgRx != null) {
System.out.println("Un nou mesaj PROPOSE:\n"+msgRx);
}
else {
block();
}
}
});
}
}
Serviciu de “vanzare carti” (II)
import jade.core.Agent;
import jade.domain.FIPAAgentManagement.*;
import jade.domain.*;
public class ServiceAgent extends Agent {
protected void setup() {
// Register the book-selling service in the yellow pages
DFAgentDescription dfd = new DFAgentDescription();
dfd.setName(getAID());
ServiceDescription sd = new ServiceDescription();
sd.setType("Book-selling"); sd.setName(getLocalName()+"-Book- selling");
Property sdp = new Property();
sdp.setName("Role"); sdp.setValue("Seller");
sd.addProperties(sdp);
dfd.addServices(sd);
try { DFService.register(this, dfd);}
catch (FIPAException fe) { fe.printStackTrace(); }
}
protected void takeDown() {
// Deregister from the yellow pages
try { DFService.deregister(this); }
catch (FIPAException fe) { fe.printStackTrace(); }
}
}

Cautarea serviciilor (II)


import jade.core.Agent;
import java.util.Vector;
import jade.core.behaviours.TickerBehaviour;
import jade.domain.FIPAAgentManagement.*;
import jade.domain.*;
public class SearcherAgent extends Agent {
private Vector sellerAgents = new Vector(); // List of matching agents
protected void setup() {
// Update the list of seller agents every minute
addBehaviour(new TickerBehaviour(this, 60000) {
protected void onTick() {
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd = new ServiceDescription();
sd.setType("Book-selling");
template.addServices(sd);
try {
DFAgentDescription[] result = DFService.search(myAgent,template);
sellerAgents.clear();
for (int i = 0; i < result.length; ++i) {
sellerAgents.addElement(result[i].getName());
}
}
catch (FIPAException fe) { fe.printStackTrace();}
}
} );
}}

Comportament secvential (II)


import jade.core.*;
import jade.core.behaviours.*;
public class SequentialAgent extends Agent {
protected void setup() {
SequentialBehaviour threeStepBehaviour = new SequentialBehaviour();
threeStepBehaviour.addSubBehaviour(new OneShotBehaviour() {
public void action() {
// perform operation X
System.out.println("Operation X");
}
} );
threeStepBehaviour.addSubBehaviour(new OneShotBehaviour() {
public void action() {
// perform operation X
System.out.println("Operation Y");
}
} );
threeStepBehaviour.addSubBehaviour(new OneShotBehaviour() {
public void action() {
// perform operation X
System.out.println("Operation Z");
}
} );
addBehaviour(threeStepBehaviour);
}}

Comportament paralel (III)


public class ParallelAgent extends Agent {
class CounterBehaviour extends Behaviour {
private int crtStep = 0;
private int noOfSteps;
private String name;
protected CounterBehaviour(int n,String name) {
this.name = name; noOfSteps = n;
}
public void action() {
If (crtStep < noOfSteps) {
System.out.println(name+": Step "+crtStep); crtStep++;
}
}
public boolean done() { return crtStep == noOfSteps; }
public int onEnd() {
System.out.println(name+ " terminated."); return 1;
}
}
protected void setup() {
ParallelBehaviour threeBehaviours =
new ParallelBehaviour(ParallelBehaviour.WHEN_ALL);
threeBehaviours.addSubBehaviour(new CounterBehaviour(40,"A"));
threeBehaviours.addSubBehaviour(new CounterBehaviour(50,"B"));
threeBehaviours.addSubBehaviour(new CounterBehaviour(30,"C"));
addBehaviour(threeBehaviours);
}}
Enumeraţi caracteristicile unui sistem distribuit.
concurenta componentelor, lipsa unui ceas global, erori (defecte, caderi, engl.failures) independente ale
componentelor.
Enumeraţi principalele probleme ale proiectării unui sistem distribuit.
eterogenitatea componentelor, deschiderea/extensibilitatea, scalabilitatea, tratarea erorilor

Definiţi conceptul de cablu ubicuu.


Calculul ubicuu sau omniprezent (CU) reprezinta exploatarea diverselor dispozitive de calcul (mici si ieftine)
prezente in mediul fizic al utilizatorului incluzand caminul, biroul, zone de cumparaturi, etc.
Definiţi conceptul de calcul mobil.
efectuarea de sarcini de calcul in care utilizatorul se deplaseaza in /viziteaza alte locuri decat mediul obisnuit de
lucru, avand insa posibilitatea de a accesa diverse resurse sau servicii prin dispozitivele portabile aflate asupra
sa. Abilitatea de detectare a resurselor aflate in apropiere se numeste location-aware computing.

Ce este world wide web?


un sistem hipermedia distributi. Se bazeaza pe un model de structurare a documentelor cu trei
concepte:Multimedia – se refera la integrarea mai multor tipuri de media in cadrul aceluiasi model de document
Hiperdocument – se refera la crearea de legaturi intre documente Documente distribuite – se refera la
documente care contin legaturi la documente stocate pe alte calculatoare din cadrul unei retele.
Care sunt conceptele de bază ale tehnologiei Web?
Schema de denumire a resurselor URL, Protocolul de transfer al documentelor HTTP si Limbajul de specificare
a continutului paginilor WWW HTML.

Definiţi conceptul de middleware.


Un nivel software intermediar care funizeaza o abstractizare in programare si ascunde eterogenitatea retelei,
hardware-ului, sistemului de operare, limbajului de programare.

Definiţi conceptul de extensibilitate a unui sistem distribuit.


extensibilitatea este acea caracteristica a unui sistem care determina masura in care el poate fi extins sau
reimplementat in diverse moduri. In cazul SD ea se refera in special la gradul in care se pot adauga noi resurse
sau servicii la sistem.
Ce se înţelege prin scalabilitatea unui sistem distribuit?
Un sistem care ramane efectiv in prezenta unei cresteri semnificative a numarului de resurse si a numarului de
utilizatori.

Definiţi şi exemplificaţi conceptele server proxy şi memorie cache.


O memorie cache stocheaza datele recent folosite, mai aproape de procesul client care le-a folosit decat locul
normal unde sunt ele stocate. Cand un nou obiect este receptionat el va fi stocat in cache, posibil inlocuind alte
obiecte existente. Cand un obiect este cerut de un client el va fi intai cautat in cache de serviciul de cache si
furnizat de acolo in cazul existentei unei copii actualizate. Altfel se va extrage o copie actualizata de la sursa
normala. Memoriile cache pot fi alocate fiecarui client in parte sau pot fi alocate in servere proxy partajate de mai
multi clienti.
Exemple: Navigatoarele Web mentin o memorie cache a paginilor recent vizitate si a altor resurse Web, in
sistemul de fisiere al clientului. Se foloseste o cerere speciala HTTP pentru a cauta o pagina in cache inainte de
a o aduce de pe Web. Un server Web proxy furnizeaza o memorie cache pentru clientii dintr-un site sau mai
multe site-uri. Un server proxy poate avea si alte roluri, de exemplu accesul serverelor Web prin intermediul unui
firewall.
Definiţi şi exemplificaţi conceptele de network computer şi thin client.
Network computer = calculator ce isi descarca automat sistemul de operare si aplicatiile de pe un server.
Gestiunea fisierelor se realizeaza tot pe server. thin client = un nivel software de implementarea a unei interfete
utilizator bazata pe ferestre pe un calculator local, in timp ce partea mai consistenta a aplicatiei se executa pe un
calculator la distanta. Exemple: 1) sistemul X-11 din Unix face separarea la nivel de primitive grafice; 2) VNC
face separarea la nivel de operatii cu pixeli, mentinand astfel contextul cand utilizatorul se deplaseaza de la un
calculator la altul.

Definiţi conceptul de model arhitectural a unui SD.


Un model arhitectural al unui sistem descrie modul in care sistemul este descompus in subsisteme (aspectul
structural), relatiile/asocierile existente intre subsisteme si modul in care acestea sunt amplasate dpdv logic
si/sau fizic(aspectul de control).
Un model arhitectural al unui SD:simplifica si abstractizeaza tipurile componentelor individuale si a functiilor lor.
defineste componentele SD, modul in care ele interactioneaza (de exemplu roluri functionale si sabloane de
comunicare) si modul in care sunt ele mapate pe reteaua de comunicatie a SD (de exemplu sabloane utile de
distribuire a datelor si a incarcarii).

Definiţi elementele de performanţă ale canalelor de comunicaţie dintr-un sistem distribuit.


Latenta = intarzierera dintre trimiterea unui mesaj de catre un proces expeditor si receptionarea sa de catre
procesul receptor.Largimea de banda = cantitatea totala de informatie care poate fi transmisa in unitatea de
timp.Variatia temporala = variatia in timpul necesar transmiterii unei secvente de mesaje
Definiţi conceptul de comunicaţie client-server.
Este acel tip de comunicatie proiectata pentru a suporta rolurile si schimburile de mesaje dintr-o interactiune
tipica client-server. Se numeste si comunicatie cerere-raspuns.Este in general sincrona, raspunsul catre client
este si o confirmare .
Definiţi comunicaţia de grup între procesele SD.
o operatie de trimitere a unui mesaj de la un proces catre fiecare membru al unei multimi de procese astfel incat
apartenenta la grup sa fie transparenta pentru procesul expeditor. Trimiterea multipla nu trebuie confundata cu
difuzarea. Aceasta presupune trimiterea de mesaje tuturor statiilor dintr-o retea.

Definiţi SD sincrone.
Timpul necesar executiei unui pas de calcul in cadrul fiecarui proces si intarzierile de transmitere a mesajelor
sunt marginite si limita superiara a lor este cunoascuta deasemenea fiecare proces are un ceas local a carei rata
de deplasare fata de o referinta standard este cunoscuta.
Definiţi SD asincrone.
Timpul necesar executiei unui pas de calcul in fiecare proces, intarzierile de transmitere a mesajelor si
deplasamentele ceasurilor locale fata de o referinta standard sunt finite si arbitrare.

Enunţaţi caracteristicile comunicaţiei prin fluxuri TCP.


Dimensiunea mesajelor. Aplicatia este cea care alege dimensiunea datelor scrise sau citite din flux. Mesajele
pierdute. TCP utilizeaza mesaje de confirmare. Controlul fluxului. TCP incearca sa se adapteze la vitezele
actuale de transmisie sau receptie ale proceselor implicate. Ordonarea si duplicarea mesajelor. Se asociaza
identificatori de mesaje pentru fiecare pachet IP, fapt ce permite destinatarului sa detecteze si sa rejecteze
duplicatele, sau sa reordoneze pachetele ce nu au fost receptionate in ordinea in care au fost trimise. Destinatia
mesajelor. Conexiunea furnizeaza fluxurile care vor fi citite respectiv scrise, nefiind nevoie de a indica de fiecare
data adresele de IP si numarul portului.
Enumeraţi caracteristicile comunicaţiei prin datagrame UDP.
Dimensiunea mesajelor. Blocarea. Timeout. Receptie de la oricine.
Cum se elimină mesajele duplicate în protocolul cerere-răspuns peste UDP?
Mesajele cu acelasi requestId trebuie recunoscute si filtrate. Daca raspunsul nu a fost inca transmis, nu trebuie
sa se execute nici o actiune speciala.

Explicaţi de ce un server trebuie să gestioneze istoricul interacţiunii în protocolul cerere-răspuns?


Pentru serverele care necesita retransmisia raspunsului fara a reexecuta operatia trebuie gestionata istoria
interactiunii. Se numeste istorie o structura care contine mesajele de raspuns care au fost transmise. Aceasta
structura se foloseste pentru a permite serverului sa retransmita mesajele de raspuns la cererile clientilor.

Definiţi modelul de interacţiune al unui sistem distribuit(SD).


Acel model care trateaza performanta si dificultatea de precizare a limitelor de timp intr-un SD. Intarzierile si
dificultatea mentinerii unui timp global vor afecta acuratetea coordonarii proceselor.
Enumeraţi principalele componente ale modelului obiectual în sistemele distribuite.
Referinte la obiecte. Interfete. Actiuni. Exceptii. Colectarea gunoaielor.

Definiţi conceptul de interfaţă a unui obiect distribuit invocat de la distanţă.


Interfata unui modul specifica procedurile si variabilele sale ce pot fi accesate din alte module.
Definiţi conceptul de referinţă a unui obiect la distanţă.
un identificator al unui obiect care este valid intr-un SD si se transmite in cadrul mesajului de invocare.
Definiţi semantica at-leat-once a invocării la distanţă.
apelantul fie primeste un rezultat, in cazul in care apelul s-a executat cel putin o data, fie o exceptie ce il
informeaza ca nu s-a receptionat nici un rezultat. Aceasta semantica se poate realiza prin retransmisia mesajelor
de cerere, fapt ce mascheaza eventualele erori de omisiune in mesajle de cerere sau raspuns.
Definiţi conceptul de SD bazat pe evenimente.
modelul evenimentelor: anumite obiecte pot fi instiintate astfel incat sa reactioneze in cazul unor evenimente
receptionate de alte obiecte. SD bazate pe evenimente extind modelul evenimentelor astfel incat evenimentele
sa poata avea loc la OD. Ele utilizeaza tehnica de publicare-abonare.
Descrieţi arhitectura unui SD bazat pe evenimente.
Arhitectura urmareste decuplarea obiectelor editor de obiectele abonat astfel incat ele sa poate fi dezvoltate
independent si pe cat posbil sa nu fie foarte incarcate.Componenta principala este un serviciu de evenimente
care gestioneaza o baza de date cu evenimentele publicate si interesele abonatilor. Evenimentele obiectelor
editor sunt publicate in cadrul serviciului. Abonatii informeaza serviciul de tipurile evenimentelor de interes. La
aparitia unui eveniment la unul dintre obiectele de interes, se va trimite o instiintare abonatilor la acel eveniment.

Descrieţi rezolvarea numelor prin navigare iterativă.


• DNS suporta modelul navigarii iterative. In acest model clientul prezinta numele, serverului de nume local.
Acesta fie rezolva numele imediat, fie sugereaza un alt server de nume. Procesul continua pana cand numele
este rezolvat sau nu.
• Un alt sistem care suporta acest model este Networked File System – NFS. Motivul este posibilitatea intalnirii
unor legaturi simbolice care trebuie rezolvate in cadrul sistemului de fisiere al clientului, dar care pot indica catre
directoare in afara acestuia.
Descrieţi rezolvarea numelor prin navigare controlată nerecursivă.
In navigarea controlata exista un server care coordoneaza rezolvarea numelor si returneaza rezultatul
clientului.In varianta nerecursiva clientul alege unul dintre serverecare va comunica in continuare iterativ sau
prin transmisie multipla cu celelalte servere.

Enumeraţi 3 tipuri de interogări în DNS.


Tipuri de interogari: Rezolvarea numelor gazdelor, Localizarea gazdelor de posta electronica, Rezolvare inversa,
Informatii despre gazda, Servicii cunoscute

Definiţi şi exemplificaţi conceptul de serviciu de directoare.


un serviciu care stocheaza colectii de legaturi de forma (nume, atribute) si este capabil sa regaseasca intrarile
ce se identifica cu diverse specificatii ale atributelor. Un serviciu de directoare returneaza atributele unei entitati
care se identifica cu o specificatie de atribute data.
Exemple:
I) X.500 – sistem de directoare specific mediilor ce suporta modelul de comunicatii ISO-OSI
II) LDAP (Lightweight Directory Access Protocol) – versiunea simplificata a protocolului DAP din cadrul X.500.
DAP este protocolul de acces in sistemul de directoare X.500.
III) Microsoft Active Directory Services.
Uneori un serviciu de directoare se numeste si serviciu de paginii aurii (engl.yellow pages service) sau SN bazat
pe atribute, in timp ce un SN conventional se numeste si serviciu de pagini albe (engl.white pages service).

Ce înţelegeţi prin sincronizarea internă a ceasurilor în sistemele distribuite?


Sincronizare interna = presupune sincronizarea relativa a oricare doua procesoare din sistem. Dandu-se o
margine de timp D > 0 si un interval de timp real I, sincronizarea externa presupune indeplinirea conditiei |Ci(t) –
Cj(t)| <D pentru orice procesoare pi si pj astfel incat 1≤i,j≤n si pentru orice timp t din I. Sincronizarea externa cu
marginea D implica sincronizarea interna cu marginea D’ = 2D.
Ce înţelegeţi prin sincronizare externă a ceasurilor în SD?
presupune sincronizarea ceasurilor Ci ale proceselor cu o sursa de timp S externa, autoritara (de exemplu o
sursa de timp UTC). Dandu-se sursa de timp S, o margine de timp D > 0 si un interval de timp real I,
sincronizarea externa presupune indeplinirea conditiei |Ci(t) – S(t)| < D pentru toate procesoarele pi astfel incat 1
_ i _ n si pentru orice timp t din I.
Ce înţelegeţi prin corectitudinea ceasurilor în sistemele distribuite?
Un ceas hardware este corect daca si numai daca rata de deplasare este marginita superior de o valoare ρ>0.
Acest lucru inseamna ca eroare in masurarea intervalului de timp intre doua momente t2 > t1 satisface
inegalitatea: (1–ρ)(t2–t1) ≤ H(t2) – H(t1) ≤ (1 +ρ)(t2 – t1).
Aceasta conditie interzice salturile in valorile ceasurilor hardware.

Descrieţi algoritmul Berkeley de sincronizare a ceasurilor în sisteme asincrone.


- utilizeaza un calculator coordonator principal care are rolul de stapan . Coordonatorul interogheaza periodic
celelalte calculatoare cu rol de sclav, si acestea trimit
valorile ceasurilor lor.
-Coordonatorul estimeaza valorile locale ale ceasurilor prin masurarea timpilor de cerere-raspuns si medierea
acestor valori (inclusiv valoarea propriului ceas).
-Pentru mediere se considera o submultime de timpi cerere-raspuns care nu depasesc o valoare nominala
prescrisa.
-Ulterior coordonatorul va transmite inapoi fiecarui calculator sclav o valoare pozitiva sau negativa de ajustare a
ceasului. Se evita astfel introducerea unei incertitudini suplimentare pentru cazul in care s-ar trimite valoarea
exacta a timpului.
-In cazul defectarii calculatorului stapan, se va alege un alt stapan care va prelua functia predecesorului sau.
Descrieţi metoda lui Cristian de sincronizare a ceasurilor în sistemele asincrone.
- Procesul server S furnizeaza la cerere timpul corespunzator ceasului sau. Astfel un proces p va cere timpul
intr-un mesaj mc si va primi valoarea t a sa in mesajul mt.
-Procesul p masoara timpul total T necesar expedierii lui mc si receptionarii lui mt. Acuratetea acestei masuratori
este buna daca rata de deplasare a ceasului lui p este mica. Procesul p va seta timpul la valoarea t + T/2.
- Timpul ceasului lui S la sosirea mesajului mc va fi in intervalul [t + min, t + T – min].
Rezulta astfel o acuratete de (T/2 – min).

1. Enumeraţi caracteristicile unui sistem distribuit.


concurenta componentelor, lipsa unui ceas global, erori independente ale componentelor.
2. Definiţi conceptul de calcul ubicuu.
Calculul ubicuu sau omniprezent (CU) reprezinta exploatarea diverselor dispozitive de calcul
(mici si
ieftine) prezente in mediul fizic al utilizatorului incluzand caminul, biroul, zone de cumparaturi,
etc. Exista
suprapuneri ale CM si CU, dar aceste concepte sunt in general diferite. Se mai foloseste si
termenul de calcul
universal.
3. Care sunt conceptele de bază ale tehnologiei Web?
– Schema de denumire a resurselor (uniform resource locator) URL
– Protocolul de transfer al documentelor (hypertext transfer protocol) HTTP
– Limbajul de specificare a continutului paginilor WWW (hypertext markup language) HTML
4. Definiţi conceptul de middleware.
Middleware: Un nivel software intermediar care funizeaza o abstractizare in programare si
ascunde
eterogenitatea retelei, hardware-ului, sistemului de operare, limbajului de programare.
Majoritatea nivelelor middleware sunt implementate peste protocoalele Internet. Ele trateaza
in mod
obligatoriu diferentele intre sistemele de operare si hardware. Prin middleware se realizeaza
si transparenta.
Aceasta presupune furnizarea unui model de calcul uniform pentru programatorii aplicatiilor
distribuite. Aceste
aplicatii nu trebuie sa depinda de detaliile de retea.
5. Ce se înţelege prin scalabilitatea unui sistem distribuit?
SD scalabil = daca ramane efectiv in prezenta unei cresteri semnificative a numarului de
resurse si a
numarului de utilizatori.
6. Definiţi şi exemplificaţi conceptele server proxy şi memorie cache.
O memorie cache stocheaza datele recent folosite, mai aproape de procesul client care le-a
folosit decat
de locul normal unde sunt ele stocate. Cand un nou obiect este receptionat el va fi stocat in
cache, posibil
inlocuind alte obiecte existente. Cand un obiect este cerut de un client el va fi intai cautat in
cache de serviciul
de cache si furnizat de acolo in cazul existentei unei copii actualizate. Altfel se va extrage o
copie actualizata de
la sursa normala. Memoriile cache pot fi alocate fiecarui client in parte sau pot fi alocate in
servere proxy
partajate de mai multi clienti.
Exemple: Navigatoarele Web mentin o memorie cache a paginilor recent vizitate si a altor
resurse Web,
in sistemul de fisiere al clientului. Se foloseste o cerere speciala HTTP pentru a cauta o
pagina in cache inainte
de a o aduce de pe Web. Un server Web proxy furnizeaza o memorie cache pentru clientii
dintr-un site sau mai
multe site-uri. Un server proxy poate avea si alte roluri, de exemplu accesul serverelor Web
prin intermediul
unui firewall.
7. Definiţi elementele de performanţă ale canalelor de comunicaţie dintr-un sistem
distribuit.
Comunicatia in reteaua de calculatoare a unui SD se caracterizeaza prin latenta, largime de
banda si
variatie temporala.
8.
9. Enumeraţi caracteristicile comunicaţiei prin datagrame UDP.
Permite transferul de datagrame de la un proces expeditor la un proces destinatar.
Nu exista confirmare si mesajul se poate pierde datorita erorilor de transmisie.
Orice proces expeditor sau destinatar va crea intai un soclu legat la o adresa de IP si un port
local. Un
proces destinatar isi va conecta soclul la un port pe care il va face cunoscut expeditorilor. Un
expeditor isi va
lega soclul la orice port local disponibil. Apelul receive la destinatar va determina mesajul
receptionat cat si
adresa de IP si portul expeditorului. Se permite astfel trimiterea unui raspuns expeditorului.
• Dimensiunea mesajelor. Protocolul IP permite transmiterea de pachete de pana la 2^16
octeti
(incluzand si antetele). Dimensiunea uzuala a mesajelor este de 8 Kocteti.
• Blocarea. Comunicatia prin datagrame UDP foloseste operatii send fara blocare si operatii
receive cu
blocare. Daca nu exista procese la destinatie cu un soclu conectat corespunzator, mesajele
se pierd. Daca
procesul destinatar are de efectuat alte sarcini, el va folosi un fir separat pentru realizarea
acestor sarcini.
• Timeout. Uneori nu este posibil ca destinatarul sa astepte nelimitat primirea unui mesaj. In
acest caz se
poate seta un timeout pe un anumit soclu.
• Receptie de la oricine. Metoda receive nu specifica o adresa pentru originea mesajelor. Este
insa
posibil sa se conecteze un soclu pentru datagrame cu un port si o adresa de IP la distanta
astfel incat
comunicatia sa se faca doar cu adresa respectiva.
10. Definiţi conceptul de referinţă a unui obiect la distanţă.
Referinta unui obiect la distanta (remote object reference) – ROD = un identificator al unui
obiect care
este valid intr-un SD. In cadrul mesajului de invocare a unui OD se transmite un ROD.
11. Explicaţi de ce un server trebuie să gestioneze istoricul interacţiunii în protocolul
cerere-răspuns?
Pentru serverele care necesita retransmisia raspunsului fara a reexecuta operatia trebuie
gestionata istoria
interactiunii. Se numeste istorie o structura care contine mesajele de raspuns care au fost
transmise. O intrare in
aceasta structura contine un identificator al cererii, un mesaj si identificatorul clientului catre
care a fost
transmis. Aceasta structura se foloseste pentru a permite serverului sa retransmita mesajele
de raspuns la
cererile clientilor. Pentru ca structura sa nu devina prea mare serverul trebuie sa poata decida
cand anumite
raspunsuri nu mai trebuie pastrate in istorie. Deoarece un client face o singura cerere la un
moment dat, serverul
poate interpreta fiecare cerere drept o confirmare a raspunsului anterior. De aceea istoria va
pastra doar ultimul
mesaj de raspuns trimis fiecarui client. Sunt insa probleme daca numarul clientilor este mare.
Deoarece cand un
client se termina el nu confirma ultimul raspuns primit, acesta va trebui inlaturat automat din
istoric dupa un
anumit timp.
12. Enumeraţi principalele componente ale modelului obiectual în sistemele distribuite.
Applications
RMI, RPC and events
Request reply protocol, External data representation
Operating System
13. Definiţi conceptul de interfaţă a unui obiect distribuit invocat de la distanţă.
O interfata defineste semnaturile unei multimi de metode. Un obiect furnizeaza o anumita
interfata daca
clasa sa contine cod ce implementeaza metodele interfetei. O clasa poate implementa mai
multe interfete. O
interfata defineste un tip ce se poate folosi in declaratii de variabile sau parametrii.
14. Definiţi semantica at-leat-once a invocării la distanţă.
Semantica invocarii at-least-once:
– In acest caz apelantul fie primeste un rezultat, in cazul in care apelul s-a executat cel putin
o data, fie o
exceptie ce il informeaza ca nu s-a receptionat nici un rezultat.
– Aceasta semantica se poate realiza prin retransmisia mesajelor de cerere, fapt ce
mascheaza
eventualele erori de omisiune in mesajle de cerere sau raspuns.
– Sufera de urmatoarele tipuri de erori: i) erori de oprire ale serverului ce contine OD; ii) erori
arbitrare,
in cazul in care retransmiterea mesajului de invocare poate conduce la receptionarea multipla
si executia
multipla a metodei invocate, fapt ce poate determina stocarea si returnarea unor valori
eronate (se intampla in
cazul operatiile neidempotente).
 Aceasta semantica este acceptabila atunci cand metodele ID sunt toate idempotente.
• Semantica invocarii maybe:
– In acest caz apelantul nu va putea sti cu siguranta daca invocarea s-a executat sau nu.
Aceasta situatie
apare cand nu s-a luat nici una dintre masurile de toleranta la defecte. Putem avea
urmatoarele tipuri de erori: i)
erori de omisiune in cazul in care mesajul de invocare sau de rezultat s-a pierdut; ii) erori de
oprire in cazul in
care serverul ce contine OD se defecteaza.
– Daca mesajul de rezultat nu a fost receptionat dupa scurgerea cuantei de timeout si nu
exista
reincercari, nu exista certitudinea daca metoda s-a executat sau nu.Se poate insa ca metoda
sa se fi executat, dar
mesajul cu rezultatul sa se fi pierdut. Mai mult, in cazul unui sistem asincron este posibil ca
mesajul de raspuns
sa soseasca dupa timeout.
– Aceasta semantica este utila in aplicatiile in care eventualeleinvocari esuate sunt
acceptabile.
15. Definiţi conceptul de sistem distribuit bazat pe evenimente.
SD bazate pe evenimente extind acest model (Modelul evenimentelor) astfel incat
evenimentele sa poata
avea loc la OD. Ele utilizeaza tehnica de publicare-inscriere (engl.publishsubscribe) sau
publicare-abonare.
16. Descrieţi rezolvarea numelor prin navigare iterativă.
• DNS suporta modelul navigarii iterative. In acest model clientul prezinta numele, serverului
de nume
local. Acesta fie rezolva numele imediat, fie sugereaza un alt server de nume. Procesul
continua pana cand
numele este rezolvat sau nu.
• Un alt sistem care suporta acest model este Networked File System – NFS. Motivul este
posibilitatea
intalnirii unor legaturi simbolice care trebuie rezolvate in cadrul sistemului de fisiere al
clientului, dar care pot
indica catre directoare in afara acestuia.
• O alternativa la navigarea iterativa este trimiterea multipla. Clientul trimite multiplu numele
catre
grupul de servere de nume. Deoarece se poate intampla ca numele sa fie nelegat, caz in care
nici unul dintre
servere nu va raspunde, s-a propus folosirea unui server special pentru a trata aceasta
situatie.
17. Definiţi şi exemplificaţi conceptul de serviciu de directoare.
Serviciu de directoare (engl.directory service) = un serviciu care stocheaza colectii de legaturi
de forma
(nume, atribute) si este capabil sa regaseasca intrarile ce se identifica cu diverse specificatii
ale atributelor. Un
serviciu de directoare returneaza atributele unei entitati care se identifica cu o specificatie de
atribute data.
Exemple:
– i) X.500 – sistem de directoare specific mediilor ce suporta modelul de comunicatii ISO-OSI
– ii) LDAP (Lightweight Directory Access Protocol) – versiunea simplificata (engl.lightweight) a
protocolului DAP din cadrul X.500. DAP este protocolul de acces in sistemul de directoare
X.500.
– iii) Microsoft Active Directory Services.
18. Ce înţelegeţi prin sincronizarea internă a ceasurilor în sistemele distribuite?
Sincronizare interna = presupune sincronizarea relativa a oricare doua procesoare din sistem.
Dandu-se o
margine de timp D > 0 si un interval de timp real I, sincronizarea externa presupune
indeplinirea conditiei |Ci(t)
– Cj(t)| <D pentru orice procesoare pi si pj astfel incat 1≤i,j≤n si pentru orice timp t din I.
• Sincronizarea externa cu marginea D implica sincronizarea interna cu marginea D’ = 2D.
19. Ce înţelegeţi prin corectitudinea ceasurilor în sistemele distribuite?
Un ceas hardware este corect daca si numai daca rata de deplasare este marginita superior
de o valoare
ρ>0. Acest lucru inseamna ca eroare in masurarea intervalului de timp intre doua momente t2
> t1 satisface
inegalitatea: (1–ρ)(t2–t1) ≤ H(t2) – H(t1) ≤ (1 +ρ)(t2 – t1).
Aceasta conditie interzice salturile in valorile ceasurilor hardware.
1. Enumeraţi principalele probleme ale proiectării unui sistem distribuit.
Eterogenitatea componentelor, deschiderea/extensibilitatea, scalabilitatea, tratarea erorilor.
Un SD (de ex.Internet) trebuie sa permita rularea de aplicatii si accesul la servicii peste o
colectie
eterogena de calculatore si retele. Eterogenitatea se refera la: retele, componente hardware
(procesoare), sisteme
de operare, limbaje de programare, implementari de la diversi dezvoltatori.
Spre exemplu, indiferent de tipul de retea, calculatoarele conectate la Internet folosesc
aceeasi suita de
protocoale.
2. Definiţi conceptul de calcul mobil.
CM = efectuarea de sarcini de calcul in care utilizatorul se deplaseaza in /viziteaza alte locuri
decat
mediul obisnuit de lucru, avand insa posibilitatea de a accesa diverse resurse sau servicii prin
dispozitivele
portabile aflate asupra sa. Abilitatea de detectare a resurselor aflate in apropiere se numeste
location-aware
computing.
3. Ce este world wide web?
WWW este un sistem hipermedia distribuit. Se bazeaza pe un model de structurare a
documentelor ce
foloseste trei concepte:
a. Multimedia – se refera la integrarea mai multor tipuri de media in cadrul aceluiasi model de
document: text, grafica, imagine, video, etc.
b. Hiperdocument – se refera la crearea de legaturi intre documente, folosind un mecanism
propriu
modelului de document.
c. Documente distribuite – se refera la documente care contin legaturi la documente stocate
pe alte
calculatoare din cadrul unei retele.
Se spune ca WWW foloseste un model de documente hipermedia distribuite. Termenul de
hipermedia
inglobeaza conceptele de multimedia si hiperdocument
Exista trei nivele de distribuire a resurselor informationale in WWW: acelasi fisier, fisiere
separate pe
acelasi calculator, calculatoare diferite.
4. Definiţi conceptul de extensibilitate a unui sistem distribuit.
Deschiderea sau extensibilitatea este acea caracteristica a unui sistem care determina
masura in care el
poate fi extins sau reimplementat in diverse moduri. In cazul SD ea se refera in special la
gradul in care se pot
adauga noi resurse sau servicii la sistem.
Nu se poate realiza decat prin publicarea pentru dezvoltatorii de software a specificatiilor si
documentatiei interfetelor software esentiale ale componentelor sistemului = “key interfaces
are published”.
Acest proces ocoleste procedurile formale de standardizare ce sunt de obicei complicate si
decurg foarte incet.
5. Definiţi conceptul de model arhitectural a unui sistem distribuit.
Un model arhitectural al unui sistem descrie modul in care sistemul este descompus in
subsisteme (parti,
componente), relatiile/asocierile existente intre subsisteme si modul in care acestea sunt
amplasate dpdv logic
si/sau fizic.
Un model arhitectural al unui SD:
20. simplifica si abstractizeaza tipurile componentelor individuale si a functiilor lor.
21. defineste componentele SD, modul in care ele interactioneaza (de exemplu roluri
functionale si
sabloane de comunicare) si modul in care sunt ele mapate pe reteaua de comunicatie a SD
(de
exemplu sabloane utile de distribuire a datelor si a incarcarii).
Se apreciaza ca un model arhitectural are in vedere doua aspecte: un model structural si un
model al
controlului.
Un model structural indica modul de structurare al sistemului in subsisteme. Categorii de
modele
structurale: modelul datelor centralizate (engl.repository model), modelul client/server,
modelul masinii
abstracte.
Un model al controlului indica modul in care sunt controlate relatiile dintre diversele
subsisteme.
Categorii de modele de control: modelul controlului centralizat, modelul evenimentelor
(engl.event-driven
model).
Exemple de modele arhitecturale ale SD: modelul client/server, modelul proceselor de acelasi
rang
(pereche, engl.peer processes).
6. Definiţi şi exemplificaţi conceptele de network computer şi thin client.
Network computer = calculator ce isi descarca automat sistemul de operare si aplicatiile de
pe un server.
In plus gestiunea fisierelor se realizeaza tot pe server. In acest fel migrarea utilizatorului intre
diverse retele se
poate realiza mai usor.
Conceptul de thin client se refera la un nivel software de implementarea a unei interfete
utilizator bazata
pe ferestre pe un calculator local, in timp ce partea mai consistenta a aplicatiei se executa pe
un calculator la
distanta. Diferenta fata de network computer este ca aplicatia nu se descarca local, ci se
ruleaza pe server.
Dezavantajul este ca in aplicatiile puternic interactive timpul de raspuns va creste datorita
volumului mare de
informatii transmise intre client si server. Este important nivelul de separare intre client si
server.
Exemple: i) sistemul X-11 din Unix face separarea la nivel de primitive grafice; ii) Sistemul
Virtual
Network Computer – VNC face separarea la nivel de operatii cu pixeli, mentinand astfel
contextul cand
utilizatorul se deplaseaza de la un calculator la altul.
7. Definiţi sistemele distribuite asincrone.
Distinctia intre sincron si asincron se face de-alungul a doua coordonate: existenta/inexistenta
ceasului
global si predictibilitatea/nepredictibilitatea intarzierilor de comunicatie.
SD asincrone se caracterizeaza prin:
– Timpul necesar executiei unui pas de calcul in fiecare proces are o valoare finita arbitrara.
– Intarzierile de transmitere a mesajelor sunt finite si arbitrare.
– Deplasamentele ceasurilor locale fata de o referinta standard sunt finite si arbitrare.
Orice sistem sincron este in acelasi timp si asincron. Astfel ca rezolvand o problema pe cazul
asincron se
asigura universalitatea solutiei. Din pacate insa nu orice problema se poate rezolva in ipoteza
asincrona.
SD sincrone se caracterizeaza prin:
– Timpul necesar executiei unui pas de calcul in cadrul fiecarui proces are limite inferioara si
superioara
cunoscute.
– Intarzierile de transmitere a mesajelor sunt marginite si limita superiara a lor este
cunoascuta.
– Fiecare proces are un ceas local a carei rata de deplasare fata de o referinta standard este
cunoscuta.
• Este foarte dificil sa se obtina valori precise ale limitelor de timp dintr-un sistem sincron, desi
acestea
exista in SD reale. Se poate face insa o modelare a unui algoritm ca un sistem sincron pentru
a studia
comportamentul sau cat mai aproape de realitate. In practica necunoasterea limitelor se
poate rezolva folosind
tehnica limitarii timpului.
8. Definiţi modelul de interacţiune al unui sistem distribuit(SD).
Este acel tip de comunicatie proiectata pentru a suporta rolurile si schimburile de mesaje
dintr-o
interactiune tipica client-server. Se numeste si comunicatie cerere-raspuns (engl.request-
reply).
Caracteristici: i) este in general sincrona deoarece procesul client se blocheaza pana la
sosirea
raspunsului de la server; ii) este fiabila deoarece raspunsul catre client este si o confirmare
(engl.
acknowledgement).
Interschimburile de mesaje intre client si server se descriu in termenii primitivelor send si
receive din
Java API pentru datagrame UDP, desi pentru implementare se pot folosi si fluxurile TCP.
Avantajul folosirii
UDP este evitarea supraincarcarii specifice TCP, totodata asigurandu-se:
Thi
n Clien
t
Applicatio
nProces
s
Network computer or
PC
Compute
server
networ
k
a. Confirmarile sunt implicite datorita faptului ca oricarei cereri ii corespunde un raspuns.
b. Stabilirea unei conexiuni se face prin doua perechi suplimentare de mesaje, in plus fata de
perechea
necesara pentru o cerere si un raspuns.
c. Controlul fluxului este redundant cand se transmit mesaje relativ mici.
9. Enunţaţi caracteristicile comunicaţiei prin fluxuri TCP.
Furnizeaza o abstractizare pentru crearea unui flux de octeti intre expeditor si destinatar.
Dimensiunea mesajelor. Aplicatia este cea care alege dimensiunea datelor scrise sau citite
din flux.
Mesajele pierdute. TCP utilizeaza mesaje de confirmare. De exemplu, pentru fiecare pachet
IP trimis se
asteapta o confirmare de primire. TCP foloseste o schema bazata pe o fereastra
alunecatoare pentru a limita
numarul de confirmari necesare.
Controlul fluxului. TCP incearca sa se adapteze la vitezele actuale de transmisie sau receptie
ale
proceselor implicate. De exemplu, daca expeditorul este mai rapid decat destinatarul, el va fi
blocat pana cand
destinatarul poate receptiona din nou.
Ordonarea si duplicarea mesajelor. Se asociaza identificatori de mesaje pentru fiecare pachet
IP, fapt ce
permite destinatarului sa detecteze si sa rejecteze duplicatele, sau sa reordoneze pachetele
ce nu au fost
receptionate in ordinea in care au fost trimise.
Destinatia mesajelor. Comunicatia este bazata pe conexiune. Perechea de procese
comunicante stabilesc
intai o conexiune inainte de a comunica pe flux. Conexiunea furnizeaza fluxurile care vor fi
citite respectiv
scrise, nefiind nevoie de a indica de fiecare data adresele de IP si numarul portului. Stabilirea
unei conexiuni
presupune executarea unui apel connect de la expeditor, urmat de un apel accept la
destinatar.
10. Definiţi conceptul de comunicaţie client-server.
Este acel tip de comunicatie proiectata pentru a suporta rolurile si schimburile de mesaje
dintr-o
interactiune tipica client-server. Se numeste si comunicatie cerere-raspuns (engl.request-
reply).
Caracteristici: i) este in general sincrona deoarece procesul client se blocheaza pana la
sosirea
raspunsului de la server; ii) este fiabila deoarece raspunsul catre client este si o confirmare
(engl.
acknowledgement).
Interschimburile de mesaje intre client si server se descriu in termenii primitivelor send si
receive din
Java API pentru datagrame UDP, desi pentru implementare se pot folosi si fluxurile TCP.
Avantajul folosirii
UDP este evitarea supraincarcarii specifice TCP, totodata asigurandu-se:
– Confirmarile sunt implicite datorita faptului ca oricarei cereri ii corespunde un raspuns.
– Stabilirea unei conexiuni se face prin doua perechi suplimentare de mesaje, in plus fata de
perechea
necesara pentru o cerere si un raspuns.
– Controlul fluxului este redundant cand se transmit mesaje relativ mici.
11. Cum se elimină mesajele duplicate în protocolul cerere-răspuns peste UDP?
Eliminarea mesajelor de cerere duplicate. In cazurile in care cererea este retransmisa,
serverul o va putea
primi de mai multe ori. De exemplu, clientul poate primi cererea, insa emiterea raspunsului
poate cuanta de
timeout. Astfel ca exista posibilitatea ca serverul sa execute cererea de mai multe ori. Din
acest motiv, mesajele
cu acelasi requestId trebuie recunoscute si filtrate. Daca insa raspunsul nu a fost inca
transmis, nu trebuie sa se
execute nici o actiune speciala.
12. Definiţi comunicaţia de grup între procesele SD.
Schimbul de mesaje intre perechi de procese nu este intotdeauna cel mai bun model de
comunicare
dintre un proces si un grup de procese. Un exemplu este un serviciu distribuit implementat
sub forma unui grup
de procese.
Se numeste operatie de trimitere multipla (engl.multicast operation) o operatie de trimitere a
unui mesaj
de la un proces catre fiecare membru al unei multimi de procese astfel incat apartenenta la
grup sa fie
transparenta pentru procesul expeditor. Trimiterea multipla nu trebuie confundata cu
difuzarea (engl.broadcast).
Aceasta presupune trimiterea de mesaje tuturor statiilor dintr-o retea.
13. Definiţi conceptul de interfaţă a unui obiect distribuit invocat de la distanţă.
Limbajele moderne de programare permit organizarea programelor sub forma unei multimi de
module
care comunica intre ele. Comunicarea se face prin definirea unei interfete pentru fiecare
modul in parte.
Interfata unui modul specifica procedurile si variabilele sale ce pot fi accesate din alte module.
In modelul client-server, serverul furnizeaza o interfata pentru servicii – IS (engl.service
interface). In
SD obiectuale, un OD furnizeaza o interfata la distanta – ID (engl.remote interface). Intre ele
exista diferenta
ca metodele dintr-o ID pot transmite obiecte si/sau ROD ca argumente si pot returna obiecte
si/sau ROD ca
rezultate.
14. Definiţi semantica at-most-once invocării la distanţă.
Semantica invocarii at-most-once:
 In acest caz apelantul fie primeste un raspuns, in cazul in care apelul s-a executat exact o
data, fie o
exceptie ce il informeaza ca nu s-a receptionat nici un rezultat.
 Aceasta semantica se poate realiza prin utilizarea tuturor masurilor de toleranta la defecte..
Ca si in
cazul anterior, utilizarea reincercarilor va duce la mascarea erorilor de omisiune a mesajelor
de
invocare sau de rezultat. Masurile aditionale previn erorile arbitrare asigurandu-se ca pentru
fiecare
invocare o metoda se va executa cel mult o singura data.
15. Descrieţi arhitectura unui SD bazat pe evenimente.
Arhitectura urmareste decuplarea obiectelor editor (engl.publisher) de obiectele abonat
(engl.subscriber) astfel incat ele sa poate fi dezvoltate independent si pe cat posbil sa nu fie
foarte incarcate.
Componenta principala este un serviciu de evenimente (engl.event service) care gestioneaza
o baza de
date cu evenimentele publicate si interesele abonatilor.
Evenimentele obiectelor editor sunt publicate in cadrul serviciului. Abonatii informeaza
serviciul de
tipurile evenimentelor de interes.
La aparitia unui eveniment la unul dintre obiectele de interes, se va trimite o instiintare
abonatilor la acel
eveniment.
16. Descrieţi rezolvarea numelor prin navigare controlată nerecursivă.
In navigarea controlata (engl.server-controlled navigation) exista un server care coordoneaza
rezolvarea numelor si returneaza rezultatul clientului.
Varianta nerecursiva. In aceasta varianta clientul alege unul dintre servere. Acesta va
comunica in
continuare iterativ sau prin transmisie multipla cu celelalte servere.
17. Definiţi şi exemplificaţi conceptul de serviciu de directoare.
Serviciu de directoare (engl.directory service) = un serviciu care stocheaza colectii de legaturi
de forma
(nume, atribute) si este capabil sa regaseasca intrarile ce se identifica cu diverse specificatii
ale atributelor. Un
serviciu de directoare returneaza atributele unei entitati care se identifica cu o specificatie de
atribute data.
Exemple:
i) X.500 – sistem de directoare specific mediilor ce suporta modelul de
comunicatii ISO-OSI
ii) LDAP (Lightweight Directory Access Protocol) – versiunea simplificata (engl.lightweight) a
protocolului
DAP din cadrul X.500. DAP este protocolul de acces in sistemul de directoare X.500.
object of interest observer subscriber
Event service
object of interest
object of interest observer
subscriber
subscriber
3.
1.
2. notification
notification
notification
notification

iii) Microsoft Active Directory Services.


Observatie: DNS nu este structurat pentru cautare, deci nu este un serviciu de directoare
propriuzis.
• Uneori un serviciu de directoare se numeste si serviciu de paginii aurii (engl.yellow pages
service) sau SN
bazat pe atribute, in timp ce un SN conventional se numeste si serviciu de pagini albe
(engl.white pages
service).
18. Ce înţelegeţi prin sincronizare externă a ceasurilor în SD?
Sincronizare externa = presupune sincronizarea ceasurilor Ci ale proceselor cu o sursa de
timp S externa,
autoritara (de exemplu o sursa de timp UTC). Dandu-se sursa de timp S, o margine de timp
D > 0 si un interval
de timp real I, sincronizarea externa presupune indeplinirea conditiei |Ci(t) – S(t)| < D pentru
toate procesoarele
pi astfel incat 1 _ i _ n si pentru orice timp t din I.
19. Enumeraţi 3 tipuri de interogări în DNS.
Tipuri de interogari: Rezolvarea numelor gazdelor, Localizarea gazdelor de posta electronica,
Rezolvare
inversa, Informatii despre gazda, Servicii cunoscute
20. Descrieţi algoritmul Berkeley de sincronizare a ceasurilor în sisteme asincrone.
Este un algoritm de sincronizare interna care a fost initial dezvoltat pentru o colectie de
calculatoare ce
ruleaza sistemul de operare Berkeley UNIX.
Acest algoritm utilizeaza un calculator coordonator principal care are rolul de stapan
(engl.master).
Coordonatorul interogheaza periodic celelalte calculatoare cu rol de sclav (engl.slave), si
acestea trimit
valorile ceasurilor lor.
Coordonatorul estimeaza valorile locale ale ceasurilor prin masurarea timpilor de cerere-
raspuns
(engl.round-trip times) si medierea acestor valori (inclusiv valoarea propriului ceas).
Pentru mediere se considera o submultime de timpi cerere-raspuns care nu depasesc o
valoare nominala
prescrisa.
Ulterior coordonatorul va transmite inapoi fiecarui calculator sclav o valoare pozitiva sau
negativa de
ajustare a ceasului. Se evita astfel introducerea unei incertitudini suplimentare pentru cazul in
care s-ar trimite
valoarea exacta a timpului.
In cazul defectarii calculatorului stapan, se va alege un alt stapan care va prelua functia
predecesorului
sau.
21. Descrieţi metoda lui Cristian de sincronizare a ceasurilor în sistemele asincrone.
Aceasta metoda utilizeaza un server de timp conectat la un dispozitiv care receptioneaza
semnale de la o
sursa UTC pentru sincronizare externa.
Procesul server S furnizeaza la cerere timpul corespunzator ceasului sau. Astfel un proces p
va cere
timpul intr-un mesaj mc si va primi valoarea t a sa in mesajul mt.
Procesul p masoara timpul total T necesar expedierii lui mc si receptionarii lui mt. Acuratetea
acestei
masuratori este buna daca rata de deplasare a ceasului lui p este mica (de exemplu intr-o
LAN T este de ordinul
ms iar rata de deplasare este de ordinul 10 -6). Procesul p va seta timpul la valoarea t + T/2.
Timpul ceasului lui S la sosirea mesajului mc va fi in intervalul [t + min, t + T – min].
Rezulta astfel o acuratete de (T/2 – min). Acuratetea se poate imbunatati efectuand mai multe
cereri
succesive si alegand apoi valoarea minima a lui T.
O deficienta majora este aceea ca serverul de timp se poate defecta. Pentru eliminarea
acestei deficiente
timpul poate fi furnizat de un grup de servere sincronizate in timp, fiecare cu un receptor
pentru semnale de
timp UTC.
Nivelul de prezentare
• Este nivelul ce permite SID sa comunice cu actorii externi (utilizatori umani sau alte
programe, ce ruleaza
eventual pe alte calculatoare).
• Un actor extern care exploateaza serviciile/ functiile/ operatiile SID se numeste client.
• Un client interactioneaza cu SID prin intermediul nivelului de prezentare. Astfel, clientul
invoca operatiile
asupra SID si primeste rezultatele de la SID prin intermediul nivelului de prezentare.
• Exemple:
– Interfata grafica pentru o aplicatie desktop. Clientul este un utilizator uman.
– Un modul ce formateaza datele conform unor cerinte sintactice. Clientul este un program ce
consuma date
formatate conform sintaxei respective.
– Un server de Web (HTTP). Clientul este un navigator de Web care preia paginile livrate de
server si le
afiseaza grafic.
Nivelul de logica a aplicatiei
• Nivelul de logica a aplicatiei consta dintr-o multime de programe si module care
implementeaza operatiile
realizate de catre SID. Acestea se mai numesc si serviciile realizate de SID.
Acest nivel are in vedere regulile (engl.business rules), constrangerile si procesele
(engl.business processes)
realizate de SID.
• Exemplu: extragerea unei sume de bani dintr-un cont bancar. Serviciul preia cererea,
verifica daca exista
fonduri suficiente in cont, verfica daca suma extrasa nu depaseste limita maxima admisibila,
creaza o
inregistrare noua in istoricul operatiilor realizate, actualizeaza balanta, si in final aproba
efectuarea inmanarii
sumei cerute.
• Multimea pasilor necesari pentru realizarea unui serviciu este invizibila pentru client. Ea
reflecta logica de
realizare a operatiei din punctul de vedere al furnizorului serviciului respectiv.
• Depinzand de complexitatea logicii serviciului si de maniera de implementare acest nivel se
mai numeste si:
business process, business rules, business logic sau simplu server.
Nivelul de gestiune a resurselor
• Nivelul de gestiune al resurselor se ocupa cu organizarea (stocarea, indexarea si regasirea)
datelor necesare
pentru realizarea logicii aplicatiei. Uneori se mai numeste si nivel de date (engl.data layer).
• Datele sunt pastrate in baze de date, sisteme de fisiere sau alte depozite de informatie.
• Dintr-o perspectiva mai abstracta se poate considera ca acest nivel este responsabil cu
implementarea unor
diverse surse de date ale SID, independent de natura acestora.
• In cadrul acestui nivel se poate include orice entitate externa care furnizeaza informatie
pentru SID si are
capabiloitati de interogare si persistenta. O astfel de entitate poate fi la randul sau un SID
structurat pe cele trei
nivele: prezentare, logica a aplicatiei si gestiunea resurselor.

1. Enumerati si exemplificati trei tehnici de mentinere a disponibilitatii unui sistem


distribuit
– Detectarea erorilor. Numai anumite defecte pot fi detectate (de ex, detectarea
coruptiei datelor prin sume de control). Problema dificila este insa sa se gestioneze si
prezenta erorilor ce nu pot fi detectate cu certitudine, ci doar suspectate.
– Mascarea erorilor. Se refera la ascunderea defectelor care au fost detectate. De
exemplu: i) mesajele eronate sau pierdute pot fi retransmise; ii) replicarea permite
folosirea unei copii in cazul coruperii originalului.
– Toleranta la erori. De exemplu in cazul deteriorarii sau indisponibilitatii unui
serviciu Web, utilizatorul va fi instiintat de navigator, nefiind lasat sa astepte la infinit.
– Recuperarea din erori. Presupune proiectarea SD a.i.starile eronate sa poata fi
“derulate inapoi” (engl.rolled back). Ex.tranzactii.
– Redundanta. Presupune realizarea tolerantei la defecte prin folosirea unor
componente redundante. Exemple: i) existenta a cel putin doua cai intre doua rutere
din Internet; ii) orice tabela de nume din DNS este replicata pe cel putin doua servere.
2. Servere proxy si memorii cache in sistemele distribuite (concept si exemple)
• O memorie cache stocheaza datele recent folosite, mai aproape (spatial sau temporal)
de procesul client care le-a folosit decat locul unde sunt ele stocate in mod normal.
Cand un nou obiect este receptionat el va fi stocat in cache, posibil inlocuind alte
obiecte
existente. Cand un obiect este cerut de un client el va fi intai cautat in cache de
serviciul de cache si furnizat de acolo in cazul existentei unei copii actualizate. Altfel
se va extrage o copie actualizata de la sursa normala. Memoriile cache pot fi alocate
fiecarui client in parte sau pot fi alocate in servere proxy partajate de mai multi clienti.
• Exemple:
– Navigatoarele Web mentin o memorie cache a paginilor recent vizitate si a altor
resurse Web, in sistemul de fisiere al clientului. Se foloseste o cerere speciala HTTP
pentru a cauta o pagina in cache inainte de a o aduce de pe Web. Un server Web proxy
furnizeaza o memorie cache
pentru clientii dintr-un site sau mai multe site-uri.
– Un server proxy poate avea si alte roluri, de exemplu accesul la Web print-un
firewall.
3. Paradigmele evaluare la distanta si cod la cerere pentru cod mobil in sisteme
distribuite (exemple).
• Evaluare la distanta: Luiza doreste prajitura, stie reteta, dar nu are nici cuptor, nici
ingrediente. Cristina are la ea acasa atat cuptor cat si ingrediente, dar nu cunoaste
reteta. Din fericire Luiza stie ca prietena sa Cristina este bucuroasa sa incerce noi
retete. Astfel ii da telefon Cristinei si ii spune reteta. Cristina foloseste reteta sa
prepare prajitura si apoi o livreaza Luizei.
• Cod la cerere: Luiza doreste sa prepare prajitura, are la ea acasa atat ingrediente cat
si cuptor, dar nu stie reteta. Din fericire Luiza stie ca prietena sa Cristina stie reteta
prajiturii pe care a imprumutat-o deja la numerosi prieteni. Luiza ii telefoneaza
Cristinei pentru a-i imprumuta reteta. Cristina ii spune reteta Luizei, iar Luiza prepara
prajitura la ea acasa.
4. Modelul defectelor unui sistem distribuit (definitie, clasificarea defectelor)
Modelul defectelor da o specificatie a defectelor ce pot aparea in cadrul proceselor si
canalelor de comunicatie ale unui SD. Acest model ofera o baza pentru analiza
efectelor potentiale ale acestor defecte si pentru proiectarea unor SD capabile sa
tolereze aceste defecte, astfel incat sa isi poata continua functionarea corecta.
• Exista trei mari categorii de defecte: defecte prin omitere, defecte arbitrare si defecte
de timp.
• Defectele prin omitere se refera la cazurile in care un proces sau canal de
comunicatie nu reuseste sa efectueaze actiunile pe care trebuie sa le faca.
• Defectele arbitrare (bizantine) descriu situatiile cele mai rele din punctual de vedere
al erorilor, adica acele situatii in care poate sa apara orice tip de eroare. Denumirea
provine de la problema generalilor bizantini din ACM Transactions on Programming
Languages and Systems, Vol. 4, No. 3, 382-401 de catre Leslie Lamport, Robert
Shostak, si Marshall Pease.
• Defectele de timp se aplica SD sincrone si descriu situatiile in care nu se obtine un
raspuns in urma efectuarii unei anumite actiuni in limitele de timp prestabilite.
5. Servicii de directoare in JADE.
Directory Facilitator – DF.
– Componenta optionala a unei AP(Agent Platform) ce furnizeaza un serviciu de tip
pagini aurii – yellow pages pentru alti agenti. In SD acest serviciu se numeste si
serviciu de director – directory service.
– O AP poate contine un numar arbitra de DF-uri interconectate intr-o federatie.
– Un agent ce doreste sa-si publice serviciile pentru alti agenti va trebui sa gaseasca un
DF si sa-si inregistreze (register) descrierea la acesta. Ulterior el poate cere DF-ului
sa stearga (deregister) sau sa modifice (modify) aceasta inregistrare. Un agent poate
cere cautarea (search) unui serviciu in DF ce sa corespunda descrierii furnizate in
cererea de cautare.
6. Comunicatia de grup. Definitie si trei exemple de aplicabilitate.
Se numeste operatie de trimitere multipla (engl. multicast) o operatie de trimitere a
unui mesaj de la un proces catre fiecare membru al unei multimi de procese astfel
incat apartenenta la grup sa fie transparenta pentru procesul expeditor.
Aplicabilitate:
• Toleranta la defecte prin replicarea serviciilor.
– Un serviciu replicat se realizeaza printr-un grup de servere.
– Mesajele clientilor trebuie trimise la toti membrii grupului de servere replicate.
Clientii vor fi deserviti chiar si la caderea unora dintre aceste servere.
• Localizarea serverelor de descoperire in interconectarea spontana.
– Mesajele multiplu-trimise se pot utiliza de servere si/sau clienti pentru localizarea
serviciilor de descoperire in vederea inregistrarii si/sau regasirii altor servicii ale SD
impreuna cu interfetele acestora..
• Imbunatatirea performantelor prin replicarea datelor.
– Datele replicate conduc la cresterea performantelor serviciilor.
– In anumite cazuri replicarea poate avea loc pe calculatoarele clientilor. Ori de cate
ori datele sunt actualizate, schimbarile sunt trimise la toate serverele replicilor.
• Propagarea instiintarilor in SD bazate pe evenimente.
– Aparitia unui eveniment determina instiintarea corespunzatoare a tutoror membrilor
unui grup de procese ce si-au manifestat interesul in evenimentul respectiv.
7. Referintele obiectelor la distanta.
• Cand un client invoca o metoda a unui obiect aflat la distanta – OD (engl. remote
object) se va trimite un mesaj de invocare catre procesul server care gazduieste
obiectul. Acest mesaj trebuie sa specifice obiectul referit.
• Referinta unui obiect la distanta (engl. remote object reference)
– ROD = identificator al unui obiect care este valid intr-un SD.
• In cadrul oricarui mesaj de invocare a unui OD se transmite un ROD.
• ROD trebuie generate astfel incat sa se asigure unicitatea lor in timp si spatiu.
Deoarece pot exista mai multe procese ce gazduiesc OD, trebuie ca ROD sa fie unice
pe multimea tuturor acestor procese. Chiar si dupa ce un OD a fost sters, ROD
corespunzatoare nu se va refolosi pentru a se evita referirea unor obiecte eronate.
• O reprezentare a unui ROD poate contine: adresa de IP a calculatorului, numarul
portului, data crearii OD, un numar local al obiectului ce este incrementat automat de
procesul care a creat OD. La aceasta se poate adauga o descriere a interfetei OD.
• In cazul in care un OD exista numai in cadrul procesului care l-a creat si va dispare
odata cu distrugerea acestuia, o ROD va putea fi folosita pe post de adresa a
obiectului. In cazul in care obiectele pot fi relocate, o ROD nu se va putea utiliza pe
post de adresa a obiectului, pentru aceasta existand tehnici speciale.
8. Comportament ciclic al unui agent JADE.
• Un comportament ciclic nu se termina niciodata. Metoda sa action() executa aceleasi
operatii de fiecare data cand este apelata.
• Acest tip de comportament este implementat de clasa:
jade.core.behaviours.CyclicBehaviour
• Metoda done() a comportamentelor ciclice intoarce false.
• Definirea unui astfel de comportament se face convenabil prin extinderea clasei
CyclicBehaviour astfel:
public class MyCyclicBehaviour extends CyclicBehaviour {
public void action() {
// perform operation Y
}
}
• In acest exemplu operatia Y se va executa repetat, pana la terminarea agentului caruia
i s-a asignat comportamentul ciclic respectiv.
9. Modelul evenimentelor in sistemele distribuite obiectuale.
Actiuni. O actiune se initiaza cand un obiect invoca o metoda a altui obiect. Obiectul
receptor executa metoda corespunzatoare si eventual intoarce controlul obiectului
apelant. O invocare poate avea doua efecte:
– schimbarea starii obiectului receptor;
– crearea de noi obiecte;
– invocari ulterioare de metode ale altor obiecte.
10. Progres intr-un program concurent.
• Accesul la resursele SD se face in mod concurent. In concluzie orice obiect care
reprezinta o resursa a SD este responsabil sa asigure o functionare corecta intr-un mediu
concurent.
• Acest lucru se aplica atat serverelor cat si obiectelor din cadrul diverselor aplicatii.
• Asigurarea sigurantei unui obiect intr-un mediu concurent se face prin sincronizarea
operatiilor de acces la obiectul respectiv. Sincronizarea va asigura mentinerea consistentei
obiectului respectiv.
• Pentru aceasta se folosesc tehnici speciale de programare concurenta. Aceste tehnici
trebuie uneori sa fie adaptate pentru a functiona intr-un mediu distribuit (de exemplu
semafoare distribuite).
11. Costul de calcul al unui algoritm distribuit.
• O masura a eficientei si complexitatii o reprezinta timpul total de executie scurs din
momentul in care prima entitate incepe executia pana cand ultima entitate termina
executia.
• Deoarece in modelul general nu se poate face nici o presupunere privind intarzierea
maxima de expediere a unui mesaj, rezulta ca timpul total de executie este
inpredictibil putand suferi schimbari majore de la o executie la alta a
sistemului.
• Se poate insa estima timpul unei executii ideale T, considerandu-se restrictiile:
intarzieri de transmisie unitare si ceasuri sincronizate.
• O alta masura este complexitatea de timp cauzal Tcausal definite prin lungimea celui
mai lung sir de expedieri de mesaje corelate cauzal, din multimea tuturor executiilor
posibile.
12. Descrieti modul de functionare al unui miniserver.
• Presupune urmatorii pasi:
– Un program client emite o cerere HTTP catre un server WWW.
– Serverul interpreteaza cererea si executa o secventa de program careia ii transmite
parametrii cererii.
– Programul apelat interpreteaza parametrii cererii si executa o portiune de cod care
genereaza dinamic o pagina HTML.
• Prelucrarile executate de miniserver pot duce la:
– Generarea unei pagini WWW statice.
– Generarea unei pagini WWW actualizata dinamic.
– Configurarea unei pagini WWW pe baza parametrilor cererii HTTP.
Parametrii sunt preluati de la utilizator printr-un formular HTML.
• In general miniserverele sunt potrivite pentru aplicatiile orientate pe serviciu sau
pentru controlul aplicatiilor orientate pe prezentare.
13. Caracteristicile comunicatiei intre procese prin fluxuri TCP.
• Comunicatia este abstractizata prin crearea unui flux virtual si sigur de octeti intre
procesul expeditor si procesul destinatar.
• Dimensiunea mesajelor:
– Aplicatia este cea care alege dimensiunea datelor scrise sau citite din flux.
• Mesajele pierdute. TCP utilizeaza intern mesaje de confirmare. De exemplu, pentru
fiecare pachet IP trimis se asteapta o confirmare de primire. TCP foloseste o schema
bazata pe o fereastra alunecatoare pentru a limita numarul de confirmari necesare.
• Controlul fluxului. TCP incearca sa se adapteze la vitezele actuale de transmisie sau
receptie ale proceselor implicate. De exemplu, daca expeditorul este mai rapid decat
destinatarul, el va fi blocat pana cand destinatarul poate receptiona din nou.
• Ordonarea si duplicarea mesajelor. Se asociaza identificatori de mesaje pentru
fiecare pachet IP, fapt ce permite destinatarului sa detecteze si sa rejecteze duplicatele,
sau sa reordoneze pachetele ce nu au fost receptionate in ordinea in care au fost
trimise.
• Destinatia mesajelor. Comunicatia este bazata pe conceptul de conexiune. Perechea
de procese comunicante stabileste intai o conexiune inainte de a comunica pe flux.
Conexiunea furnizeaza fluxurile care vor fi citite respectiv scrise, nefiind nevoie de a
indica de fiecare data adresele de IP si numarul portului. Stabilirea conexiunii
presupune executarea unui apel connect de la expeditor, urmat de un apel accept la
destinatar.
14. Configuratii de servere WWW.
• Optiunile de configurare ale unui server Web se refera in general la:
– Modul in care se va executa serverul pe masina care il gazduieste:
• la cerere
• permanenta
– Daca serverul deserveste mai multe domenii folosind un singur calculator si o singura
adresa de IP. Aceste domenii se numesc gazde virtuale (engl.virtual host).
– Modul de lucru:
• server de origine
• proxy
1. Enumerati trei exemple de probleme de scalabilitate intr-un sistem distribuit.
Controlul cresterii costului resurselor fizice, controlul pierderilor de performanta,
prevenirea epuizarii resurselor software, evitarea congestiilor de performanta
2. Paradigmele cod la cerere si agent mobil pentru cod mobil in sisteme distribuite
(exemple).
Cod la cerere: Luiza doreste sa prepare prajitura, are la ea acasa atat ingrediente cat si
cuptor, dar nu stie reteta. Din fericire Luiza stie ca prietena sa Cristina stie reteta
prajiturii pe care a imprumutat-o deja la numerosi prieteni. Luiza ii telefoneaza
Cristinei pentru a-i imprumuta reteta. Cristina ii spune reteta Luizei, iar Luiza prepara
prajitura la ea acasa.
Agent mobil: Luiza doreste sa prepare prajitura, stie reteta, are ingredientele, dar nu
are cuptor. Din fericire Luiza stie ca prietena sa Cristina are la ea acasa un cuptor pe
care este bucuroasa sa-l imprumute. Astfel Luiza prepara coca prajiturii si apoi merge
la Cristina acasa pentru a coace prajitura.
3. Politici de executie a sarcinilor de catre un executor
???
4. Caracteristicile trimiterii multiple in retelele IP.
Trimiterea multipla IP (engl.IP multicast) functioneaza peste protocolul IP. Un pachet
IP este adresat unui calculator. Porturile apar in TCP si UDP, la nivelul transport.
Trimiterea multipla permite expeditorului sa trimita un singur pachet IP unei multimi
de calculatoare care formeaza un grup de trimitere multipla (engl.multicast group).
Identitatea destinatarilor individuali este transparenta expeditorului. Un grup de trimitere
multipla se identifica printr-o adresa IP de clasa D – adica o adresa cu primii 4 biti egali
cu 1110 in IPv4: 224.0.0.0 – 239.255.255.255.
Apartenenta la un grup permite unui calculator sa receptioneze toate pachetele IP
adresate grupului. Apartenenta este dinamica, ea permite intrarea si parasirea dinamica a
grupului,
cat si inscrierea simultana la mai multe grupuri. Trimiterea de pachete catre grup nu
necesita apartenenta la grup.
Trimiterea multipla IP este disponibila programelor de aplicatie numai la nivelul UDP.
Un proces poate transmite pachete UDP la o adresa de trimitere multipla si un numar de
port. El poate intra intr-un grup prin adaugarea soclului sau la grup.
La nivel IP, un calculator apartine unui grup cand unul sau mai multe dintre procesele
sale are soclul apartinand grupului. Cand un mesaj de trimitere multipla ajunge la un
calculator, el este inaintat tuturor soclurilor locale care sunt atasate adresei respective si au
portul specificat in pachet.
Pentru implementarea trimiterii multiple in retele IP se folosesc rutere speciale pentru
trimitere multipla (engl. multicast routers).
Adresele de trimitere multipla pot fi permanente sau temporare.
Grupurile permanente exista chiar si daca nu au membrii. Ele au destinatie
speciala, adresele lor fiind alocate de IANA – Internet Assigned Numbers Authority:
http://www.iana.org/
Ex. adresa 224.0.0.1 e folosita de NTP – Network Time Protocol.
Un grup temporar are nevoie de o adresa libera. Pentru a evita participarea accidentala
la un grup deja existent, se seteaza TTL la o valoare mica.
5. Gazde virtuale pentru un server WWW.
Un server Web poate deservi una sau mai multe domenii numite gazde virtuale.
Gazdele virtuale usureaza activitatea de administrare a serverului deoarece: exista o
singura instanta a serverului, exista o singura configuratie a serverului, se
monitorizeaza executia unui singur server.
Exista doua tipuri de gazde virtuale: gazde virtuale IP si gazde virtuale
non-IP.
• Gazde virtuale IP:
– Fiecare gazda virtuala este o gazda IP avand o adresa de IP distincta care apare ca
intrare in DNS.
– Se asigneaza toate adresele de IP ale gazdelor virtuale deservite masinii pe care
ruleaza serverul Web.
– Metoda este simpla dar are doua dezavantaje: i) este nevoie de o adresa de IP
distincta pentru fiecare gazda virtuala; ii) asignarea mai multor adrese de IP unei
singure masini poate crea probleme retelei.
• Gazde virtuale non-IP (sau bazata pe nume):
– Se bazeaza pe un suport special oferit de protocolul HTTP. Acest suport pentru
deservirea gazdelor virtuale non-IP este disponibil numai in HTTP/1.1.
– HTTP/1.1 a introdus in cadrul unei cereri HTTP antetul special HOST. Acest camp
antet este obligatoriu. El contine numele gazdei careia ii este adresata cererea.
– Configurarea gazdelor virtuale deservite se face analog cu cazul anterior. Singura
diferenta este ca intrarile DNS ale gazdelor virtual vor contine acum aceeasi adresa de
IP.
– Metoda are doua avantaje: i) este nevoie de o singura adresa de IP pentru deservirea
tuturor gazdelor virtuale; ii) crearea unei noi gazed virtuale non-IP se poate face mai
usor decat in cazul gazdelor virtual IP. Metoda are un dezavantaj: se poate aplica
numai pentru versiunile HTTP ulterioare HTTP/1.1 (nu mai este o problema la ora
actuala).
6. Primitivele de comunicare ale unui protocol cerere-raspuns.
HTTP este un protocol de aplicatie de tip cerere-raspuns (engl.requestreply).
Protocoalele de aplicatie faciliteaza comunicatia intre componentele unei aplicatii
distribuite. Exemple: SMTP, IMAP, POP3, etc.
Conform modelului cerere-raspuns, un proces client emite cereri catre un
proces server. Procesul server proceseaza cererea si intoarce un raspuns.
Se mai numeste model pull, prin contrast cu un model push in care clientul este
instiintat automat de schimbarile de stare ale serverului.
Cererile si raspunsurile HTTP se mai numesc si mesaje. Un mesaj este un sir de
caractere ce contine: linia de start (engl.start line), zero sau mai multe campuri antet
(engl.message header field) si optional un camp corp (engl.message body field).
Cererile contin informatii de identificare a tipului entitatilor. Se foloseste formatul
MIME (Multipurose Internet Mail Extensions). Untip MIME specifica un tip si un
subtip, de exemplu: text/plain, text/html, image/jpeg, etc.
7. Modulul de gestiune a referintelor la distanta in implementarea RMI.
Modulul de gestiune a ROD:
– Este responsabil cu traducerea intre referintele locale si ROD si pentru crearea ROD.
Pentru aceasta el gestioneaza o tabela de obiecte la distanta (engl.remote object table)
– TOD. Aceasta tabela memoreaza corespondenta intre referintele locale in cadrul
procesului si ROD.
Tabela include: i) cate o intrare pentru fiecare OD continut de procesul
server; ii) cate o intrare pentru fiecare obiect proxy local.
– Modulul este apelat de software-ul de RMI, cand se impacheteaza sau
despacheteaza ROD.
– Actiunile acestui modul sunt:
• i) cand un OD este transmis ca argument sau intors ca rezultat pentru prima oara,
acest modul este interogat pentru a crea o ROD pentru acest obiect, acest ROD
fiind adaugat la tabela;
• ii) cand se primeste un mesaj de cerere sau raspuns cu un ROD, modulul este
interogat pentru a determina referinta locala corespunzatoare. Ea poate fi un
obiect proxy sau o referinta la OD propriuzis. Daca ROD nu este in taabela,
atunci se creaza un nou obiect proxy si se adauga la tabela.
8. Comportament ONE-SHOT al unui agent JADE.
Un comportament ONE-SHOT se executa intr-un singur pas. Acest lucru inseamna ca
metoda sa action() se executa o singura data.
• Acest tip de comportament este implementat de clasa:
jade.core.behaviours.OneShotBehaviour
• Metoda done() a comportamentelor ONE-SHOT intoarce true.
• Definirea unui astfel de comportament se face convenabil prin extinderea
clasei OneShotBehaviour astfel:
public class MyOneShotBehaviour extends OneShotBehaviour {
public void action() {
// perform operation X
}}
• In acest exemplu operatia X se va executa o singura data.
9. Evenimente in sistemele distribuite obiectuale.
Actiuni. O actiune se initiaza cand un obiect invoca o metoda a altui obiect. Obiectul
receptor executa metoda corespunzatoare si eventual intoarce controlul obiectului
apelant. O invocare poate avea doua efecte:
– schimbarea starii obiectului receptor;
– crearea de noi obiecte;
– invocari ulterioare de metode ale altor obiecte.
10. Servicii de directoare in JADE.
Directory Facilitator – DF.
– Componenta optionala a unei AP(Agent Platform) ce furnizeaza un serviciu de tip
pagini aurii –
yellow pages pentru alti agenti. In SD acest serviciu se numeste si serviciu de
director – directory service.
– O AP poate contine un numar arbitra de DF-uri interconectate intr-o federatie.
– Un agent ce doreste sa-si publice serviciile pentru alti agenti va trebui sa gaseasca un
DF si sa-si inregistreze (register) descrierea la acesta. Ulterior el poate cere DF-ului
sa stearga (deregister) sau sa modifice (modify) aceasta inregistrare. Un agent poate
cere cautarea (search) unui serviciu in DF ce sa corespunda descrierii furnizate in
cererea de cautare.
11. Modelul defectelor unui sistem distribuit (definitie, clasificarea defectelor)
Modelul defectelor da o specificatie a defectelor ce pot aparea in cadrul proceselor si
canalelor de comunicatie ale unui SD. Acest model ofera o baza pentru analiza
efectelor potentiale ale acestor defecte si pentru proiectarea unor SD capabile sa
tolereze aceste defecte, astfel incat sa isi poata continua functionarea corecta.
• Exista trei mari categorii de defecte: defecte prin omitere, defecte arbitrare si defecte
de timp.
• Defectele prin omitere se refera la cazurile in care un proces sau canal de
comunicatie nu reuseste sa efectueaze actiunile pe care trebuie sa le faca.
• Defectele arbitrare (bizantine) descriu situatiile cele mai rele din punctual de vedere
al erorilor, adica acele situatii in care poate sa apara orice tip de eroare. Denumirea
provine de la problema generalilor bizantini din ACM Transactions on Programming
Languages and Systems, Vol. 4, No. 3, 382-401 de catre Leslie Lamport, Robert
Shostak, si Marshall Pease.
• Defectele de timp se aplica SD sincrone si descriu situatiile in care nu se obtine un
raspuns in urma efectuarii unei anumite actiuni in limitele de timp prestabilite.
12. Costul de comunicatie al unui algoritm distribuit.
Eficienta unui protocol descris prin modelul abstract introdus se va face folosind doua
masuri: i) volumul de activitati de comunicare (cat de mult trafic va genera
protocolul?); ii) timpul de calcul (cat de ocupat va fi sistemul?).
• Activitatea de comunicare de baza este expedierea unui mesaj printr-un port de iesire
catre un vecin; se va lua in calcul si cazul in care un mesaj expediat nu a fost
receptionat.
• Volumul de activitati de comunicare se va estima prin numarul de mesaje expediate
M = costul mesajelor.
• Incarcarea unei entitati (engl.entity workload) Lnode = M/|V| reprezinta numarul
mediu de mesaje expediate pe entitate.
• Incarcarea transmisiei (engl.transmission load) Llink = M/|E| reprezinta numarul
mediu de mesaje expediate pe legatura.
• Daca se considera costul mesajelor estimat prin numarul de biti transmisi B rezulta
incarcarile la nivel de bit pe entitate si pe legatura: Lbnode = B/|V| si Lblink = B/|E|.
13. Caracteristicile comunicatiei intre procese prin mesaje UDP
Dimensiunea mesajelor. Protocolul IP permite transmiterea de pachete de pana la 216
octeti (incluzand si antetele !). Dimensiunea uzuala a mesajelor este de 8 Kocteti. De
obicei ea se determina in functie de aplicatie.
• Blocarea. Comunicatia prin datagrame UDP foloseste operatii send fara blocare si
operatii receive cu blocare. Daca nu exista procese la destinatie cu un soclu conectat
corespunzator, mesajele se pierd. Daca procesul destinatar are de efectuat alte sarcini,
el poate folosi un fir separat pentru realizarea acestor sarcini.
• Timeout. Uneori nu este posibil ca destinatarul sa astepte nelimitat primirea unui
mesaj. In acest caz se poate seta un timeout pentru un soclu specificat.
• Receptie de la oricine. Metoda receive nu specifica o adresa pentru originea
mesajelor – cu alte cuvinte receptia poate veni de la oricine cunoaste adresa si portul
destinatarului. Este insa posibil sa se conecteze un soclu pentru datagrame cu un port
si o adresa de IP la distanta astfel incat comunicatia sa se faca doar cu adresa
respectiva.
14. Performanta serverelor WWW.
Performanta unui server Web se estimeaza prin:
– Numar de cereri / secunda (in functie de tipul de cerere)
– Latenta = timp de raspuns in milisecunde pentru fiecare conexiune sau cerere noua
– Rata de transfer (engl. throughput) in numar de octeti / secunda in functie de
dimensiunea paginilor, caching-ul continutului, latimea de banda a retelei (engl.
network bandwidth).

Вам также может понравиться