Categories
54cuatro

Gestionando los legados

No esta mas el que lo desarrolló. Esta hace muchos años y nadie sabe como funciona. No tenemos soporte del proveedor.

Te parecen conocidas estas frases? Son algunas de las muchas que se escuchan dia a dia en las organizaciones ante la imposibilidad de actualizar sus sistemas legados.

¿Qué son los legados?

Podriamos definirlos como esos programas que nadie quiere tocar, nadie sabe quién lo escribió y que absolutamente nadie quiere correr el riesgo de reemplazarlo.

Podemos citar muchos casos de software legado que actualmente es de vital importancia en las organizaciones, por ejemplo los core banking o tasadores de Telcos.

¿Y porque nos encontramos con esta situación? Principalmente estas situaciones se dan cuando un software pierde su ciclo de actualización constante, y ante esa situación se comienza a perder conocimiento, se empiezan a ir los recursos claves que lo mantienen y ante esa situación cada dia se aísla mas del dia a dia. Para evitar que un software quede obsoleto, se requiere mejorarlo gradualmente y llevarlo a estándares de forma continua.

¿Cómo gestionar una aplicaciones legacy?

Reescribir el código (#rewrite): esta opción es compleja, porque básicamente se basa en rearmar el programa con las mismas funcionalidades, pero con tecnología y practicas apropiadas al momento actual. La mayor complejidad de esto es tener que mantener dos sistemas similares funcionando, y posteriormente ir pasando “carga” del viejo al nuevo o directamente volcar todo el trafico de un sistema a otro en un formato “big bang”.

Refactorizar el código (#refactor): esta opción se basa en reemplazar las funcionalidades del sistema antiguo, gradualmente. Esta estrategia consiste en relevar cada función, interface, clase, modulo, etc del sistema antiguo y construir una nueva pieza de software de ese elemento particular. Durante el refactoring, es posible detectar funcionalidades que ya no son necesarias, y a ellas se las deja “morir por inanición”.


¿Reescribir o Refactorizar?

Lógicamente es necesario analizar cada situación. No es lo mismo Reescribir todo un Core Bancario, que Refactorizar una aplicación para que deje de usar #MySQL para usar #MongoDB.

Se debe tener en claro cual es el aporte de valor de cada estrategia de cara al negocio. Posteriormente es bueno efectuar un assessment que permita situar el nivel de complejidad de la operatoria.

  • Relevamiento del software, interfaces, integraciones, etc.
  • Identificar la complejidad de las tareas
  • Identificar los riesgos
  • Definir con que enfoque se planeará la modernización de aplicaciones, apostando a disminuir el riesgo y los costos.

Planeando la nueva arquitectura

¿Estamos rediseñando una aplicación monolítica? ¿Es SOA? ¿Es Rest? ¿Crearemos #API? ¿Vamos a la nube? ¿Adoptaremos microservicios? ¿Usamos contenedores? ¿#Serverless, eso que es?

No es lo mismo pasar de .NET a .NET Core, que modificar un desarrollo en Cobol.

Es muy importante definir cual será el diseño futuro que “absorberá” a nuestro legado. Y de esa forma planificar cuales serán los pasos apropiados. Si de una app de baja complejidad tipo monolito vamos a ir a un esquema de #microservicios o #serverless es una buena oportunidad para reescribir desde cero. Pero si el sistema heredado en cuestión es el core de su negocios, no puede darse el lujo de correr riesgos innecesarios, y para este caso, es preferible optar por una refactorización progresiva. De igual forma, si las personas que hicieron originalmente al sistema legado ya no están en la compañía, tampoco tiene sentido refactorizar y será más fácil reescribirlo.

What is a Mainframe Computer? - A Guide from IBM Mainframes

Como vemos, no existe una tabla que resuelva las decisiones mágicamente. A veces, en ciertas oportunidades la refactorización de código es la mejor opción, por seguridad o por practicidad. Pero la refactorización de código en otros casos puede brindar una ganancia rápida en términos de capacidad de mantenimiento y rendimiento, construyendo nuevamente desde 0.

Existe un tercer modelo que podemos denominar Rehosting, y consiste en realizar un proceso llamado ‘Lift & Shift‘. Esta actividad tiene como finalidad levantar una aplicación legada y moverla a un nuevo entorno, ya sea #cloud, o #container, o #serverless. Esta opción es muy interesante para mover aplicaciones sin tener que esforzarse mucho en hacer una reescritura sustancial, en líneas generales, este tipo de procesos son de mucha utilidad para reducir la obsolescencia de hardware, pero como contra, es importante destacar que no tiene el valor que se encuentra en reestructurar la aplicación.

Desde 54cuatro estamos apoyando a las organizaciones a disminuir los riesgos que conllevan estas decisiones, a través de nuestros servicios de consultoría en Arquitectura con profesionales especializados en enfoques la modernización de aplicaciones que tienen en cuenta componentes de plataforma, arquitectura aplicativa y el diseño de API. Necesitas apoyo? Escribinos.

Contactate
Categories
54cuatro

Tutorial de Microsoft Azure

Este tutorial está destinado a que los principiantes aprendan todo acerca de #Azure. A través de este tutorial de Azure, comprenderás la arquitectura, varios productos de la suite Azure y conocer ventajas, migración de las instalaciones a la nube, administración y más.

Digamos que estás desarrollando una aplicación como Uber. Ya tiene esta aplicación lista en su computadora y el siguiente paso es hacer que esté disponible en Internet para que las personas puedan navegar e ir a este sitio web. ¿Cómo lo harías?

  • Primero. Tendrá que comprar un servidor, en el que cargará su aplicación, con todos los roles que se requieran (Webserver, Application Server, Database, etc) y/o comprar tantos servidores como roles requiera.
  • Segundo. Ademas debería disponibilizar entornos de desarrollo mas seguros y similares a producción que su notebook.
  • A continuación, deberá asegurarse de que su aplicación esté siempre disponible, contratando personas para administrar su servidor en que esta aplicación está alojada.
  • Y, por supuesto, las máquinas están destinadas a averiarse o quedar obsoletas; por lo tanto, deberá controlar el hardware del servidor, ya sea que esté actualizado o no, y esté listo para gastar algo de dinero si algo sale mal.
  • Finalmente, el aspecto más importante, a medida que su aplicación crezca en popularidad entre sus usuarios, sus servidores sobrecargarse con todo el tráfico. Tendrá que pensar en ampliar, manteniendo un control constante sobre el tráfico en su aplicación.

Parece factible? Bueno, lo anterior no solo requerirá mucho esfuerzo, ¡sino que también será extremadamente costoso!

Ahora, ¿te preguntas cómo resolverlo? Bueno, la respuesta es Cloud Computing.

¿Que es cloud computing?

Es básicamente el uso de servidores alquilados en Internet, en lugar de usar uno propio, se conoce como Cloud Computing.

Cloud Computing ha llevado a casi todas las nuevas empresas a cambiar a la nube; por lo tanto, no solo están ahorrando el costo inicial de iniciar un negocio con la infraestructura de TI correcta pero su aplicación ahora está siendo manejada por varios proveedores de la nube como Amazon, Microsoft, Google, etc.

El proveedor de la nube le cobrará en función de la cantidad de horas que utilizó sus servidores, puede configurar la redundancia en sus servidores lo que garantiza una alta disponibilidad de su aplicación, cualquier actualización de hardware o falla será manejada por su proveedor de nube evitando costos de mantenimiento significativos, y ademas puede configurar el autoescalado en su flota de servidores, es decir, siempre que haya un aumento en el tráfico de su aplicación, su proveedor de la nube escalará automáticamente sus servidores.

Existen 3 grandes jugadores en el mercado de nubes. #Amazon, #Microsoft y #Google. Amazon es el pionero y líder en market share con sus servicios #AWS. Microsoft tiene la mayor rentabilidad de servicios en nube por medio de #Azure. Y Google lidera el cuadrante de herramientas para trabajar con datos, ML y IA. En este tutorial vamos a trabajar con Azure.

¿Porque Azure?

Nuestra compañía tiene una orientación clara al uso de los datos para crear informacion que permita optimizar las decisiones de una empresa, mejorar los modelos operativos y redefinir las industrias, y en ese sentido, encontramos nuestra esencia muy acorde a las ideas de Satya Nadella, CEO de Microsoft y quien reconvirtió la compañía a este nuevo modelo. Azure nos asegura una gran cartera de servicios de Datos, tanto bases relacionales, NoSQL, Hadoop, como herramientas de Datalake, Machine Learning, IA e IoT.

La tecnología puede permitir que millones de personas participen en la sociedad de forma plena.

Satya Nadella.

¿Que es Azure?

Azure es una plataforma abierta y flexible que provee todos los servicios para la construcción rápida, despliegue y administración de soluciones basadas en la nube. Ofrece una amplia gama de servicios basados en uso, a través de aplicaciones, cómputo, almacenamiento y redes. Le permite construir aplicaciones usando cualquier lenguaje, herramienta o marco en un portal completamente automatizado de auto-servicio que habilita el aprovisionamiento de recursos escalables en minutos.

Microsoft define a Azure como “una creciente colección de servicios integrados en la nube, que los desarrolladores y los profesionales de TI utilizan para crear, implementar y administrar aplicaciones a través de nuestra red global de centros de datos”.

Azure tiene más de 20 categorías de servicios para ofrecer, hemos dividido los servicios de Azure en los siguientes dominios:

  • Cómputos
  • Almacenamiento
  • Base de datos
  • Seguridad
  • Administración
  • Varios

Cómputos: Son aquellos servicios referidos al despliegue de equipamiento para procesamiento, como las Virtual Machines que son equipos que llevan un sistema operativo Linux o Windows, y que permite trabajar con las mismas libertades que en un servidor físico. Dentro del servicio de Cómputos, se encuentran servicios de ejecución de tareas Batch y el Autoscaling.

Almacenamiento: Son aquellos servicios que permiten almacenar informacion, crear discos de VM, compartir filesystems, etc. Azure ofrece maquinas virtuales con distintos grados de performance para que su rendimiento sea mejor según los discos elegidos, como así también, discos mas performantes equivalen a precios mas elevados. Así también se debe considerar distintos tipos de storages para el almacenamiento de informacion de bases de datos, discos compartidos, etc.

Bases de Datos: Dentro de este titulo, vamos a englobar no solo bases de datos tradicionales como #MSSQL, #MySQL y #Postgresql, sino aquellas bases de tipo Key-Value, Documentales, de grafos, y columnares como CosmosDB, bases de cache como Redis, y los servicios de migración.

Seguridad: En la gama de servicios de seguridad, Azure posee una gran fortaleza propia del gran desarrollo de los servicios de Active Directory, que dentro del mundo cloud habilita servicios como controles de acceso de Roles, autenticacion multifactor, Single sign on, y servicios de encriptación. Por supuesto dentro de la suite de seguridad existen opciones de Firewall, WAF, protección DDoS/Threat y provisión de certificados.

Administración: Un factor muy importante de los servicios de nube, es poder gestionar distintos factores administrativos de forma simple y por medio de roles. Para ello en Azure existen distintos servicios como Portal, la consola donde se desplegan los servicios y aplicaciones; Billing API, una herramienta que permite controlar los gastos efectuados sobre la plataforma; Cost Management, que permite optimizar los costos y maximizar los beneficios de usar Azure; Resource Health, una excelente herramienta para monitorear el estado de los servicios contratados. Ademas Azure posee una calculadora muy simple e intuitiva para calcular los costos de nuevos servicios que quieran ser montados, que evitan sorpresas futuras.

Varios: Para finalizar, y que la entrada no se extienda demasiado, mencionar que solo vimos características principales porque este tutorial esta pensado para alguien sin experiencia en la plataforma; pero existe toda una gama de productos preconfigurados a través de un Marketplace, servicios de BigData y MachineLearning, integraciones DevOps, plataformas para el despliegue de aplicaciones Mobile y IoT. En entradas posteriores interiorizaremos mas sobre aplicaciones de Datos, DevOps, Containers y Serverless, mientras tanto pueden revisar las entradas de nuestro blog.

Empresas de todo el mundo están usando Azure para impulsar su infraestructura, ejecutan un servidor web / de aplicaciones para alojar sus sitios web, aplicaciones, mantener sus archivos de forma segura en la nube, usar una base de datos administrada o implementar archivos a escala global utilizando Content Delivery Network (CDN).

¿Por donde empezar?

Para una persona que quiere iniciarse en Azure, puede comenzar creando una cuenta en https://azure.microsoft.com/es-mx/free/ y familiarizando con la interfaz, ademas de analizar rutas de educación como https://docs.microsoft.com/en-us/learn/paths/azure-fundamentals/.

Ademas viendo la calculadora de costos de los servicios https://azure.microsoft.com/es-es/pricing/calculator aprender del Pago por Uso, del ahorro por reservas de instancias, pagar menos usando mas, comparativas de como ahorrar en servicios de bases de datos respecto a AWS, etc.


Contactate

    Por favor, demuestra que eres humano mediante la selección la estrella.