Herramientas de usuario

Herramientas del sitio


simo:documentos:tecnicos:arquitectura

¡Esta es una revisión vieja del documento!


ARQUITECTURA DE SISTEMA SIMO

INTRODUCCIÓN

Esta página contiene la descripción arquitectónica del sistema SIMO. Esta arquitectura fue diseñada de acuerdo a los criterios presentados a continuación y naturalmente sufrió un proceso evolutivo a medida que se fue construyendo el sistema.

Dadas estas premisas, la argumentación aqui presentada inicia con el análisis de los criterios y paulatinamente profundiza hasta llegar a las definiciones que constituyen la arquitectura en cuestión.

CRITERIOS Y BASE LÓGICA

En general, la arquitectura de software busca dar respuesta a una cuestión principal: Dar alcance a una serie de cualidades o atributos de calidad, predominantemente no funcionales, que se han identificado como las más relevantes para el sistema y a su vez minimizar los riesgos identificados como los más peligrosos potencialmente.

Los atributos de calidad resultan ser comunes a todos los sistemas de software y por tanto han sido identificados y estandarizados (Ver gestion.cnsc.gov.co/cnscwiki/doku.php), a continuación listamos los más relevantes en el marco del proyecto.

  • Mantenibilidad
  • Modularidad
  • Rendimiento y escalabilidad
  • Seguridad
  • Portabilidad y compatibilidad
  • Usabilidad
  • Acceso a la información

Adicionalmente, existen también otros criterios que resultan importantes pero que no pueden ser clasificados estrictamente como atributos de calidad, entre estos criterios encontramos:

  • Experiencia y habilidades del equipo de trabajo
  • Metodología de desarrollo

A continuación se analizan cada uno de estos criterios a la luz del sistema:

Mantenibilidad

Esta cualidad indica que tan fácil es hacer mantenimiento y soporte a un sistema y por supuesto es una cualidad deseable y necesaria en cualquier software, cualitativamente, la mantenibilidad de un sistema se ve beneficiada por aspectos como la calidad de la documentación y la simplicidad del código. La calidad de la documentación depende más de la metodología de desarrollo y de la gestión del proyecto, por el contrario, la simplicidad en el código si puede ser influenciada por la arquitectura de software que se escoja, en este sentido, se debe procurar entonces utilizar una arquitectura que favorezca la simplicidad en el código.

Modularidad

Esta propiedad afecta directamente la mantenibilidad y está orientada a que el software se construya mediante la interacción de módulos o componentes independientes que pueden ser reemplazados o modificados sin que se afecte radicalmente el funcionamiento de los otros módulos. De esta forma es posible hacer mantemiento focalizados en el módulo afectado por el problema o susceptible de mejora. En general la modularidad es favorecida al seguir los principios de bajo acoplamiento y alta cohesión, los cuales son maximizados al utilizar una arquitectura orientada a componentes y/o a servicios. En consecuencia la arquitectura a escoger utilizará un framework que favorezca estos paradigmas de programación, en concordancia con la arquitectura SOA propuesta (Poner referencia).

Rendimiento y escalabilidad

El rendimiento resulta de vital importancia en el sistema, puesto que se espera una alta demanda por parte de los usuarios ciudadanos, (existe un número de usuarios potenciales correspondiente a la fuerza laboral del país). Adicionalmente se espera que haya picos de demanda sobre el aplicativo en momentos claves de la convocatoria como los cierres de los períodos de inscripciones.

La escalabilidad está altamente relacionada con el rendimiento puesto que si un sistema es áltamente escalable, entonces podrá soportar demandas de servicios progresivamente más altas sin alterar el rendimiento. Cláramente se debe favorecer una arquitectura que favorezca el escalamiento y minimize el consumo de recursos, claro está, procurando mantener un equilibrio con los demás factores de decisión de la arquitectura.

Seguridad

Dada la naturaleza de la información manejada en el sistema, que incluye datos personales y laborales de los usuarios y que atañe directamente al empleo que obviamente es de vital importancia para los usuarios, se hace necesario contar con un nivel de seguridad que garantice la privacidad, confidencialidad, integridad, autenticidad y no repudio de la información. Existe un extenso trabajo en seguridad a nivel de sistemas de información y la arquitectura es solo una parte de la solución.

Si bien, pueden implementarse controles de seguridad áltamente sofisticados, estos controles pueden ir en detrimento de otros aspectos como la usabilidad del sistema, en consecuencia, la arquitectura propuesta debe incluir o facilitar la implementación de los controles de seguridad más ampliamente difundidos.

La naturaleza Web del sistema, implica que muchos de los controles puedan ser implementados a nivel de infraestructura (por ejemplo la implementación de https/ssl o de sistemas cortafuegos y proxys), otros controles pueden ser implementados a nivel de middleware, como pueden ser los repositorios de la información de autenticación o los servicios de encripción de datos, en este caso, la arquitectura a implementar debería basarse o ser capaz de utilizar plataformas que proporcionen de antemano los servicios necesarios.

Adicionalmente, también es necesario implementar controles tendientes a evitar la exposición y uso de vulnerabilidades, estos controles son aplicados muchas veces a nivel del sistema operativo sin embargo, muchos de ellos aplican específicamente al paradigma Web (por ejemplo, cross-site scripting, falsificación de sesiones, almacenamiento de contraseñas en el navegador), por tanto, la arquitectura a usar debería en lo posible implementar por defecto este tipo de controles.

Por último, pero no menos importante, la arquitectura debe permitir la especificación diáfana de roles y usuarios que permita implementar los requisitos de autorización sobre las operaciones y datos del sistema, al respecto, el framework utilizado debería permitir la especificación abstracta (si es posible declarativa) de estos roles y permisos.

Portabilidad y compatibilidad

Estos atributos de calidad resultan relevantes en dos situaciones específicas:

La primera obedece a que se viene desarrollando en la entidad, una iniciativa de mejoramiento de la infraestructura tecnológica, esto plantea la necesidad de contar con aplicaciones que puedan ser portables fácilmente a nuevos tipos de infraestructura. Para empezar, se debe utilizar una arquitectura que utilice un lenguaje de programación portable, pero además de eso, es importante minimizar la dependencia de fabricantes de software específicos y se debe favorecer la aplicación de estándares y especificaciones de la forma más simple que sea posible.

El segundo escenario surge de la necesidad de soporta clientes móviles sobretodo para los usuarios ciudadanos, en este sentido, la arquitectura debería permitir el desarrollo de interfaces de usuario optimizadas para ese tipo de clientes o en su defecto, las interfaces deberían poder indistintamente en navegadores tipo escritorio o clientes móviles. De cualquier forma la arquitectura debe proporcionar medios para desplegar la interfaz de usuarios en dispositivos móviles.

Usabilidad

Este atributo es de suma importancia dado que se espera una constante interacción del usuario ciudadano con el sistema, y además a que no es posible delinear un perfil específico para los usuarios ya que los empleos ofrecidos en las convocatorias son extremadamente diversos y no es posible caracterizar al usuario que va a aplicar.

Es por esta razón que las interfaces de usuario deben ser diseñadas de forma que puedan ser entendidas y usadas por cualquier persona, si bien esto es bastante difícil, puede ser un punto en el cual se puede obtener una mejora sustancial sobre el conglomerado de aplicaciones que conforman el sistema actual.

El tema de la usabilidad es difícil de abordar desde el punto de vista de la arquitectura de software, sin embargo, como lineamiento general, se debería escoger una que favoreciera medios flexibles de interacción con el usuario, muy al estilo Web 2.0. Este tipo de interacciones se caracterizan por dar alcance a las características modernas de la Web que incluyen, pero no se limitan a peticiones asincrónicas y a aprovechar al máximo las prestaciones de los navegadores recientes. En particular, las interfaces de usuario deberían no solo ser compatibles con HTML5 sino también tratar de utilizar inteligentemente las nuevas características que este estándar ofrece.

Acceso a la información

Este atributo era de particular importancia para el sistema, dado que una de las principales funciones del sistema es permitir al ciudadano encontrar empleos potenciales cuyas características se alineen apropiadamente a su experiencia laboral, habilidades y gustos.

En este sentido, el sistema debía contar con un sistema de búsqueda más avanzado que permitiera encontrar empleos por criterios definidos (como rango salarial, nivel académico, convocatoria, entre otras) pero también por palabras clave y por aproximación de forma que la búsqueda no dependa de que los textos contengan exactamente una palabra.

En general este tipo de búsquedas incorpora tecnologías relacionadas con el indexamiento de texto completo (Full Text Index) y pueden incorporar algoritmos como búsquedas fonéticas, raíces lexicográficas, n-gramas, entre otros

En resumen, la arquitectura del sistema fue planeada para incorporar librerías que proporcionen estas capacidades de manera genérica

false

simo/documentos/tecnicos/arquitectura.1507778155.txt.gz · Última modificación: 2017/10/12 03:15 por lgomez