viernes, 14 de abril de 2017

SOLUCIÓN AL MAL ENTENDIMIENTO DE CONCEPTOS SOA


Buen día luego de un tiempo regreso a escribir un poco sobre un tema que considero importante y que hace unos días, conversando con algunos compañeros, he notado que persiste la problemática y/o desconocimiento de muchos conceptos que derivan de SOA.

Uno de ellos y el cual me enfocaré en esta oportunidad es sobre el problema que se tiene con los conceptos de: SERVICIO, WEBSERVICE, REST, APLICACIÓN. Mucho colegas ingenieros ya sean Consultores, Arquitectos, etc, utilizan estas definiciones muy por usar, aparentemente sin conocer la realidad de cada uno y a que está enfocado, y lo que hacen es por ejemplo para hablar de un SERVICIO, mencionan WEBSERVICE, o para hacer referencia a un WEBSERVICE de un tipo específico lo llaman como APLICACIÓN y eso está realmente mal. 

El objetivo de este artículo es justamente dar a conocer las diferencias entre estas definiciones, para que los que aún tienen problemas con dichos conceptos, sepan aplicarlos correctamente al explicar y/o graficar sus arquitecturas a futuro.

A continuación detallaré con mis propias palabras, el concepto utilizado a nivel de TELCOS y en realidad el estándar que debería ser utilizado en cualquier rubro respectivamente:

APLICACIÓN:
Una Aplicación se hace referencia al software que interactúa con el usuario por medio una interface gráfica (el Front-end), está puede estar construida en cualquier lenguaje de programación como JAVA o .NET (últimamente: Angular JS + Bootstrap). En una Arquitectura SOA las Aplicaciones son las encargadas de interactuar por medio de la ejecución de sus componentes HTML (Links, Botones, etc), con un 'inventario de servicios' expuestos por detrás.

SERVICIO:
Un Servicio debe ser considerado como un 'activo de la empresa' y puede ser considerado como Servicio  a nivel de tecnología por ejemplo: un WebService, un EJB, un MDB, etc. El objetivo es que cumplan el objetivo para los que fueron construidos y así mismo sigan sobre todo los principios SOA. Finalmente, es importante saber que un Servicio en base a su tipo (muy independientemente del lenguaje en que se desarrolle: JAVA, BPEL) pueden ser de tipo:
  • Presentación: Servicios que dan la cara a la aplicación (No tienen lógica de negocio), redireccionan.
  • Negocio:  Servicios que orquestan a nivel de sus flujos, la lógica de negocio definida para el proceso.
  • Utilitario: Servicios que su objetivo es la reutilización, para el acceso a BackEnd y/o funcionalidades por ejemplo: BD, Plataformas Legacy, Envío de correos, Generación de logs, etc (No tienen lógica de negocio), aquí entran a tallar como parte de este tipo los conceptos de servicios de: ''Conectividad' y 'Datos'. 
WEBSERVICE:
Un Webservice es un tipo de Servicio, pero que cumple los protocolos como: SOAP & REST. Si hablamos del primer protocolo estos pueden manejar: SOAP 1.1 o SOAP 1.2 y manejar su comunicación tipo: Síncrono, Asíncrono y Oneway (XML en realidad). Así mismo, el segundo protocolo puede manejar una comunicación basada en XML & JSON (Formatos distintos) y si cumple en su manejo con las operaciones estándar: GET, POST, DELETE, etc, se le conoce como RESTfull.


De esta manera se ha tratado de explicar de la manera más amigable los diferentes conceptos SOA que usualmente generan controversia en su entendimiento.



domingo, 13 de noviembre de 2016

TALLER DE CAPACIÓN ORACLE SOA SUITE 12c


El presente post es brindado para dar detalles por el servicio de capacitación enfocado al equipo de (programadores, arquitectos, funcionales, etc) de las diferentes empresas deseosas en iniciar y/o tener conocimiento con relación al manejo de la plataforma Oracle SOA Suite 12c, (OSB, BPEL) tanto en teoría como práctica.

La capacitación se deberá brindar en las instalaciones del cliente, quien deberá proveer el ambiente propicio para la capacitación.

El servicio de capacitación seguirá al 100% el sílabus propuesto y compartido por el expositor. Así mismo, los interesados en el contenido del sílabus con la cotización respectiva, escribir a:


Email: cesarricardo_guerra19@hotmail.com



Cesar Ricardo Guerra .A.






sábado, 15 de octubre de 2016

CONSIDERACIONES EN LA APLICACIÓN DE 'TIMEOUT'.

En esta oportunidad tocaré un punto importante que es el 'Control de TimeOut' aplicado en el desarrollo SOA, este tema rinde un papel muy importante ya que hace referencia al delimitante de tiempo aplicado a los BE (BackEnds).

(BE: "Hace referencia a toda Interface de comunicación reutilizada como: BD, WS, EJB, PLATAFORMA, etc, que no forma parte del desarrollo principal").

Explicándolo de una manera más detallada, cuando se desarrolla un servicio independientemente del tipo que sea: SOAP/REST o EJB, es importante que exista un 'Control de TimeOut' obligatoriamente con relación a todos los BE (Síncronos) que son parte del flujo del 'Servicio Principal'

Resalto esto ya que en mi experiencia me he encontrado con todo tipo de servicios: Bien, Mal y Pésimamente construidos. Así mismo, en muchos de estos servicios mal construidos estaban usualmente enfocados en sus flujos a exponer una 'Lógica de Negocio', pero sin aplicar un control relacionado a los BE.


¿QUE IMPLICA QUE LOS BE, NO TENGAN TIMEOUT?.

El impacto es por ejemplo que ante un problema interno propio del BE, este demore más de lo normal incluso quedarse como se dice pegado y si no hay un 'Control TimeOut', el hilo de la ejecución se quedará ahí esperando hasta que el término de procesamiento del y eso está mal (ya que no puede durar eternamente)

El impacto va contra el tiempo de respuesta del 'Servicio Principal', el cual justamente como RNF (Requisito No Funcional), un servicio consumido debería cumplir con un tiempo de procesamiento máximo.


¿COMO SABER CUANTO TIEMPO DEBERÍA ASIGNAR?.

Así los servicios sean muy rápidos, el tiempo a aplicar se debe se estimar en segundos y es dependiendo el tamaño del flujo existente, así como de la cantidad de las iteraciones contra BE que se requiera. Pero analizando en si no es bueno que un servicio tenga internamente más de 10 BE dentro de su flujo, ya que si se tiene más lo mejor es segmentar en otro servicio. Sobre el tiempo se podría aplicar un tiempo máximo por BE entre 10 y 15 seg.


¿Y QUE HAY DE LOS REINTENTOS?.


Los reintentos son tratamientos que deben de ser considerados también para los BE, pero para los que analizando de alguna manera son inestables (se caen cada cierto tiempo), o también sus respuestas algunas veces demoran más de lo normal, etc. Los reintentos se debe activar ante alguna Exception de tipo Técnica de tipo: 'No Dispobilidad', 'Error en BE', 'TimeOut', etc.

En estos casos se recomienda aplicar un Máximo de Reintentos de 3 veces, luego de estos retornar el response con la falla. Así mismo, es importante considerar que el TimeOut debe ser es incremental, que por ejemplo ante cada reintento del mismo BE el TimeOut se debe duplicar:

Ejemplo:
  • Reintento#1 => TimeOut => 5 seg.
  • Reintento#2 => TimeOut => 5 seg. 
  • Reintento#3 => TimeOut => 5 seg. 
Esto quiere decir que sí tenemos un 'Servicio Principal' que por ejemplo llama solo a 1 BE con 3 reintentos de 5 seg. La ‘aplicación consumidora’ debería considerar asignarle al consumir el: 'Servicio Principal', un mínimo de tiempo de: 16 seg


¿Y QUE HAY DE LAS 'HUMAN INTERVENTIONS'?.

Lo conocido como 'Human Interventions’ son Políticas enfocadas a un control diferente (normalmente trabajadas de la mano con los 'Rententos'), por ejemplo para casos en que los servicios son de tipo Asíncronos y los flujos llaman a BE reutilizables. Así mismo, el manejo de 'Human Interventions’ normalmente son soportadas por servicios directamente relacionados a plataformas SOA de vendors como ORACLE / IBM.

Su aplicación se realiza con apoyo del negocio identificando los casos especiales con relación a BE que se requieren controlar de manera diferente. La política está enfoca a que ante alguna Exception de tipo Técnica como: 

'No Dispobilidad', 'Error en BE', 'TimeOut', etc. El hilo del flujo se queda en un estado especial, hasta que un operario se conecte a la plataforma, identifique dicho estado, revise la excepción, mande a corregirla y luego de estabilizarla, procesa a desde donde se cayó manualmente relance el mensaje al BE y el hilo del flujo continúe. 

Finalmente contra de la aplicación de 'Human Interventions', es justamente la necesidad de un operario, que producirá una demora considerable en el proceso, debido a ello su aplicación debe estar de la mano con la coordinación con el negocio.


Espero que este artículo les sirva para más adelante cuando se escuche la palabra Timeout se le considere con más seriedad de la que normalmente se le tiene.



sábado, 16 de abril de 2016

MODELO: 'ONTOLÓGICO/CANÓNICO'


Este modelo consiste en definir atributos estándares y sus respectivas características, diseñados a nivel de entidades. Esto con la finalidad de la reutilización de esta información a nivel de los contratos de servicio, evitando de esta manera cualquier tipo de duplicidad en los datos.

El objetivo es que el modelo canónico proporcione los formatos de intercambio de datos del negocio, de manera que todos los componentes (servicios, aplicaciones, etc), sólo necesiten saber (como máximo) su propio formato de datos y el formato de datos predeterminado (el que comparte dentro del bus de servicio), ya que el modelo canónico de mensajes tambien representa el formato estándar utilizado para intercambiar información de negocios en un bus de servicio.

Dicho modelo está enfocado en la aplicación dos patrones:

- SCHEMA CENTRALIZATION.
- CANONICAL SCHEMA.


Dando solución a los PROBLEMAS siguientes:

¿Cómo pueden los contratos de servicio ser diseñados para evitar la definición de datos redundantes?.
Esto se refiere específicamente al contenido de los esquemas redundantes (muy comúnmente) y/o mal diseñados que en si son difíciles de gobernar.

¿Cómo pueden los servicios diseñarse para evitar la transformación del modelo de datos?.
Esto se refiere e impacta directamente a servicios con esquemas diferentes, con datos similares (Redundantes) y que requieren de transformación, con esto aumenta el esfuerzo de desarrollo, la complejidad del diseño y la sobrecarga de rendimiento en tiempo de ejecución, ya que el objetivo es llegar a la Interoperabilidad  intrínseca (de manera natural). 


La SOLUCIÓN sería:

Crear y seleccionar esquemas existentes físicamente separados del contrato de servicio (.WSDL), ya que justamente la representación más común que se utiliza para el modelo canónico mensaje es un conjunto de esquemas XML. Esto tiene la ventaja de hacer el tipo y definiciones de mensajes (esquemas) con el fin de reutilizarlos y compartirlos entre varios contratos.

Un modelo de datos canónico es conjunto definido de tipos, elementos, atributos y relaciones que representan las entidades de negocios, estas están justamente basadas en los requerimientos del negocio para el proyecto SOA. Los modelos de datos (esquemas) deben estar estandarizados (Modelo Canónico) a nivel de entidades, almacenado y versionado por medio de alguna herramienta que permita centralizar todo el Modelo Canónico (MDL) de entidades, para que ante algún requerimiento de información por parte de un servicio dentro del contrato se importe la referencia a la entidad y se reutilice el dato requerido. Esto evitará cualquier tipo de redundancia de información, problema de transformación a nivel de Xsd, etc.


¿Cómo diseñar un MDL?
Dependiendo de cuan grande sea la empresa puede que ya tenga algunos modelos de referencia (para las Telecomunicaciones existe SID-TM Forum, etc.).  La idea es tener un modelo base inicial para poder trabajar y que se ajusta a las necesidades, al cual se puede complementando con más entidades en base al levantamiento de información que se realice. Aquí están algunas ideas sobre cómo lograr un buen modelo conceptual MDL (muy similar a cualquier otro modelo de datos):

- Validar si se seguirá algun modelo base del modelo canónico (como SID).
- Enumerar todas las entidades principales que requiere su empresa (cliente, pedido, etc.).
- Relacionar las entidades.
- Especificar los atributos de las entidades.


TeleManagement Forum (TMF) han definido un conjunto de cuatro marcos conocidos colectivamente como Frameworx. Los marcos clave proporcionan un valor empresarial que son el 'Marco de la Información' (SID) y el 'Marco de Procesos' (eTOM). Ambos pueden ofrecer una mayor agilidad en los negocios. Dichos modelos SID representan el ejemplo más importante de los esfuerzos puestos en desarrollar formas eficientes de compartir información entre sistemas de telecomunicaciones. Incluso, el SID debe convertirse en el lenguaje que SOA proporcione como vocabulario, gramática y sintaxis base que utilicen los servicios para proporcionar o recibir información. Así mismo, se debe de asegurarse de que todo el tráfico de mensajes a través de la ESB esté alineado SID, así el esfuerzo necesario para integrar los servicios se reducirá drásticamente así como también se reducirá los costos de mantenimiento respetivamente.


Por otro lado, una contra que se debería tener en consideración es que ante algún cambio en el 'tipo/tamaño' del dato perteneciente a la entidad, se debe de considerar que esto impactará en las ‘N’ aplicaciones que reutilizan dicha entidad (por medio de sus Xsd), y en las otras ‘N’ aplicaciones consumidoras que también reutilizan en sus comunicaciones.

¿Cómo implementar un MDL?
Para implementar un MDL como ya se ha mencionado se debe de diseñar, modelar y relacionar las entidades de negocio, para esto uno se puede apoyar en herramientas empresariales como Enterprise Architect (Sparx), que permitira diseñar desde un Diagrama de Clases 'UML', poder modelar las entidades y a si mismo y generar en base al diagrama de clases, esquemas .XSD y clases .JAVA.


El Modelo Canónico de las entidades completo puede ser diseñado exportado y reutilizado en los para cada servicio dentro de sus contratos respectivamente:


Tal como se mencionó durante el desarrollo de un Servicio Web la idea es reutilizar el Modelo Canónico estandar dentro del Contrato tal como se puede apreciar en la imagen:


Finalmente, una de las cosas más importantes que se debe también hacer, es educar a la empresa en el uso del MDL, y las ventajas a largo plazo de la misma. La gente a menudo no se enfocan a largo plazo y prefieren optar un enfoque más pragmático para resolver los problemas que se enfrentan sin tener en cuenta el impacto de la misma en el futuro.

Para los intersados se pueden descargar los archivos utilizados desde aquí:

Modelado:
http://www.mediafire.com/download/zkfz3x3xazkrci6/XSD_Model_Generator.zip

Wsdl/Xsd:
http://www.mediafire.com/download/n2lbxbnxnk40i24/ModeloCanonico_Dummy.zip


martes, 29 de marzo de 2016

Weblogic Overload Error ...


Es importante saber que Weblogic internamente maneja un pool de conexiones por cada DataSource (XA / NOXA), que es creado en su entorno. Normalmente este DataSource al ser creado se le asigna un soporte automático de 15 hilos (paralelos) de conexión (capacidad máxima), los cuales se irán liberando conforme a su correcto uso.


Para la simulación de este error Overload en Weblogic se ha preparado un Dummy en Java que se conectará por medio de un JNDI de Weblogic a un Store Procedure y lo estresará de diferentes maneras para poder obtener dicho escenario de error.


Este error típico de Weblogic se puede dar si es que se incurre en alguna de las dos formas siguientes .........


Los interesados pueden descargar el artículo completo desde aquí: http://www.mediafire.com/download/6be8xbna38qa65x/Weblogic_Overload_Error.pdf

Para descargar las fuentes del Dummy (Eclipse): http://www.mediafire.com/download/d425dsgkgfmqm33/Dummy_JNDI_Overload.zip




domingo, 20 de marzo de 2016

APACHE JMETER (Enfoque WS)

Un tema muy importante durante los proyectos de tipo SOA, son las pruebas unitarias que se le hagan durante las construcción de los servicios. Aquí se podrá verificar que tal fluye la lógica de negocio  plasmada y como la arquitectura definida del servicio es tan robusta como para poder distribuir bien, rápida y correctamente la información. Así mismo, en muchas de estas pruebas es muy importante medir resultados lo que se conoce como tps (transacciones por segundo), entre otros resultados estadísticos, que son necesario ya que al tenerlos uno podrá validar que la velocidad y el rendimiento del servicio son los ideales. Aquí nace la necesidad de una herramienta que facilite dicha tarea de prueba.

Apache JMeter es un proyecto de Apache que puede ser utilizado como una herramienta de pruebas unitarias para analizar y medir el desempeño de servicios especialmente las de tipo aplicaciones web, así mismo soporta aserciones para asegurarse que los datos recibidos son correctos y brinda una variedad de reportes.


Con dicha herramienta se podrá obtener también automáticamente gráficas atractivas y significativas de nuestro resultado con las cuales se podrá analizar más rápidamente resultados de las pruebas e incluirlas el en un informe requerido. Además, se puede utilizar para realizar un análisis gráfico de rendimiento o para probar el comportamiento de respuesta del servidor bajo gran carga concurrente.

El siguiente tutorial mostrará justamente una parte de todo lo que esta herramienta brinda, que es el enfoque de como configurar y justamente cómo estresar un Servicio Web utilizando esta herramienta. Así mismo, se están cubriendo detalladarmente los siguientes puntos:

- Requerimientos.
- Instalación.
- Configuración y Prueba.


Para descargar este tutorial paso a paso ingresar aquí:
http://www.mediafire.com/download/03m0w2k8kefhiii/Tutorial+Apache_JMeter_v2.0.pdf

domingo, 21 de febrero de 2016

BENEFICIOS DE MANEJAR VARIOS DOMINIOS


Un dominio de Weblogic Servidor (WLS), es una unidad administrativa perteneciente a un Servidore de Aplicaciones. Asi mismo, sólo un administrador debería de tener conocimiento de dominios existentes.


Actualmente una empresa puede tener diferentes tipos de aplicaciones dispersas geográficamente y organizadas en diferentes áreas. Debido a ello, puede existir muchos dominios separados. Pensando en ello si analizamos cada dominio es una unidad que se administra por separado y se puede organizar dicha administraciónde manera departamental dentro de una empresa (contabilidad, manufactura, transporte, etc).

Por otro lado, una empresa puede querer tener todas sus aplicaciones en diferentes dominios que puedan ir incorporando. Debido a que a menudo es imposible ampliar uno solo dominio para abarcar el total de aplicaciones de toda la empresa. Así mismo, se debe considerar que teniendo un solo dominio a nivel empresa, acarrearía el ser administrado en su conjunto y la configuración se convertiría casi imposible de manejar y requeriría un esfuerzo mayor en la administración que en el desarrollo e implementación de las aplicaciones propiamente.

Finalmente, para mantener un correcto dominio (segmentado / distribuido) para la administración, se debe de separar las aplicaciones en 'multiples dominios' permitiendo que las aplicaciones en un dominio, puedan acceder a los servicios en otros dominios