La creación de un software es como la construcción de una casa o edificio. Para tener un resultado exitoso, robusto y estable, se requiere de una serie de cimientos y estructuras que permitan unir todas las partes y secciones de la casa, para así lograr que sus habitantes puedan interactuar con los diferentes espacios de forma satisfactoria.
Para desarrollar un software se debe manejar
la misma metodología; crear una estructura
tecnológica óptima para que éste cumpla al 100% sus objetivos. ¿Cómo se
logra esto? Con una arquitectura de
software.
Se conoce como arquitectura de software a los elementos
que conforman un sistema, se trata de la estructura bajo la cual están
diseñados y su interacción entre ellos. Esta estructura permite entender cómo
funciona el sistema desde su componente más profundo, hasta el más superficial
y cómo estos se relacionan entre sí para lograr un resultado positivo.
La arquitectura
de software también se relaciona con aspectos como rendimiento, usabilidad, presupuesto,
tecnología e incluso cuestiones estéticas. Para
implementarla de manera adecuada es recomendable apoyarse de una metodología de desarrollo, la cual
ofrece principios básicos para su desarrollo.
Todo desarrollo de software inicia con la
creación de esta estructura. Para lograr definir la directriz que se le dará a la arquitectura, se deben conocer las necesidades del negocio, para de esta forma determinar si la
arquitectura será muy rígida o puede tener características flexibles. Si la arquitectura no está bien planeada y
alineada a los objetivos, ésta no cumplirá con su cometido y presentará
problemas durante su operación.
Dicho lo anterior, existen una serie de elementos clave que deben existir en el
diseño de la arquitectura de software;
1. Cuidar la construcción y uso de bases de
datos. Las bases de datos son las que alimentarán gran
parte del sistema por lo que juegan un papel fundamental en el diseño de la
arquitectura. Recuerda que estas deben alinearse a las necesidades del negocio
y no al revés.
2. Seleccionar las herramientas y componentes
necesarios para optimizar los procesos. Para que un desarrollo
de software sea 100% relevante y funcional para la operación, debe unificar
servicios de automatización de procesos e integración de aplicaciones. Esto
debe ser colocado de forma estratégica, desde el inicio del diseño de la
arquitectura.
3. Para que un software
pueda ser funcional por un largo periodo de tiempo, debe ser auditable y medible. Es decir, se debe
crear un ambiente en donde el código pueda ser evaluado, medido y
regulado.
Dicho lo anterior pasemos a un ejemplo;
Imagina que eres el Gerente de Finanzas de un
corporativo que cuenta con 80 puntos de ventas y una red de 100,000 distribuidores.
Requieres de un sistema que permita automatizar
la operación de tu personal administrativo y tu fuerza de distribución.
Estás interesado en un sistema robusto que este conformado por diversos
componentes que estén alineados a tu estrategia
comercial.
Una buena opción de arquitectura sería una basada en un servidor centralizado. ¿Cómo
funciona?
La arquitectura,
desde un nivel macro, comienza con la creación de una base de datos centralizada que se encuentra en un servidor en la
nube que no es accesible, más que a través de una VPN (Infraestructura de red.
Su función es crear una red virtual en la nube, que al momento de que algún
servidor o equipo se conecta a ella es como si ésta estuviera en la misma locación,
aunque no lo esté)
Por otro lado, existe un servidor en el que
se encuentra un servicio que se encarga de conectarse a la base de datos. Ambos
servidores se encuentran en la misma red, esto quiere decir que se pueden
comunicar entre sí. Sin embargo, las peticiones, consultas o envíos de
información que se hacen a la base de datos, no se hacen de forma directa, sino
que se hacen a través de este servicio web, el cual valida si una petición
viene de una identidad conocida o no y con base a esto aceptar o rechazar la
petición. En caso de aceptarla, el servicio se comunica con la base de datos y
ésta procesa la petición. Debido a la importancia
que tiene la base de datos en esta arquitectura, este proceso tiene una
barrera de seguridad que protege la información que llega a esta base.
Otro elemento a tomar en cuenta para el
diseño de la arquitectura son las sucursales. La base de datos centralizada nutre de información a los puntos de
venta (computadoras) que hay en cada una de las sucursales. Estas generan una
gran cantidad de transacciones durante doce horas de operación de lunes a
sábado, por lo que es de suma importancia que éstas tengan conexión a la base
de datos para consultar y modificar información.
Todos los puntos de venta se conectan al servidor
través de la VPN para hacer el envío de solicitudes a la base de datos, de lo
contrario no se podría interactuar. Cada sucursal puede tener más de un punto
de venta operando, pero todos deben estar conectados a un mismo servidor local,
el cual cuenta con una réplica de la base de datos. Esto permite una operación
offline, es decir, en caso de no contar con internet o de perder la conexión
con la VPN, se sigue operando de forma local hasta que detecta una conexión y
sincroniza la información modificada con el servidor de la nube que posee la
base de datos centralizada.
De esta forma se puede
consultar y modificar; categorías de productos, productos, precios, inventario,
facturas, ventas, distribuidores, ordenes de surtido, sucursales, empleados, y
otros datos que se encuentra en la base de datos.
¿Cómo se nutre la base
de datos y como ésta es visible para el personal de la empresa? A través de la
creación de 3 componentes;
·
Backoffice: Permite administrar el alta de
distribuidores, sucursales, productos, imágenes, etc.
·
Sistema central: Permite administra alta de
puntos de venta y usuarios, así como sus roles y permisos específicos.
·
Oficina virtual: Permite a los distribuidores
comprar productos, ver su red, así como las compras de la misma. Así como generar un reporte de comisiones de
su red.
(Estos tres
componentes están en la nube, pero no requieren de una VPN)
¿Qué es lo que ofrece
esta arquitectura centralizada?
- · Operar offline
- · Tener una base de centralizada que se sincroniza de forma constante, haciendo que todas las sucursales a nivel nacional cuenten con la información actualizada después de cada compra. Esto trae como resultado;
o
Control de inventarios
o
Facturación al día
o
Información financiera actualizada
o
Saber al instante si se debe hacer un re
surtido de productos
o
Control de comisiones a los distribuidores
Uno de los retos
de esta arquitectura es el diseño de la base de datos, la cual
contiene grandes volúmenes de información que nutren a todos los componentes.
Tras este ejemplo, puede quedar
un poco más claro la importancia de un
diseño de arquitectura para un desarrollo de software.