viernes, 27 de enero de 2012

¿Cuál es la diferencia entre una API, el Freamework y el Middleware?

API: interfaz de programador de aplicaciones. Término que se refiere a los métodos de un programación que se van a utilizar para la interfaz con el software. 


Framework: herramienta o un conjunto de herramientas.


Middleware: software que permite variedad de sistemas aislados o funcionalidades para interactuar.

API

Interfaz de programación de aplicaciones, es el conjunto de funciones y procedimientos que ofrece cierta biblioteca para ser utilizado por otro software como una capa de abstracción. Son usadas generalmente en las bibliotecas (también denominadas comúnmente "librerías").
Una interfaz de programación representa la capacidad de comunicación entre componentes de software. Se trata del conjunto de llamadas a ciertas bibliotecas que ofrecen acceso a ciertos servicios desde los procesos y representa un método para conseguir abstracción en la programación, generalmente (aunque no necesariamente) entre los niveles o capas inferiores y los superiores del software

Browser

Los programas que permiten ver las páginas de la Malla Mundial o WWW se llaman en inglés browsers. En castellano se usan distintos nombres: por una parte, nunca falta quien utiliza directamente browser (pronunciado más o menos "brauser"). En ocasiones se usa "hojeador", traducción directa del inglés; también se lee "visualizador" o mejor "visor" o "lector".
Pero los que están extendiéndose más son "navegador" y "explorador", porque los usan los programas dominantes en el mercado, pero que tienen el problema de estar ligados a sus nombres comerciales (Navigator y Explorer). 
Browser es una aplicación que opera a través de Internet, interpretando la información de archivos y sitios web para que podamos ser capaces de leerla, (ya se encuentre ésta alojada en un servidor dentro de la World Wide Web o en un servidor local).
El navegador interpreta el código en el que está escrita la página web y lo presenta en pantalla permitiendo al usuario interactuar con su contenido y navegar hacia otros lugares de la red mediante enlaces o hipervínculos.

martes, 3 de enero de 2012

MODELOS ARQUITECTÓNICOS DE SISTEMAS DISTRIBUIDOS

-Los sistemas distribuidos(SD) son los sistemas software más complejos. Con los modelos arquitectónicos tratamos de simplificar estos sistemas viendo la colocación de las partes y las relaciones entre ellas. Incluye también el control global de estructura, los protocolos para comunicación, sincronización, y acceso a datos, la asignación de funcionalidad, distribución física, escalamiento y desempeño, dimensiones de evolución y selección de alternativas de diseño.
Los diferentes modelos arquitectónicos son:

  • Capas de software.
  • Arquitectura de Sistemas.
  • Interface y Objetos.

Capa de software:
La idea básica es desmembrar la complejidad de sistema mediante el diseño en capas y servicios. El término arquitectura de software se refería inicialmente a la estructuración del software como capas en un único computador. Más recientemente las capas son uno o varios procesos, localizados en el mismo o diferente computador, que ofrecen y solicitan servicios.


  • Capas: grupo de funcionalidades fuertemente y altamente coherentes.
  • Servicios: funcionalidades proporcionales a capas superiores.
La estructura típica en capas de un SD es la siguiente:

  • Plataforma: Hadware y sistema operativo. Estas capas más bajas proporcionan servicios a las superiores y su implementación depende de cada computador.
  • Middleware: Es una capa software que logra transparencia en la heterogeneidad en el nivel de plataforma.Logra comunicación y compartición de recursos. El middleware se ocupa de proporcionar bloques útiles para la construcción de componentes de software que puedan trabajar con otros en un sistema distribuido. En particular mejorar el nivel de las actividades de comunicación en los procesos de aplicación, soportando abstracciones como: llamadas a procedimientos remotos, comunicación entre grupos de procesos, etc.
  • Ejemplos: Sun RPC(llamadas a procedimientos remotos), CORBA(middleware orientado a objeto), JAVA RMI(Invocación de objetos remotos en JAVA), DCOM(Modelo común de objetos distribuidos de Microsoft).
  • El middlewasre también puede proporcionar otros servicios, aparte de la comunicación, para su uso en programas de aplicación. Por ejemplo: gestión de nombres, seguridad, almacenamiento persistente, etc.

Modelo Básico: Cliente Servidor.

  • Cliente: el proceso requiere acceder datos, utilizar recursos o ejecutar operaciones en una computadora diferente.
  • Servidor: proceso maneja datos y otros recursos compartidos, permite al cliente acceder a recursos y ejecutar cómputos.
  • Iteracción: invocación/ par de mensajes resultantes
  • Ejemplo: servidor http: cliente (navegador) página solicitada, servidor entrega página.
  • Servidor de caching(servidores proxy): Caching de páginas Web frecuentemente utilizadas.
  • Procesos pares (no cliente-servidor: peer-to-peer): procesos que tienen una gran parte de similitudes de funcionalidad.
Variante: Servicios proporcionados por múltiples servidores.


  • Ejemplos: muchos servidores de comercio Web están implementados en diferentes servidores.
  • Motivación: desempeño y confiabilidad.
  • Los servidores mantienen bases de datos replicadas o distribuidas.
Variantes: Servidores proxy y caché
Suministra replicación/ distribución transparente.


  • Un caché es un almacén de objetos da datos utilizados recientementes. Los cachés spueden estar ubicados en los cliente o en servidores Proxy que se puede compartir desde varios clientes.
  • El propósitos de los servidores proxy es incrementar la disponibilidad y las prestaciones del servicio, reduciendo la carga en las redes de área amplia y servidores WEB.
  • Caching: los servidores proxy mantienen caches, como almacenes de recursos solicitados recientemente. Son utilizados frecuentemente en motores de búsqueda.
Variantes: Procesos Peer-to-Peer


  • Todos los procesos desempeñan tareas semejantes, interactuando cooperativamente como iguales para realizar una actividad distribuida o cómputo sin distinción entre cliente y servidores.
  • Los procesos pares mantienen la consistencia de los recursos y sincronizan las acciones a nivel de aplicación.
Interface y Objetos
  • Una interface de un proceso es la especificación del conjunto de funciones que se pueden invocar sobre él.
  • En lenguajes orientados a objetos, los procesos distribuidos pueden ser construidos de una forma más orientada al objetos. Las referencias a estos objetos se pasan a otros procesos para que se pueda acceder a sus métodos de forma remota. Esta es la aproximación adoptada por CORBA y JAVA RMI.
Variaciones del modelo cliente-servidor: Código móvil.
  • Códigos enviado a un proceso cliente para realizar una tarea específica
  • Ejemplos: Applets,mensajes Activos.
Variaciones del modelo cliente-servidor: Agentes móviles
  • Programa que se traslada a la red, de un computador a otro, realizando una tarea para alguien.
  • Programa ejecutado(códigos+datos), migración entre procesos, realizando una tarea autónoma, frecuentemente en representación de otros procesos.
  • Ventajas: flexibilidad, ahorro en costo de comunicación.
Variaciones del modelo cliente-servidor: Clientes Delgados
  • En el cliente sólo se ejecuta una interfaz basada en ventajas, mientras que la aplicación sise ejecuta en un servidor remoto, usualmente muy potente.





CARACTERÍSTICAS CLAVE EN SISTEMAS DISTRIBUIDOS

Compartición de Recursos:
El término 'recurso' es bastante abstracto, pero es el que mejor caracteriza el abanico de entidades que pueden compartirse en un sistema distribuido. El abanico se extiende desde componentes hardware como discos e impresoras, hasta elementos software como ficheros, ventanas, bases de datos y otros objetos de datos.


Los recursos en un sistema distribuido están físicamente encapsulados en una de las computadoras y sólo pueden ser accedidos por otras computadoras mediante las comunicaciones (la red). Para que la compartición de recursos sea efectiva, ésta debe ser manejada por un programa que ofrezca un interfaz de comunicación permitiendo que el recurso sea accedido, manipulado y actualizado de una manera fiable y consistente. Surge el término genérico de gestor de recursos.


Un gestor de recursos es un modulo software que maneja un conjunto de recursos de un tipo en particular. Cada tipo de recurso requiere algunas políticas y métodos específicos junto con requisitos comunes para todos ellos. Éstos incluyen la provisión de un esquema de nombres para cada clase de recurso, permitir que los recursos individuales sean accedidos desde cualquier localización; la traslación de nombre de recurso a direcciones de comunicación y la coordinación de los accesos concurrentes que cambian el estado de los recursos compartidos para mantener la consistencia.


Un sistema distribuido puede verse de manera abstracta como un conjunto de gestores de recursos y un conjunto de programas que usan los recursos. Los usuarios de los recursos se comunican con los gestores de los recursos para acceder a los recursos compartidos del sistema. Esta perspectiva nos lleva a dos modelos de sistemas distribuidos: el modelo cliente-servidor y el modelo basado en objetos.


Apertura (opennesss):
Un sistema informático es abierto si el sistema puede ser extendido de diversas maneras. Un sistema puede ser abierto o cerrado con respecto a extensiones hardware (añadir periféricos, memoria o interfaces de comunicación, etc... ) o con respecto a las extensiones software ( añadir características al sistema operativo, protocolos de comunicación y servicios de compartición de recursos, etc... ). La apertura de los sistemas distribuidos se determina primariamente por el grado hacia el que nuevos servicios de compartición de recursos se pueden añadir sin perjudicar ni duplicar a los ya existentes.


Básicamente los sistemas distribuidos cumplen una serie de características:

  • Los interfaces software clave del sistema están claramente especificados y se ponen a disposición de los desarrolladores. En una palabra, los interfaces se hacen públicos.
  • Los sistema distribuidos abiertos se basan en la provisión de un mecanismo uniforme de comunicación entre procesos e interfaces publicados para acceder a recursos compartidos.
  • Los sistema distribuidos abiertos pueden construirse a partir de hardware y software heterogéneo, posiblemente proveniente de vendedores diferentes. Pero la conformidad de cada componente con el estándar publicado debe ser cuidadosamente comprobada y certificada si se quiere evitar tener problemas de integración.

Concurrencia:
Cuando existen varios procesos en una única maquina decimos que se están ejecutando concurrentemente. Si el ordenador esta equipado con un único procesador central, la concurrencia tiene lugar entrelazando la ejecución de los distintos procesos. Si la computadora tiene N procesadores, entonces se pueden estar ejecutando estrictamente a la vez hasta N procesos.


En los sistemas distribuidos hay muchas maquinas, cada una con uno o mas procesadores centrales. Es decir, si hay M ordenadores en un sistema distribuido con un procesador central cada una entonces hasta M procesos estar ejecutándose en paralelo.


En un sistema distribuido que esta basado en el modelo de compartición de recursos, la posibilidad de ejecución paralela ocurre por dos razones:

  • Muchos usuarios interactuan simultáneamente con programas de aplicación.
  • Muchos procesos servidores se ejecutan concurrentemente, cada uno respondiendo a diferentes peticiones de los procesos clientes.

El caso (1) es menos conflictivo, ya que normalmente las aplicaciones de interacción se ejecutan aisladamente en la estación de trabajo del usuario y no entran en conflicto con las aplicaciones ejecutadas en las estaciones de trabajo de otros usuarios.


El caso (2) surge debido a la existencia de uno o mas procesos servidores para cada tipo de recurso. Estos procesos se ejecutan en distintas maquinas, de manera que se están ejecutando en paralelo diversos servidores, junto con diversos programas de aplicación. Las peticiones para acceder a los recursos de un servidor dado pueden ser encoladas en el servidor y ser procesadas secuencialmente o bien pueden ser procesadas varias concurrentemente por múltiples instancias del proceso gestor de recursos. Cuando esto ocurre los procesos servidores deben sincronizar sus acciones para asegurarse de que no existen conflictos. La sincronización debe ser cuidadosamente planeada para asegurar que no se pierden los beneficios de la concurrencia.


Escalabilidad:
Los sistemas distribuidos operan de manera efectiva y eficiente a muchas escalas diferentes. La escala más pequeña consiste en dos estaciones de trabajo y un servidor de ficheros, mientras que un sistema distribuido construido alrededor de una red de área local simple podría contener varios cientos de estaciones de trabajo, varios servidores de ficheros, servidores de impresión y otros servidores de propósito especifico. A menudo se conectan varias redes de área local para formar internetworks, y éstas podrían contener muchos miles de ordenadores que forman un único sistema distribuido, permitiendo que los recursos sean compartidos entre todos ellos.


Tanto el software de sistema como el de aplicación no deberían cambiar cuando la escala del sistema se incrementa. La necesidad de escalabilidad no es solo un problema de prestaciones de red o de hardware, sino que esta íntimamente ligada con todos los aspectos del diseño de los sistemas distribuidos. El diseño del sistema debe reconocer explícitamente la necesidad de escalabilidad o de lo contrario aparecerán serias limitaciones.


Cuando el tamaño y complejidad de las redes de ordenadores crece, es un objetivo primordial diseñar software de sistema distribuido que seguirá siendo eficiente y útil con esas nuevas configuraciones de la red.


Tolerancia a Fallos:
Los sistemas informáticos a veces fallan. Cuando se producen fallos en el software o en el hardware, los programas podrían producir resultados incorrectos o podrían pararse antes de terminar la computación que estaban realizando. El diseño de sistemas tolerantes a fallos se basa en dos cuestiones, complementarias entre sí: 

  • Redundancia hardware (uso de componentes redundantes).
  • recuperación del software (diseño de programas que sean capaces de recuperarse de los fallos).

En los sistemas distribuidos la redundancia puede plantearse en un grano mas fino que el hardware, pueden replicarse los servidores individuales que son esenciales para la operación continuada de aplicaciones criticas.


La recuperación del software tiene relación con el diseño de software que sea capaz de recuperar (roll-back) el estado de los datos permanentes antes de que se produjera el fallo.


Los sistemas distribuidos también proveen un alto grado de disponibilidad en la vertiente de fallos hardware. Cuando uno de los componentes de un sistema distribuidos falla, solo se ve afectado el trabajo que estaba realizando el componente averiado. Un usuario podría desplazarse a otra estación de trabajo; un proceso servidor podría ejecutarse en otra maquina.


Transparencia:
La transparencia se define como la ocultación al usuario y al programador de aplicaciones de la separación de los componentes de un sistema distribuido, de manera que el sistema se percibe como un todo, en vez de una colección de componentes independientes. La transparencia ejerce una gran influencia en el diseño del software de sistema.


El manual de referencia RM-ODP [ISO 1996a] identifica ocho formas de transparencia. Estas proveen un resumen útil de la motivación y metas de los sistemas distribuidos. Las transparencias definidas son:

  • Transparencia de Acceso : Permite el acceso a los objetos de información remotos de la misma forma que a los objetos de información locales.
  • Transparencia de Localización: Permite el acceso a los objetos de información sin conocimiento de su localización
  • Transparencia de Concurrencia: Permite que varios procesos operen concurrentemente utilizando objetos de información compartidos y de forma que no exista interferencia entre ellos.
  • Transparencia de Replicación: Permite utilizar múltiples instancias de los objetos de información para incrementar la fiabilidad y las prestaciones sin que los usuarios o los programas de aplicación tengan por que conoces la existencia de las replicas.
  • Transparencia de Fallos: Permite a los usuarios y programas de aplicación completar sus tareas a pesar de la ocurrencia de fallos en el hardware o en el software.
  • Transparencia de Migración: Permite el movimiento de objetos de información dentro de un sistema sin afectar a los usuarios o a los programas de aplicación.
  • Transparencia de Prestaciones. Permite que el sistema sea reconfigurado para mejorar las prestaciones mientras la carga varia.
  • Transparencia de Escalado: Permite la expansión del sistema y de las aplicaciones sin cambiar la estructura del sistema o los algoritmos de la aplicación.

Las dos mas importantes son las transparencias de acceso y de localización; su presencia o ausencia afecta fuertemente a la utilización de los recursos distribuidos.

ÁREAS DE ACTUACIÓN DE SISTEMAS DISTRIBUIDOS.

Aplicaciones Comerciales:Las reservas de líneas aéreas, aplicaciones bancarias, incluyendo cajeros automáticos, así como cajas y gestión de grandes almacenes son aplicaciones típicas históricamente construidas con hadware dedicado y alrededor de sistemas centralizados. Parece que por si inherente distribución y alrededor de sistemas centralizados. Parece que por su inherente distribución geográfica y necesidad de acceso a sistemas distintos del propio centralizado, estas aplicaciones se prestan a implementarse dentro de sistemas distribuidos. Si nos damos cuenta, estas aplicaciones requieren ciertas características de seguridad y protección. También se requiere fiabilidad. Estas y otras características van a tener que tenerse en cuenta en los sistemas distribuidos.

  • Reservas de Líneas Aéreas.
  • Aplicaciones Bancarias.
  • Cajeros de grandes Almacenes.
  • Cajeros y Almacén de Cadenas de Supermercados.
Aplicaciones para Redes de Área Extensa: Dado el espectacular crecimiento de las redes de área extensa (WAN), en concreto Internet, dedicada al intercambio de información a través de la red. Así, nos encontramos con que empezó a aparecer el correo electrónico y después un servicio de transferencia de ficheros (FTP) con su correspondiente utilidad de búsqueda (Archie). Una variante del correo electrónico es el servicio de noticias News, en el que grupos de usuarios con aficiones compartidas utlizan la red como un tablón de anuncios. Un precursor del actual World Wide Web, fue Gopher que ofrecía el mismo servicio que WWW, pero en modo textual, sin gráficos ni multimedia.
  • Correo Electrónico.
  • Servicio de noticias (News).
  • Servicio de Tranferencia de Ficheros (FTP).
  • Búsqueda de Ficheros(Archie).
  • Servicio de Consulta Textual (Gopher).
  • World Wide Web (WWW).
Aplicaciones Multimedia: Las aplicaciones multimedia y videoconferencia son las últimas en incorporarse a los sistemas distribuidos, pues por ser isócronas imponen ciertas necesidades del hadware, especialmente en lo referente a la velocidad y regularidad de transmisión de una gran cantidad de datos. Estas aplicaciones incluyen también los conocidos juegos multiusuario, los cuales son muy exigentes en sus requisitos para una adecuada ejecución. Por último haremos alusión a la televigilancia, que permite una atenuación centralizada de diversos lugares no solamente de un mismo edificio, sino de múltiplies edificios repartidos por toda una cuidad o país.
  • Viedoconferencia.
  • Televigilancia.
  • Juegos multiusuario.
  • Enseñanza asistida por ordenador.
Área de los Sistemas Distribuidos: Teniendo en cuenta toda esta variedad de aplicaciones e los sitemas distribuidos, s diseño va a involucrar a muy diversas áreas de la información entre ellas: 
  • Comunicaciones (HW, SW).
  • Sistemas Operativos Distribuidos.
  • Bases de Datos Distribuidas.
  • Servidores Distribuidos de Ficheros.
  • Lenguajes de Programación Distribuida.
  • Sistemas Tolerantes a Fallos.

Ejemplos:
B2B: Business-to-Business es la transmisión de información referente a transacciones comerciales electrónicamente.
B2C: Business-to-Consumer, estrategia de empresas para llegar directamente al usuario final o cliente.
SWIFT: Society Of Worldwide Interbank Financial Telecommunication, organización que tiene a cargo una red internacional de comunicaciones financieras entre bancos y otras entidades financieras.

SISTEMAS DISTRIBUIDOS

Un sistema distribuido se define como una colección de computadores autónomos conectados por una red, y con el software distribuido adecuado para que el sistema sea visto por los usuarios como una única entidad capaz de proporcionar facilidades de computación.


Los sistemas distribuidos se implementan en diversas plataformas hardware, desde unas pocas estaciones de trabajo conectadas por una red de área local, hasta Internet, una colección de redes de área local y de área extensa interconectados, que en lazan millones de ordenadores.


Las aplicaciones de los sistemas distribuidos varían desde la provisión de capacidad de computo a grupos de usuarios, hasta sistemas bancarios, comunicaciones multimedia y abarcan prácticamente todas las aplicaciones comerciales y técnicas de los ordenadores. Los requisitos de dichas aplicaciones incluyen un alto nivel de fiabilidad, seguridad contra interferencias externas y privacidad de la información que el sistema mantiene. Se deben proveer accesos concurrentes a bases de datos por parte de muchos usuarios, garantizar tiempos de respuesta, proveer puntos de acceso al servicio que están distribuidos geográficamente, potencial para el crecimiento del sistema para acomodar la expansión del negocio y un marco para la integración de sistema usados por diferentes compañías y organizaciones de usuarios.