Aplicaciones Cliente - Servidor Servidor Cliente SQL Presentación + Lógica aplicación Almacenamiento datos Acceso remoto a información a través de red. Un servidor - múltiples clientes. Servidores esperan peticiones: protocolos de nivel de aplicación petición-respuesta. Servidores tiene colas de peticiones que atender. Dimensionamiento es importante adecuadamente (cuellos de botella: acceso a disco, conexión Inet). Departament d’Arquitectura de Computadors - UPC v.2003.02 1 Reparto Funcionalidad Repartir procesamiento vs. transferir datos. Ejecución en servidor = Control de aplicación, pero más potencia requerida. Thin Client – Fat Server: Aplicación ejecutada en servidor, cliente solo visualiza pantallas. Ej: Mainframes, XWindows, Application Server Providers. Fat Client – Thin Server: Servidor solo proporciona informacion a cliente, cliente procesa y visualiza. Ej:Servidor web, Servidor de ficheros, servidor de software, servidor streaming. v.2003.02 Departament d’Arquitectura de Computadors - UPC 2 Arquitecturas Una organización de aplicaciones en distintos módulos y cómo se comunican entre sí. Servidor Cliente Cliente p Servidor Cliente Servidor Servidor p1 Cliente Cliente Encadenado, recursivo Servidor p1 p1 Servidor Cliente p2 p2 Cliente Servidor Servidor Servidor Servidor Cliente Servidor Referencia, iterativo Servidor Cliente Servidor Multicast, difusión Departament d’Arquitectura de Computadors - UPC v.2003.02 3 Variantes Descentralizado ~ Peer to Peer P2P Dispositivos m viles Cli/Ser Cli/Ser Cli/Ser Cli/Ser Cli/Ser Agentes m viles Clientes Thin v.2003.02 Cliente Servidor + Cliente Departament d’Arquitectura de Computadors - UPC 4 Servidores Multiple Procesos " " ! # $ % & ' ( ' ) v.2003.02 $ % % * + ' * + !& Servidores MultiThread " " ! v.2003.02 + ( ' # $ , %% &) $ % ( % /& 0 1& 2# &'' . % ' Arquitectura Multinivel Web Presentación: presentación, control flujo. Lógica Negocio: procedimientos aplicación. Almacén Datos: datos aplicación. v.2003.02 Departament d’Arquitectura de Computadors - UPC 7 Separación presentación / lógica aplicación JSP <%@ page import = "num.NumberGuessBean" %> <jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/> <jsp:setProperty name="numguess" property="*"/> <html> <head><title>Number Guess</title></head> <body bgcolor="white"> <font size=4> <% if (numguess.getSuccess()) { %> Congratulations! You got it. And after just <%= numguess.getNumGuesses() %> tries.<p> <% numguess.reset(); %> Care to <a href="numguess.jsp">try again</a>? <% } else { %> Good guess, but nope. Try <b> <%= numguess.getHint() %> </b>. You have made <%= numguess.getNumGuesses() %> guesses.<p> I'm thinking of a number between 1 and 100.<p> <form method=get> What's your guess? <input type=text name=guess> <input type=submit value="Submit"> </form> <% } %> </font> </body> </html> v.2003.02 Departament d’Arquitectura de Computadors - UPC 8 3 Arquitectura Multinivel J2EE Client Tier: HTML, Applets. Web Tier: JSP & Servlets. Business Logic: Java Beans. Enterprise: BBDD. v.2003.02 Departament d’Arquitectura de Computadors - UPC 9 Almacenes Información Sitio Web, Bases de datos relacional, Repositorios XML, Directorio LDAP, Buscadores Web, Almacén Objectos. v.2003.02 Departament d’Arquitectura de Computadors - UPC 10 4 Almacén Sitio Web Colección de documentos multimedia guardados en ficheros. Información sin estructurar relaccionados por enlaces. Ventajas: Facilidad de creación. Desventajas: falta control. v.2003.02 v.2003.02 Departament d’Arquitectura de Computadors - UPC 11 Departament d’Arquitectura de Computadors - UPC 12 5 Base de datos relacional Datos muy estructurados requiere integridad y seguridad.(sin informacion presentación) Relacción basados en Algebras: modelos EntidadRelacción. Ratio escritura / lectura alto. Requieren un complejo programa (un gestor de bases de datos): mantiene consistencia, acceso concurrente, ... Ventajas: Control total de información. Desventajas: laborioso estudio previo y diseño. Departament d’Arquitectura de Computadors - UPC v.2003.02 13 Almacen XML '7$ 8 % 83' 7 97 % 8 '/% <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="role1"/> <role rolename="tomcat"/> <user username="role1" password="tomcat" roles="role1"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="both" password="tomcat“ roles="tomcat,role1"/> </tomcat-users> v.2003.02 Departament d’Arquitectura de Computadors - UPC 14 6 Repositorio XML Datos estructurados sin información presentación. Relacción basada estructuras definidas por usuario. Ratio escritura / lectura bajo. Gestor de repositorio a medida: mantiene consistencia, precarga pagina web, ... Ventajas: sin BBDD, eficiente, control. Desventajas: programación gestor. v.2003.02 Departament d’Arquitectura de Computadors - UPC 15 Directorios LDAP Datos muy estructurados información usuarios. Relacción según arbol de directorio OIT. Ratio escritura / lectura bajo. Gestores de directorio mantiene consistencia, acceso concurrente, ... Ventajas: estructura sencilla, gestores comerciales. Desventajas:Solo para algunos datos. v.2003.02 Departament d’Arquitectura de Computadors - UPC 16 : Almacen Buscadores Web Datos muy estructurados: palabras, imágenes, URLs.... Relacción orden alfabético,..: gigantesca tabla hash: palabra - URLs. Ratio escritura / lectura bajo. Gestor de buscador: encuentra nuevas páginas web, mantiene consistencia, cache, ... Ventajas: eficiente, gestor optimizado. Desventajas:Uso especifico. v.2003.02 Departament d’Arquitectura de Computadors - UPC 17 Almacenes de Objetos Todo es un objeto: datos, tablas, documentos. Relacciones entre datos son objetos contenidos en / apuntados por otros objetos. Gestores de almacen con diferentes funcionalidades: OODDBB (complejo gestor, integridad, etc), Objetos serializados Java (gestor simple, ficheros). Ventajas: Facilmente integrables en aplicaciones programadas en lenguaje OO. Desventajas: ineficiencia, no reinventar. v.2003.02 Departament d’Arquitectura de Computadors - UPC 18 ; CGI / FastCGI Servidor Web Proceso principal 1 proceso/petición Petición1 a CGI A Proc Proc hijo hijode deCGI CGIAA Petición1 a CGI B Proc Proc hijo hijode deCGI CGIBB Petición2 a CGI A Proc Proc hijo hijode deCGI CGIAA Servidor Web Proceso principal (Único) (Único)Proc Proc hijo hijode deCGI CGIAA Petición1 a CGI A Petición1 a CGI B FastCGI: 1 proceso/CGI Petición2 a CGI A (Único) (Único)Proc Proc hijo hijode deCGI CGIBB Departament d’Arquitectura de Computadors - UPC v.2003.02 19 CGI:Ciclo de Vida = & = % & = $ = = v.2003.02 % 7 !& & % ' Departament d’Arquitectura de Computadors - UPC 20 < API Servidor Web Proceso principal Petición1 extensión A Extensión ExtensiónAA Extensiones: parte del proc servidor Petición1 extensión B Extensión ExtensiónBB Petición2 extensión A Departament d’Arquitectura de Computadors - UPC v.2003.02 21 API: Ciclo de Vida ' % ( . ' ! ' * . 8 3' 4' v.2003.02 > $ ! ! 9 ! ' ' ' Departament d’Arquitectura de Computadors - UPC 22 Servlet Servidor Web Proceso principal Petición a Servlet A JVM Thread ServletA ServletA Petición a Servlet B Thread Servlet: 1 thread/petición Petición a Servlet A Thread ServletB ServletB v.2003.02 Departament d’Arquitectura de Computadors - UPC 23 Servlet “Hello World” import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld 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("<body>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); } } v.2003.02 Departament d’Arquitectura de Computadors - UPC 24 Servlet:Ciclo de Vida ' % '! 2# & + $ 3' & $ ' ' > ! ' 4' ! v.2003.02 ' Departament d’Arquitectura de Computadors - UPC 25 Separación presentación / lógica aplicación JSP <%@ page import = "num.NumberGuessBean" %> <jsp:useBean id="numguess" class="num.NumberGuessBean" scope="session"/> <jsp:setProperty name="numguess" property="*"/> <html> <head><title>Number Guess</title></head> <body bgcolor="white"> <font size=4> <% if (numguess.getSuccess()) { %> Congratulations! You got it. And after just <%= numguess.getNumGuesses() %> tries.<p> <% numguess.reset(); %> Care to <a href="numguess.jsp">try again</a>? <% } else { %> Good guess, but nope. Try <b> <%= numguess.getHint() %> </b>. You have made <%= numguess.getNumGuesses() %> guesses.<p> I'm thinking of a number between 1 and 100.<p> <form method=get> What's your guess? <input type=text name=guess> <input type=submit value="Submit"> </form> <% } %> </font> </body> </html> v.2003.02 Departament d’Arquitectura de Computadors - UPC 26 JSP:Ciclo de Vida % 2# & - & $ ' $ ' 3' v.2003.02 ' > ! ! %' %' Departament d’Arquitectura de Computadors - UPC 27 3