domingo, 16 de febrero de 2014

Sistemas Distribuidos


Los sistemas distribuidos suponen un paso más en la evolución de los sistemas informáticos, entendidos desde el punto de vista de las necesidades que las aplicaciones plantean y las posibilidades que la tecnología ofrece.

Son sistemas cuyos componentes hardware y software, que están en ordenadores conectados en red, se comunican y coordinan sus acciones mediante el paso de mensajes, para el logro de un objetivo.

Factores que han impulsado el Desarrollo de los Sistemas Distribuidos:

  • Avances Tecnológicos. 
  • Nuevos requerimientos. 
  • Globalización.
  • Aspectos Externos (Culturales, Políticos, Económicos). 
  • Integración

Ventajas y Desventajas de los Sistemas Distribuidos


Ventajas:
  • Procesadores más poderosos y a menos costos.
  • Desarrollo de Estaciones con más capacidad.
  • Las estaciones satisfacen las necesidades de los usuarios.
  • Uso de nuevas interfaces.
  • Avances en la Tecnología de Comunicaciones.
  • Disponibilidad de elementos de Comunicación.
  • Desarrollo de nuevas técnicas.
  • Comparición de Recursos.
  • Dispositivos (Hardware).
  • Programas (Software).
  • Eficiencia y Flexibilidad.
  • Respuesta Rápida.
  • Ejecución concurrente de procesos (en varias computadoras).
  • Empleo de técnicas de procesamiento distribuido.
  • Disponibilidad y Confiabilidad.
  • Sistema poco propenso a fallas (Si un componente falla, no afecta a la disponibilidad del sistema).
  • Mayores servicios que elevan la funcionalidad (Monitoreo, Telecontrol, Correo Eléctrico, Etc.).
  • Crecimiento Modular.
  • Es inherente al crecimiento.
  • Inclusión rápida de nuevos recursos.
  • Los recursos actuales no afectan.
Desventajas:
  • Requerimientos de mayores controles de procesamiento.
  • Velocidad de propagación de información (Muy lenta a veces).
  • Servicios de replicación de datos y servicios con posibilidades de fallas.
  • Mayores controles de acceso y proceso (Commit).
  • Administración más compleja.
  • Costos de integración y desarrollo son elevados.

viernes, 14 de febrero de 2014

Windows Communication Foundation - WCF



CARACTERISTICAS PRINCIPALES DE WCF

Servicios de flujo de trabajo:

Permite describir totalmente un servicio basado en flujo de trabajo mediante declaración en XAML. 

Extremos: direcciones, enlaces y contratos

Toda comunicación con un servicio de Windows Communication Foundation (WCF) se produce a través de los extremos del servicio. Los extremos proporcionan acceso a los clientes a la funcionalidad que ofrece un servicio de WCF.

Transferencia y serialización de datos

En un sistema conectado, los servicios y clientes dependen del intercambio de datos para realizar cualquier tarea. Windows Communication Foundation (WCF) administra los datos y la serialización de los datos para crear aplicaciones eficaces y fáciles de mantener.

Sesiones, creación de instancias y simultaneidad

Una sesión es una correlación de todos los mensajes enviados entre dos extremos. Creación de instancias hace referencia al control de la vida de los objetos de servicio definidos por el usuario y sus objetos InstanceContext relacionados. La simultaneidad es el término dado al control del número de subprocesos que se ejecutan al mismo tiempo en un InstanceContext.

Transportes en Windows Communication Foundation

El nivel de transporte está en el nivel más bajo de la pila del canal. Los transportes principales utilizados en Windows Communication Foundation (WCF) son HTTP, HTTPS, TCP y canalizaciones con nombre. 

Colas y sesiones de confianza

Las colas y las sesiones de confianza son las características de Windows Communication Foundation (WCF) que implementan la mensajería de confianza. 

Transacciones

La característica de transacciones de Windows Communication Foundation (WCF) permite a varios componentes participar simultáneamente en una operación de datos. 

Seguridad en Windows Communication Foundation

WCF no solo se integra con infraestructuras de seguridad existentes, sino también extiende la seguridad distribuida más allá de los dominios solo de Windows mediante mensajes SOAP seguros. WCF puede considerarse una implementación de los mecanismos de seguridad existentes, con la ventaja principal de utilizar SOAP como protocolo, además de los protocolos existentes. 

Conexión de redes punto a punto

Proporciona un canal de comunicación P2P basado en mensajes seguros y escalables para los desarrolladores de aplicaciones. Un ejemplo común de una aplicación con varias partes que se puede beneficiar del canal del mismo nivel es el caso de una aplicación de colaboración, como el chat, donde un grupo de personas conversan entre ellas de igual a igual, sin necesidad de servidores. 


VENTAJAS Y DESVENTAJAS DE WCF


Ventajas de WCF:

Proporciona un único modelo de programación tipado de aplicaciones distribuidas basadas en servicios.
Encapsula y simplifica el desarrollo de aplicaciones soportadas por las diversas tecnologías distribuidas.
  • Permite el desarrollo de aplicaciones .NET capaces de interoperar con aplicaciones desarrolladas con otras tecnologías (J2EE, SAP).
  • Facilidad de creación de servicios web interoperables y aplicaciones que hagan uso de los mismos.
  • Encapsula y simplifica el desarrollo de aplicaciones soportadas por las diversas tecnologías distribuidas.
  • Permite el desarrollo de aplicaciones .NET capaces de interoperar con aplicaciones desarrolladas con otras tecnologías (J2EE, SAP).
  • Promueve bajo acoplamiento entre las aplicaciones.
  • Permite el envío de datos asíncronos de un extremo del servicio a otro. Estos mensajes pueden desde un carácter que se envía como XML o complejos como una secuencia de datos binarios.
  • Utiliza un motor de socialización predeterminado para convertir los datos en XML y viceversa.
  • Los mensajes pueden enviarse con cualquiera de los protocolos y codificaciones integradas (HTTP y WWW, TCP)
  • Compatible con Ajax y REST.
  • Contine una extensión para formatos XML concretos: ATOM(RSS);
  • Formatos que no son XML: JSON.

Desventajas de WCF:

  • Seguridad del nivel de mensaje. Debido a que, utiliza la especificación ws-security para proteger los mensajes creando así cierta dependencia que afecta la interoperabilidad, rendimiento y transmisión de mensajes.
  • La curva de aprendizaje es alta.
  • Tecnología propietaria.

COMPARACIÓN DE WCF CON WEB SERVICES Y .NET REMOTING


Interoperabilidad


. NET Remoting: Trabaja en un entorno homogéneo. También se requiere una aplicación de consumo para estar en. NET.


Web Services: Son independientes de la plataforma y lenguaje, y no se preocupan por la aplicación que lo consume. Pero tiene restricciones del protocolo HTTP. En cuanto al rendimiento, se le considera lento.


WCF: Puede alojarse en el entorno Windows, y también puede ser utilizado por clientes de diferentes idiomas y diferentes plataformas.
Protocolo


Remoting. NET: Sus aplicaciones pueden utilizar el HTTP, TCP y SMTP.


Servicios Web XML: Utilizan SOAP, es decir, XML a través de HTTP.


WCF: Además de los protocolos mencionados, puede utilizar canalizaciones con nombre y MSMQ.
Hosting


. NET Remoting: Sus aplicaciones se puede hacer en Windows Forms, aplicaciones de consola de servicios de Windows y IIS. Si implementamos comunicación remota en IIS, todavía no se puede tomar ventaja de las opciones de seguridad incorporadas a partir de ahí.


Web Services: Están alojados en el IIS señalando el archivo ASMX al directorio virtual.


WCF: A diferencia de Web Services y. NET Remoting, WCF proporciona más opciones para el alojamiento. Combina antiguas opciones de alojamiento por otras nuevas, como el alojamiento en WAS. Las aplicaciones WCF también pueden ser alojadas en las siguientes formas:
Self Hosting.
Windows Service.
IIS y WAS.

EXTENSIÓN

En lugar de requerir diferentes tecnologías para diferentes estilos de comunicación, WCF proporciona una única solución unificada.


Unificación de Tecnologías de Computación Distribuida de Microsoft

jueves, 13 de febrero de 2014

Restful

RESTFUL

Principios de RESTFUL:

La tecnología REST Ful está ganando amplia adopción en toda la web como una alternativa más simple y menos compleja a diferencia de SOAP. Por ello varios proveedores están migrando a esta tecnología tales como: Facebook, Google, Yahoo etc.

1: ¿En qué consiste?

En base a los principios REST tenemos:

Podemos entender el uso de esta tecnología como un protocolo cliente/servidor sin estado, es decir cada mensaje HTTP contiene toda la información necesaria para comprender la petición. Como resultado, ni el cliente ni el servidor necesitan recordar ningún estado de las comunicaciones entre mensajes. Por ello, muchas aplicaciones basadas en HTTP utilizan cookies y otros mecanismos para mantener el estado de la sesión (algunas de estas prácticas, como la reescritura de URLs, las cuales no son permitidas por REST)
Así mismo, se aplican conjunto de operaciones bien definidas: las más importantes son POST, GET, PUT y DELETE. Con frecuencia estas operaciones se equiparan a las operaciones CRUD que se requieren para la persistencia de datos.
En un sistema REST se utiliza una sintaxis universal para identificar los recursos, cada uno es direccionable únicamente a través de su URI.
El uso de hipermedios, tanto para la información de la aplicación como para las transiciones de estado de la aplicación: la representación de este estado en un sistema REST son típicamente HTML o XML. Como resultado de esto, es posible navegar de un recurso REST a muchos otros, simplemente siguiendo enlaces sin requerir el uso de registros u otra infraestructura adicional.

2: ¿Cómo implementarlo?

A.- Empecemos con un proyecto de aplicación web asp.net en blanco en Visual Studio

   1:  <configuration>

   2:      <system.web>

   3:          <compilation debug="true" targetFramework="4.0" />

   4:      </system.web>

   5:  </configuration>



B.-Creamos interfaces en WCF a definir nuestra ServiceContract y las operaciones de la siguiente manera:



   1:  [ServiceContract]

   2:  interface IPersonService

   3:  {

   4:      [OperationContract]

   5:      Person GetPerson(string id);

   6:  

   7:      [OperationContract]

   8:      Person InsertPerson(Person person);

   9:  

  10:      [OperationContract]

  11:      Person UpdatePerson(string id, Person person);

  12:  

  13:      [OperationContract]

  14:      void DeletePerson(string id);

  15:  }

 C.- Encapsulamos todos los atributos WCF en la interfaz en lugar de su clase de implementación.


   1:  [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

   2:  public class PersonService : IPersonService

   3:  {

   4:      [WebGet(UriTemplate = "Person({id})")]

   5:      public Person GetPerson(string id)

   6:      {

   7:      }

   8:  

   9:      [WebInvoke(UriTemplate = "Person", Method = "POST")]

  10:      public Person InsertPerson(Person person)

  11:      {

  12:      }

  13:  

  14:      [WebInvoke(UriTemplate = "Person({id})", Method = "PUT")]

  15:      public Person UpdatePerson(string id, Person person)

  16:      {

  17:      }

  18:  

  19:      [WebInvoke(UriTemplate = "Person({id})", Method = "DELETE")]

  20:      public void DeletePerson(string id)

  21:      {

  22:      }

  23:  }



D. Configuramos el Web.config


   1:  <system.serviceModel>

   2:    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>

   3:  </system.serviceModel>

E: Configuramos el Global.asax para que nuestra clase funcione sin un archivo .svc


   1:  public class Global : System.Web.HttpApplication

   2:  {

   3:      protected void Application_Start(object sender, EventArgs e)

   4:      {

   5:          RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(PersonService)));

   6:      }

   7:  }

   8:  </system.serviceModel>





3: Tecnologías

Existen diversos proveedores que utilizan la tecnología REST como:

Facebook
MercadoLibre
Twitter
Yahoo
Google


4: Especificaciones relacionadas

Mediante el uso de esta API de Java (Web Services (JAX-RS) API, es posible crear aplicaciones utilizando la tecnología REST, de una manera más rápida.

JAX-RS es un modelo de programación que proporciona un mecanismo para desarrollar servicios que siguen los principios de RES. Con el uso de JAX-RS, se simplifica el desarrollo de servicios RESTful.
JAX-RS es una API Java para desarrollar aplicaciones REST de forma rápida. Mientras que JAX-RS proporciona una forma más rápida de desarrollar aplicaciones web que los servlets, el objetivo principal de JAX-RS es crear servicios RESTful. JAX-RS 1.0 define una API de componente del extremo del servidor para crear aplicaciones REST. IBM® JAX-RS proporciona una implementación de la especificación de JAX-RS (JSR 311).


Patrones de Mensajería


PATRÓN

Un patrón es una solución general para un problema que aparece con frecuencia en un dominio determinado.

Un patrón no es una solución completa sino un una guía/esqueleto que debe ser adaptado para cada problema específico.

MENSAJERÍA

La mensajería permite la comunicación asíncrona entre dos aplicaciones, las aplicaciones se comunican mediante un canal (message BUS) por donde las aplicaciones envían sus mensajes, este canal recolecta los mensajes que pueden ser compartidos por múltiples aplicaciones a la vez. Las aplicaciones pueden ser de tipo productor (crea el mensaje) y consumidor o receptor (recibe el mensaje). Los mensajes tienen una estructura de datos (encabezado, propiedades y cuerpo), estos pueden ser desde texto plano hasta archivos XML,JSON, Etc.


PATRONES DE DISEÑO PARA SERVICIOS DE MENSAJERÍA

Los patrones basados en mensajes se asemejan en cierta forma a los patrones orientados a servicios. Sin embargo, existe una diferencia clave en la forma en que podemos pensar en ellos. En el modelo orientado al servicio, nos enfocamos generalmente en el suministro de servicios que pueden ser consumidos por muchos 'clientes', es decir, tomamos una posición de proveedor a consumidor. En un modelo orientado a los mensajes, solemos enfocarnos mucho más en los datos que fluyen a través del sistema y al conjunto de acciones que deben ser aplicadas a estos datos en curso; es decir, tomamos una postura de productor a consumidor.

Mensaje

Si tenemos una empresa que tiene dos aplicaciones separadas podemos comunicarlas a través de mensajes, usando un canal de mensajes que los conecta. Esto se logra empaquetando la información como un mensaje, el cual es un registro de datos que el sistema de mensajería puede transmitir a través de un canal de mensajes.


Message Channel

Tiene como objetivo conectar dos aplicaciones mediante un sistema de mensajería.


Pipe & Filters

Se utiliza este estilo para dividir una tarea de procesamiento más grande en una secuencia de pasos más pequeños, independientes de procesamiento (filtros) que están conectados por canales (tuberías).




Content-Based Router

Se encarga de examinar el contenido de un mensaje para distribuirlo por diferentes canales en función de los datos que componen dicho mensaje. Una propiedad fundamental del mensaje Router es que no modifica el contenido del mensaje. Sólo se ocupa del destino del mensaje.






Recipient List

Encaminar un mensaje a una lista de suscriptores del mismo. Este proceso se puede dividir en 2 partes: La primera parte calcula una lista de destinatarios. La segunda parte sencillamente recorre la lista y envía una copia del mensaje recibido a cada destinatario. Al igual que un Content-Based Router, la lista de destinatarios no suelen modificar el contenido del mensaje.





Message Endpoint

Es la interfaz entre una aplicación y un sistema de mensajería. Se puede tener un punto final remitente, a veces llamado un proxy o un consumidor de servicios, que es el responsable de enviar en los mensajes, y un extremo receptor, a veces llamado endpoint o servicio, que se encarga de recibir los mensajes.





Splitter


Se utiliza para descomponer un mensaje que contiene una lista de elementos repetitivos, para que estos puedan ser procesados de forma individual.





Aggregator

Se encarga de combinar varios mensajes individuales pero que se relacionan entre ellos en un único mensaje para que puedan ser procesados de una forma global.




Message Translator

Transformación de un mensaje en otro para que pueda ser usado en un contexto diferente.




Scatter-Gather


El Scatter-Gather enruta mensajes solicitados a un número de destinatarios. A continuación, utiliza un agregador para recoger las respuestas y se las consolida en un único mensaje de respuesta.






VENTAJAS MESSAGING

El emisor desconoce quien, como y cuando se recibirá el mensaje, por lo que al no existir receptor o no estar disponible, el emisor no se ve afectado.
Permite la comunicación entre distintos equipos distribuidos con distintos sistemas operativos y lenguajes
Es asíncrona, el emisor de un mensaje no tiene que esperar que el receptor reciba el mensaje, una vez la aplicación envía el mensaje, esta sigue con el resto de sus tareas, el emisor solo espera que el mensaje llegue al sistema de mensajería.
Una vez el mensaje ingresa al sistema de mensajería este debe garantizar que el mensaje sea recibido, lo mantendrá encolado hasta que el destinatario lo pueda recibir

DESVENTAJAS MESSAGING 

Algunas aplicaciones requieren recibir los mensajes en secuencia, el sistema de mensajería puede asegurar que los mensajes serán correctamente entregados pero no garantiza que estos sean entregados en una secuencia esperada por el receptor
Utilizar un sistema de mensajería, agrega procesamiento extra.
Muchas veces se necesita invertir en hardware o procesamiento adicional.


Referencias:


http://www.enterpriseintegrationpatterns.com/toc.html