Cintillo Institucional

.: Inicio | ¿Qué es SAID? | ¿Quién usa SAID? | Requerimientos | Recursos | Descargas | ¡Participa! | Licencia:.

Propuesta para la nueva arquitectura y el lenguaje de programación del proyecto derivado del SAID

Estatus actual del SAID

SAID es una excelente herramienta computacional que nace para respuesta al problema de falta de software libre administrativo en la Administración Pública Nacional (APN), debido al crecimiento de la aplicación y exigencias de los entes, que cada día lo utilizan, han surgido una serie de problemas técnicos que impiden su evolución: Desarrollado en un lenguaje de programación sin soporte completo para la orientación a objetos. Diseño de la aplicación sin uso de patrones de diseño de programación. El servidor es totalmente monolítico y construido bajo un esquema procedural. Por ser procedural, no contiene clases ni objetos. No tiene la posibilidad de que otra aplicación pueda ser conectada al SAID. Todos estos factores hacen que SAID sea una aplicación difícil de mantener a nivel de código, y cause demoras en la publicación de sus nuevas versiones, además de que la corrección de los errores encontrados sea un poco lenta y se puede dar respuesta efectiva a nuevas funcionalidades requeridas por los entes que la utilizan. La interoperabilidad entre sistemas administrativos se hace imposible con este enfoque y es una de las preocupaciones actuales de la APN.

Proyecto derivado del SAID

Las aplicaciones para gestionar recursos empresariales (tipo ERP) representan una necesidad para la industria nacional, donde se utiliza exclusivamente software privativo para la automatización de procesos de gestión empresarial.

Requerimientos del proyecto

SOA (Arquitectura Orientada a Servicios)

SOA [1] es un estilo de arquitectura de sistemas de computación que permite crear y usar procesos empaquetados como servicios. SOA define y proporciona la infraestructura que permite que distintas aplicaciones intercambien datos y participen en diferentes procesos. Los servicios están débilmente acopladas con los sistemas operativos y lenguajes de programación que están detrás de las aplicaciones.

Un servicio consta de una implementación que provee lógica de negocio y datos, un contrato de servicio que especifica las operaciones y las pre-condiciones y post-condiciones, y una interfaz que expone la funcionalidad físicamente.

Los servicios representan grupos lógicos de operaciones relacionadas con algún concepto del negocio. Las aplicaciones front-end usan los servicios y/o los exponen, los repositorios de servicios almacenan los contratos de servicios, y el bus de servicios interconecta las aplicaciones front-end con los servicios.

Para comunicarse entre sí, los servicios se basan en una definición formal independiente de la plataforma subyacente y el lenguaje de programación, como por ejemplo WSDL [9].

Los servicios pueden clasificarse según su propósito en servicios orientados a procesos que realizan los procesos del negocio, servicios intermediarios, básicos y públicos.

elementos_soa.png

Conceptos involucrados en SOA

Características de SOA

SOA separa funciones en servicios que se pueden distribuir, combinar y reutilizar para crear aplicaciones. Estos servicios se comunican entre sí mediante el paso de datos desde un servicio a otro, o coordinando una actividad entre dos o más servicios. Los servicios son independientes entre si, tiene interfaces bien definidas e invocables, las cuales pueden ser llamadas en secuencias definidas para formar procesos de negocios. La definición de la interfaz encapsula (oculta) las particularidades de una implementación, lo que la hace independiente del fabricante, del lenguaje de programación, o de la tecnología de desarrollo.

Este estilo de arquitectura promociona la reutilización a nivel macro (servicio) más que a nivel micro (clases), también puede simplificar la interconexión a, y uso de, activos de información existentes.

SOA promociona el objetivo de separar a los usuarios de las implementaciones del servicio. En consecuencia, los servicios pueden correr en varias plataformas distribuidas y pueden ser accedidos mediante redes.

Plantea la reusabilidad e interoperatividad de las aplicaciones obtenidas. Los servicios pueden ser pasos, subprocesos y procesos de la organización como se muestra en la figura Nº 2.

servicios_soa.png

Una arquitectura orientada a servicios permite diseñar sistemas de software que dan servicio a otras aplicaciones a través de interfaces públicas y detectables, y donde los servicios pueden ser invocados a través de una red. La clave de SOA es la independencia de los servicios.

Cuando se implementa una arquitectura orientada a servicio usando tecnología de servicios web, se crea una nueva forma de construir aplicaciones dentro de un modelo de programación más flexible. SOA es ambas cosas, una arquitectura y un modelo de programación. La clave es que la interacción entre los servicios es especificada por los desarrolladores de las aplicaciones de una manera ad hoc.

El diseño de una arquitectura orientada a servicios permitirá que sistemas existentes puedan ser integrados a la arquitectura, y con el tiempo puedan ser convertidos en componentes o reemplazados con otros proyectos.

¿Como implantar SOA?

La Arquitectura orientada a servicio no está condicionada a una tecnología especifica. Ésta puede ser implementada usando un amplio rango de tecnologías, incluyendo SOAP [5], RPC, DCOM [11], CORBA [12], Servicios Web o WCF. SOA puede ser implementado usando uno a más de estos protocolos. Los servicios web pueden ser utilizados para implementar una arquitectura orientada a servicios. Uno de los principales objetivos de los servicios web en una arquitectura orientada a servicios, es hacer de la construcción de bloques funcionales accesibles a través de protocolos estándar de Internet que son independientes de plataformas y lenguajes de programación.

Selección de una arquitectura orientada a servicios

En base a las características ofrecidas por SOA, se plantea que el proyecto derivado de SAID sea desarrollado bajo este enfoque, donde las diferentes funcionalidades de la aplicación sean servicios que puedan ser utilizados por otras aplicaciones dentro de CENDITEL. Con la finalidad de usar eficientemente la Arquitectura orientada a servicios se deben tener en cuenta los siguientes requerimientos:

Arquitectura planteada para la nueva versión del SAID

La arquitectura de software [14] de un sistema es la estructura de las estructuras del sistema, la cual comprende los componentes del software, las propiedades de esos componentes visibles externamente, y las relaciones entre ellos. La arquitectura de software es importante por las siguientes razones:

La arquitectura que se plantea para el desarrollo del proyecto derivado del SAID es una Arquitectura Cliente/Servidor [2]. La arquitectura Cliente/Servidor describe la relación entre dos programas, en el que un programa: el cliente, hace una solicitud de servicio a otro programa: el servidor, donde se espera que el servidor cumpla con la petición. En una red, el modelo cliente/servidor provee una manera conveniente para interconectar programas que se distribuyen de manera eficiente en diferentes lugares. La mayoría de las aplicaciones de Internet, como el correo electrónico, el acceso a la Web y acceso a bases de datos, se basan en el modelo cliente/servidor.

Características de la arquitectura cliente/servidor

El diseño de la arquitectura planteado se hace en inspirado en la revisión de la arquitectura del sistema de gestión empresarial libre TinyERP. Seguidamente se describe la arquitectura propuesta:

align="center", height="300",width="300"

Descripción de la Arquitectura

1.Arquitectura del Servidor

Núcleo de la aplicación:

En general el núcleo de la aplicación debería asegurar los siguientes aspectos:

Para satisfacer todos los aspectos anteriormente expuestos y para garantizar un sistema flexible y extensible se propone un núcleo de arquitectura genérico que no contiene ninguna funcionalidad y permita agregar o engranar componentes.

En este sentido, el núcleo genérico podría utilizarse para desarrollar cualquier tipo de aplicación mediante la agregación de componentes que definan la naturaleza de la aplicación, sean sistemas administrativos, ERP, gestores de contenidos, blogs, páginas, web, etc.

Objetos del Negocio

Son vistos como los datos de la aplicación: reportes personalizados, usuarios, compras, etc. Los objetos del negocio serán descritos usando la técnica de mapeo objeto/relacional (ORM). Al adoptar el enfoque SOA se plantea que los diferentes objetos del negocio puedan encontrarse de manera distribuida y de esta manera obtener las ventajas que brinda este enfoque.

Generador de Reportes:

Se propone que los reportes puedan ser generados de dos formas:

Servicios Web:

Se ofrecerá un interfaz común para los servicios web: SOAP, XML. Los servicios web permitirán la comunicación entre el cliente y el servidor.

Mapeo Objeto/Relacional:

Esta técnica de programación, conocida por sus siglas en inglés ORM, permite convertir datos entre sistemas con incompatibilidad de tipos en bases de datos relacionales y lenguajes de programación orientados a objetos. Esto crea una “base de datos orientada a objetos” de forma virtual y luego el lenguaje de programación puede utilizarla. El uso de esta técnica puede verse como un intento de resolver el lado equivocado del problema de no coincidencia entre el enfoque relacional y el de objetos. El correcto mapeo en el modelo relacional es entre el objeto y su tipo. El estado del arte de las bases de datos orientadas a objetos no es muy avanzado en software libre por lo que se plantea utilizar ORM para solventar esta brecha entre modelos relacionales y orientados a objetos.

SAFET:

Como gestor de flujo de trabajo se utilizará el Sistema Automatizado para la Firma Electrónica y Estampado de Tiempo (SAFET) desarrollado por equipo de seguridad de CENDITEL, éste permitirá la incorporación de la Firma Electrónica y el Estampado de Tiempo en la gestión de los documentos electrónicos dentro del SAID.

2.Arquitectura del Cliente

La Arquitectura planteada para el cliente está formada por los siguientes componentes:

Lenguaje de programación

Existen una gran cantidad de lenguajes de programación que se pueden utilizar para el proyecto derivado del SAID, no obstante se proponen lenguajes interpretados que garantizan la portabilidad en diferentes sistemas operativos porque fueron diseñados para ser ejecutados por medio de un intérprete. Los lenguajes propuestos son:

Algunas estadísticas de los lenguajes de programación

Ohloh, permite encontrar proyectos opensource (código libre) clasificados por etiquetas ó tags. Cada proyecto incluye informaciones sobre el tiempo que el proyecto lleva existiendo y el crecimiento que ha sufrido en los últimos años en cuanto a participación se refiere, este sitio permite hacer una comparación de proyectos por lenguaje de programación. Entre los lenguajes de programación que estamos proponiendo obtuvimos el siguiente gráfico.

ppr.png

SourceForge, Es una central de desarrollos de software que controla y gestiona varios proyectos de software libre y actúa como un repositorio de código fuente. Realizando una búsqueda de proyectos registrados por nombre de lenguaje de programación, se pudo obtener los siguientes resultados:

TIOBEdeclara a Python el lenguaje del 2007, El índice TIOBE que mide la popularidad de los lenguajes de programación actuales basándose mensualmente en la disponibilidad mundial de ingenieros, cursos, vendedores de software, búsquedas populares en Google, MSN, Yahoo! y YouTube.

Este reconocimiento se otorgó porque Python logró aumentar en un 58 % su popularidad durante el año pasado, ubicándolo en un sólido 6o lugar y por fin logrando superar al venerable Perl.

TIOBE también afirma que Python se ha convertido en el “lenguaje de pegamento por defecto”siendo .especialmente amado por los administradores de sistemas y los build managers”.

tpci_trends.png

Lenguaje de programación seleccionado

En función de hacer una aplicación totalmente nueva, construida a partir de la experiencia obtenida de la versión actual del SAID y que pueda dar respuesta a los requerimientos expresados se propone el lenguaje de programación Python, a continuación se listan las características de dicho lenguaje.

Algunas razones para la selección

Librerías ó módulos de interés en Python

Resumen de los aspectos relacionados a la nueva arquitectura

Conceptos Relacionados

Bibliografía

  1. Wikipedia en Español, http://en.wikipedia.org/wiki/Service-oriented_architecture

  2. Wikipedia en Español, http://en.wikipedia.org/wiki/Client_server

  3. Wikipedia, http://en.wikipedia.org/wiki/Web_services

  4. Wikipedia en Español, http://es.wikipedia.org/wiki/XML-RPC

  5. Wikipedia , http://en.wikipedia.org/wiki/SOAP

  6. Wikipedia en Español, http://es.wikipedia.org/wiki/Artilugio

  7. Wikipedia, http://en.wikipedia.org/wiki/GUI_widget

  8. Wikipedia, http://en.wikipedia.org/wiki/Web_widget

  9. Wikipedia en Español, http://es.wikipedia.org/wiki/WSDL

  10. Wikipedia, http://en.wikipedia.org/wiki/Wizard_%28software%29

  11. Wikipedia en Español, http://es.wikipedia.org/wiki/Distributed_Component_Object_Model

  12. Wikipedia en Español, http://es.wikipedia.org/wiki/CORBA

  13. Wikipedia, http://en.wikipedia.org/wiki/Fork_%28software_development%29

  14. Pressman, R. (2002). Ingeniería del Software: Un enfoque práctico. Madrid , McGraw-Hill.

  15. Channabasavaiah, K., Holley, K., Tuggle, E (2003). Migrando a una arquitectura orientada a servicios. Parte I.
  16. Delgado, A. Desarrollo de Software con enfoque en el Negocio. instituto de computación, Facultad de Ingenieria, Universidad de la República, Montevideo, Uruguay.
  17. Sitio Python, http://www.python.org/

  18. Wikipedia en Español, http://es.wikipedia.org/wiki/Perl

  19. Wikipedia en Español, http://es.wikipedia.org/wiki/Ruby

  20. Wikipedia en Español, http://es.wikipedia.org/wiki/Python

  21. Ohloh - Buscador Proyectos Opensource, http://www.ohloh.net

  22. SorceForge, http://sourceforge.net

  23. VivaLinux, http://www.vivalinux.com.ar/eventos/python-lenguaje-del-2007.html

.: Inicio | ¿Qué es SAID? | ¿Quién usa SAID? | Requerimientos | Recursos | Descargas | ¡Participa! | Licencia:.

said/documentos/propuesta (última edición 2008-08-20 19:41:09 efectuada por lcaballero)