Grow IT, Best Place to Code 2020 «Categoría ISV»

Por segundo año consecutivo fuimos reconocidos como Best Place to Code, la iniciativa de Software Guru para destacar a las empresas desarrolladoras que mejores condiciones y oportunidades laborales brindan a sus colaboradores, pero no solo eso, esta vez logramos el ¡primer lugar en nuestra categoría!

Para la edición 2020 fueron evaluadas más de 30 firmas de software con sede tanto en México como en otras latitudes. El resultado, luego de un estudio realizado por los mismos colaboradores de la organización, posicionó a Grow IT a la cabeza de la categoría Startup e ISV. “Aparecer de nuevo en el ranking nos alegra enormemente porque ratifica que vamos por el camino correcto, de igual forma, haber estado en el mismo grupo que otras empresas que tienen de nosotros un gran reconocimiento y respeto nos ha permitido saber también que nuestro nivel en términos laborales es igualmente excepcional”, dijo Wilbert Betanzos, director general. 

Dado que el proceso para ingresar al listado consta de un extenso examen que es realizado por los mismos integrantes de la tecnológica, partiendo de múltiples variables como infraestructura, desarrollo profesional, diversidad e inclusión, compensación y cultura, es internamente que se decide si la compañía cumple los parámetros adecuados para ser acreditada como Best Place to Code. “La metodología dota de credibilidad la evaluación y representa una ocasión valiosa para que conozcamos las métricas de lo que debemos perfeccionar y garantizar un entorno laboral agradable y con proyección al futuro. Creemos que, si pasamos tantas horas al día en el trabajo, debemos procurar disfrutarlo, porque cuando ocurre de esa manera, al final logras lo que te propones, inspiras a otros y se ve un impacto en el resultado con los clientes”, resaltó Wilbert. 

Frente a la edición pasada, en que Grow IT obtuvo el segundo lugar en la clasificación global, el director aseguró que en esta oportunidad se pudo constatar que se mejoró un aspecto cardinal por el valor que aporta a la compañía, el de la equidad de género: “Gestionar este punto significó un reto porque nos desenvolvemos en un área donde las mujeres participan en un porcentaje menor, así que, para mejorar las métricas, las líderes de la empresa participaron en varios foros que promueven el mercado laboral de las profesionales en tecnología, eso nos facilitó difundir nuestro proyecto, hacer algunas incorporaciones y acortar la brecha”, precisó.

Como las tendencias laborales han manifestado en los últimos años, hoy son las personas quienes deciden dónde trabajar, por lo que el esfuerzo por alcanzar la excelencia en la empresa no debe hacer foco únicamente en el cliente; ahora más que nunca el desafío es hacia dentro de la organización y contempla movimientos cargados de principios y valores, con Best Place to Code, en Grow IT se refrenda el compromiso.

https://bestplacetocode.com/#block-views-block-recent-listings-block-2

Servicios Cognitivos de Microsoft «Custom Vision»

En recientes fechas hemos escuchado noticias respecto a la inversión de Microsoft en México, uno de los rubros que captó mi atención fue el uso de tecnología de inteligencia artificial para el monitoreo de tiburones pelágicos. Si han seguido mis entradas al blog la aplicación de inteligencia artificial para la resolución de problemas es un área donde tengo especial interés, así que me dispuse a escribir una entrada al blog a manera de introducción de alguno de los servicios que Microsoft tiene disponibles para el uso de funciones existentes de inteligencia artificial.

En entradas posteriores profundizaremos en como consumir alguna de estas funciones a través de código para agregarla en nuestras aplicaciones y examinaremos lo que hay en la iniciativa “AI for Earth” que es la que será utilizada para el programa de conservación del tiburón, la intención inicial de esta entrada es dar un marco general de las capacidades e iniciaremos con el servicio denominado “Custom Vision”.

Empezar a utilizar el servicio de custom visión es muy sencillo, desde un browser accedemos a https://www.customvision.ai/ y accedemos usando una cuenta de Azure.

Al acceder nos encontramos con esta pantalla y al dar click en New Project podremos definir el proyecto en el que estamos interesados.

En esta ocasión queremos crear un clasificador de imágenes, es decir, una inteligencia que al suministrarle una imagen pueda determinar a qué categoría pertenece.

Para crear el proyecto es necesario tener un recurso Cognitive Services de Azure, en caso de no tenerlo se puede crear en la misma pagina haciendo click en create new.

Al crear nuestro recurso debemos de introducir los datos pertenecientes a nuestra cuenta a nuestra cuenta, así como al recurso que vamos a crear. Para propósitos de este demo usaremos CustomVision.Training y F0, siendo está la opción gratuita.

Una vez creado nuestro recurso seleccionamos las opciones restantes como aparecen en la imagen y damos click en el botón de Create Project.

Toda inteligencia artificial debe de tener ejemplos de entrenamiento, es de estos ejemplos donde obtendrá la capacidad de diferenciar entre imágenes. Estas imágenes serán diferenciadas por etiquetas dadas por nosotros. Un bonito ejemplo es el siguiente:

¿Cómo logro que mi inteligencia artificial diferencié entre una deliciosa dona y mi amigo peludo dormido?

Justo como lo haría con un niño, dándole ejemplos.

En nuestro caso estos ejemplos se traducen en imágenes y alimentar estas imágenes es un proceso muy sencillo.

Dando click en Add Images podemos subir imágenes de ejemplo a nuestro proyecto.

Al subir las imágenes debemos de llenar el campo My Tags, estas serán las etiquetas sobre las que la inteligencia clasificará.

Una vez que el proyecto posee al menos dos etiquetas y cinco imágenes por etiqueta podemos entrenarlo dando click en el botón Train. Para este ejemplo basta seleccionar la opción de Quick Training.

Una vez entrenado nos encontraremos con esta pantalla.

Los valores de Precision y Recall determinan que tan buena es la inteligencia para determinar a qué etiqueta corresponde cada ejemplo. Precision dice que porcentaje de etiquetas determinadas por nuestro sistema fueron correctas, Recall nos dice a qué porcentaje de etiquetas dadas por nosotros fueron correctamente seleccionadas. Si nuestra inteligencia hubiera asignado a todas las imágenes la etiqueta de Dona, el valor de Precision en Dona sería de 100% ya que todas las donas fueron correctamente clasificadas, sin embargo, el Recall de Amigo sería de 0% ya que no clasificó ningún Amigo correctamente.

En nuestro caso un valor de 100% es excelente, pero esto sólo garantiza que nuestro modelo es capaz de diferenciar ejemplos que nosotros hemos etiquetado. ¿Será capaz de diferenciar imágenes que no ha visto?

Al dar click en Quick Test podemos averiguar esto.

Pues sí, con los ejemplos dados nuestra inteligencia obtuvo suficiente información para diferenciar estas dos imágenes.

Hagamos el ejercicio un poco más difícil.

Estos cuatro caracteres pertenecen al idioma japonés, en particular dos de ellos pertenecen al silabario llamado Hiragana y los otros dos a uno llamado Katakana. Los caracteres pertenecientes al Katakana son formados generalmente con rectas y el Hiragana con curvas. Veamos si la inteligencia puede determinar cual pertenece a cuál.

De la misma manera que en el ejemplo anterior debemos proporcionar imágenes que representen nuestras etiquetas, en este caso Hiragana y Katakana.

Entrenamos y los números nos dicen que todo salió bien, sin embargo…

Error, este carácter no es Katakana pero la inteligencia está muy segura de que lo es. ¿Significa entonces que nuestro proyecto ha fracasado? Para nada, ante errores de clasificación la mejor solución usualmente es alimentar mejor y más datos a nuestra inteligencia.

Incrementando la variedad y cantidad de ejemplos proporcionados mejoró dramáticamente la clasificación de nuestro sistema al punto que realice un trabajo de reconocimiento de buena calidad, todo esto sin necesidad de codificar nada.

Si estamos interesados en realizar un demo o prototipo usando la tecnología dada por Microsoft, la herramienta de customvision hace la creación de este fácil y rápida.

Enviar información de D365F&O a un Data Lake

El cambio que representa el cómo se almacena y se accede a los datos en Ax 2012 vs Dynamics 365 F&O viene de la fuente de información, ya que los datos ahora están en la nube. Anteriormente era posible –aunque no recomendable- acceder directamente a la base de datos de Ax 2012, sin embargo, en D365F&O esta característica ya no existe, aunque Microsoft ofrece soluciones alternas.

Actualmente la base de D365FO está diseñada para trabajar con la aplicación eficientemente para las transacciones de procesos, no para ejecutar análisis. De aquí se desprenden los dos grandes retos al momento de trabajar con la extracción de grandes volúmenes de información en D365FO.

Uno de ellos es al momento de trabajar en la extracción de grandes volúmenes de información en D365FO y saber elegir cuál de las herramientas utilizar, encontrándonos con Entity Store, Data entities, OData, Data lake, Power BI.

Adicional a esto, siempre se busca tener el mejor desempeño en la extracción de datos, ya que los datos se encuentran en tablas altamente normalizadas, lo que complica un poco la lectura de datos.

Entity Store (Ax Data Warehouse – AxDw)

El Ax Data warehouse contiene una copia de datos de una o más bases de datos y lo pone a disposición para análisis e informes. Los datos que contiene están estructurados en un diseño optimizado para informes. Las reglas definen cómo se conectan o relacionan los registros de la base de datos.

Caracteristicas:

  • Optimizado para grandes cantidades de data workloads
  • Reportes embebidos directamente dentro de D365 app
  • En VS se construye y se realiza el deploy de Aggregate Measures. El entity store se actualizará al enviar info hacia AxDw desde D365F&O.
  • Power BI puede leer directamente desde el AxDw, haciendo query directo.

Entity Store (Data Lake)

Un data lake es un repositorio de almacenamiento que mantiene los datos en su formato nativo (estructurado o no estructurado) hasta que se necesite. Un diseño de almacén de datos tradicional requiere datos altamente estructurados. Un lago de datos puede almacenar grandes volúmenes de datos de dispositivos sensores IoT, aprendizaje automático y grandes fuentes de datos. Debido a que la información no tiene que ser limpiada o indexada por adelantado, hay un gasto mínimo.

Se busca que el Data Lake complemente al AxDW, no que lo sustituya, ya que el lago va a necesitar un proceso alterno para catalogar y limpiar los datos, a diferencia de AxDW donde los datos ya estarán indexados y optimizados adecuadamente.

Tablas principales, entidades de datos y Aggregate Measures definidas en aplicaciones de Finance and Operations estarán disponibles en su propio lago de datos (Data Lake Storage Gen2). Los datos se actualizan y se mantienen actualizados. No es necesario administrar la programación de exportación.

Las tablas principales, las entidades y las medidas agregadas se definen en Common Data Model junto con atributos, definiciones y relaciones ricas. Los datos exportados al lago de datos se describen en Common Data Model. La estructura de datos en Data Lake Storage Gen2 refleja la organización de las definiciones de datos en Common Data Model. Los datos almacenados en Data Lake Storage se describen utilizando metadatos, según define la especificación del lenguaje Common Data Model. Esto permite que las herramientas existentes entiendan la semántica y las relaciones de datos: se alimentan de datos en el lago de datos.

En VS se construye y se realiza el deploy de Aggregate Measures. El entity store se actualizará al enviar info hacia el Data lake.

Habilitar el Entity Store para enviar a un Data Lake

Paso 1. En D365F&O habilitar Entity Store para integración con Data Lake

Primero de habilita la actualización automática del Entity Store, antes de habilitar la integración con Data Lake, desde Administración del sistema – Configurar – Almacén de entidades

Almacén de datos (Entity store)

En los mensajes, visualizamos la opción de habilitar la actualización automática, una vez cambiada la selección, no es posible regresar a como originalmente estaba y así nos lo muestra un mensaje.

Después de esto, se visualiza la nueva pantalla donde visualizamos todos los Aggregate Measurements, estos son los mismos que se muestran del lado de VS en el nodo de Analytics – Perspectives – Aggregate Measurements

En cada Aggregate measurement es posible habilitar la actualización por cada una donde podemos elegir la periodicidad.

Paso 2. Datos del Entity Store en el Azure Data Lake (full push y trickle feed)

Antes de llevar los datos al Data Lake, son necesarios los siguientes requisitos:

  • Crear una cuenta de storage
  • Crear un Key Vault y un secret
  • Registro de la aplicación
  • Agregar un service principal al key vault

Crear una cuenta de storage. Debe crearse en la misma localidad que donde se encuentra el almacenamiento de nuestro D365F&O, en este caso, en la imagen se muestra en Centro Sur de E.E. U.U.

Para habilitar nuestra cuenta de almacenamiento como un Data Lake, en opciones avanzadas, seleccionamos la opción de «Data Lake Storage Gen2»

Una vez creado el almacenamiento, copiamos la cadena de conexión que se ubica en las claves de acceso, entro de «Configuración»

Crear Key Vault. Dentro de azure, el siguiente paso es crear nuestro Key Vault configurando la región igual a la cuenta de almacenamiento e igual a D365F&O

Posterior a esto, se creará un secret, colocando en «Value» la cadena de conexión que copiamos de nuestra cuenta de almacenamiento

Registro de la aplicación. Se crea un registro de aplicación otorgando permisos al Key Vault y otorgando permisos delegados

Permisos en registro de aplicación
Permisos delegados en registro de aplicación para Key Vault

Se crea el nuevo secreto

Secret en registro de aplicación

Agregar un service principal a la Key Vault.
En la Key Vault que creamos, vamos a la configuración para agregar una nueva directiva de acceso (Access policies).

En permisos clave (key permissions) y en Permisos de secretos (Secret permissions) seleccionamos: obtener y enumerar (Get y List).

En la opción de “Seleccionar la entidad de seguridad” (Select principal) agregamos el nombre del registro de aplicación que hicimos anteriormente.

Finalmente copiamos el nombre del DNS de nuestro Key Vault porque se va a usar en la configuración del data lake.

Paso 3. Configuración del Data Lake en dynamics. En Administración del sistema – Configurar – Parámetros del sistema (System administration > Set up > System parameters)

Parámetros del sistema – configuración de Data Lake

Validación de parámetros, hacemos clic sobre «Probar Azure Key Vault» y después sobre «Probar Azure Storage», si la validaciín es correcta, con esto nos aseguramos que los valores que colocamos en cada campo son correctos y que podemos comenzar a enviar los datos del Entity Store hacía el data lake.

Vemos el resultado de la sincronización en Azure Storage Explorer y visualizamos los csv en cada aggregate measurements

También es posible visualizarlos en el portal de azure:

Y si abrimos alguno de los csv dentro de los aggregate measurements podemos ver la información:

Visualización de csv en data lake

AI Builder Power Apps

En continuación de la entrada anterior donde utilizamos uno de los servicios cognitivos ya previamente construidos, lo que vamos a hacer en esta ocasión es ejemplificar como ir integrando estas características a nuestras aplicaciones, para ello vamos a ilustrarlo desde Power Apps.

Power Apps es un conjunto de herramientas diseñadas por Microsoft para agilizar y simplificar el desarrollo de aplicaciones pequeñas. El proceso de desarrollo se simplifica bastante para usuarios acostumbrados al uso de funciones como las encontradas en Excel o Power Bi y para el público en general al necesitar mínima o nula cantidad de código escrito.

Otra característica positiva de Power Apps es la facilidad con la que interactúa con otros productos de Microsoft y en particular con la gran oferta de servicios de inteligencia artificial que existen.

Para ejemplificar lo sencillo y rápido que es crear una aplicación que aproveche las capacidades de reconocimiento de la inteligencia artificial, veamos cuanto tiempo nos toma tener una app que me facilite capturar elementos de varios formularios.

Digamos que nos interesa agilizar el proceso de captura de una gran cantidad de formularios, necesitamos que nuestra app sea capaz de reconocer campos y los valores que se encuentren  en ellos.

De las multiples opciones que tenemos en la secciòn de AIBuilder existe un modelo llamado FormProcessing, que como su nombre dice, tiene la capacidad de procesar imágenes de formularios y extraer los campos y valores.

El proceso de entrenamiento te pide subir al menos 5 documentos con el mismo formato, posteriormente estos serán analizados y si se logro identificar los campos, podremos elegir aquellos que queramos.

Terminado el proceso de entrenamiento podemos usar nuestro modelo en una app.

Una vez publicado el modelo Podemos crear una nueva app, haciendo esto nos encontraremos en Power Apps Studio. Por ejemplo, una app que me ayude a procesar cuestionarios rápidamente o formularios.

Usando Power Apps Studio esto se puede lograr en menos de 10 minutos

Power Apps Studio usa una sencilla interfaz donde no es necesario escribir código para construir un producto. La ventana de la izquierda muestra todos los elementos en nuestra app, también tiene la función de añadir nuevos elementos. La ventana de la derecha muestra las propiedades del elemento seleccionado y la ventana central muestra la vista del programa que estamos creando.

Encontraremos que nuestra aplicación tiene un elemento llamado FormProcessor1, este es el modelo de inteligencia que creamos. Para este ejemplo creamos 3 etiquetas o labels.

Posteriormente en la Ventana de la derecha de cada etiqueta en el campo Text llenamos como en la imagen. Lo que esto hace es acceder al valor de los campos que nuestro modelo analizó y poner estos valores en la etiqueta.

Este pequeño ejemplo se puede escalar y potencialmente puede ayudar a procesar exámenes para un profesor o peticiones gubernamentales. Todo esto se puede lograr en muy poco tiempo y con muy poca necesidad de conocimiento de inteligencia artificial o programación, haciendo esto una herramienta muy útil para una gran cantidad de persona

Consumir un servicio SOAP Custom utilizando SoapUI

En algunas ocasiones es necesario consumir un servicio SOAP que codificamos para Dynamics 365 Finance and Operation, desde .Net el proceso de autenticación es más claro pero cuando interactuamos con algún otro lenguaje de programación es muy útil proporcionar el ejemplo de consumo en una herramienta como SoapUI.

Para ello vamos a realizar los siguientes pasos :

Primero creamos nuestro proyecto de tipo SOAP desde el botón SOAP e ingresamos el WSDL y el nombre.

Una vez creado nuestro proyecto lo primero que vamos a configurar va a ser un TestCase para poder generar un token y así poder consumir el servicio. Dentro del proyecto agregamos un nuevo elemento de tipo TestSuit y a su vez dentro de este agregamos un TestCase.

Finalmente, dentro de nuestro TestCase creamos un Step de tipo HTTP Request, asignamos un nombre.

Ya dentro de la ventana de configuración en el campo EndPoint ingresamos la url junto con el tenant id del cliente https://login.microsoftonline.com/”Id tenant”/oauth2/token, después

Agregamos los siguientes 4 parámetros en los 3 últimos utilizaremos los datos del cliente para llenar los campos value. Finalmente, el campo method lo cambiamos a POST.

Ya configurado nuestro TestCase lo ejecutamos y nos mandara como resultado el token y el tipo que necesitamos. Copiamos el token y volvemos a nuestro request de prueba que genero automáticamente SOAPUI. 

En la pantalla de nuestro request abrimos la pestaña de Header y agregamos una línea con nombre Authorization y en value escribimos el tipo de token seguido de un espacio y el token que nos generaron los pasos anteriores. Tener cuidado de no remover la palabra “Bearer”

Una vez realizado, puedes llenar el request con los datos específicos del servicio.

Azure Cosmos DB

En palabras de Microsoft, Cosmos DB es su servicio de base de datos multimodelo globalmente distribuida. Al ser globalmente distribuida permite la replicación y el uso de la base de datos sobre las regiones de Azure con unos cuantos clics y en muy poco tiempo. El ser multimodelo significa que no está atado a un modelo de datos como el relacional y deja al usuario la elección del modelo que mejor aplique para su caso de uso. 

Cosmos DB tiene otras características importantes, que fueron diseñadas para cumplir con los siguientes objetivos. 

  • Permitir a los clientes escalar el rendimiento y almacenamiento en demanda 
  • Permitir construir aplicaciones para misiones criticas de respuesta rápida 
  • El sistema debe estar siempre disponible 
  • Permitir a los desarrolladores elegir el nivel de trade-off entre consistencia y velocidad para su aplicación 
  • Automatizar la indexación si es deseado y deshacerse del uso de esquema de base de datos 
  • Soportar múltiples modelos de datos 

Cosmos DB entonces es ideal para algún proyecto o aplicación cuyas demandas puedan ser satisfechas por el cumplimiento de los puntos anteriores. 

Creando una cuenta de Cosmos DB  

Una vez que hemos accedido a nuestra cuenta de Azure buscamos y damos clic en agregar 

Nos mostrará la siguiente pantalla: 

La elección del API es muy importante. Como se ha mencionado Cosmos DB es un sistema multimodelo. Concretamente el nucleo de Cosmos es un sistema basado en ARS (Átomo, Registro y Secuencia) que es traducido al modelo de datos que hemos elegido. Al elegir un API elegimos una representación de nuestros datos así como el lenguaje que usaremos para interactuar con el. 

Las opciones son: 

  • Core (SQL). Modelo base de datos documental con lenguaje SQL. 
  • Mongo DB. Modelo base de datos documental con lenguaje Mongo DB y compatibilidad con herramientas de Mongo DB. 
  • Cassandra. Modelo base de datos columna-familia con lenguaje  Cassandra y  compatibilidad con herramientas de Cassandra. 
  • Tabla de Azure. Para aplicaciones de Azure Table Storage. 
  • Gremlin. Modelo base de datos de grafos con lenguaje Gremlin y compatibilidad con herramientas de Gremlin. 

Una vez creada la cuenta de Cosmos no podemos cambiar este API ni la manera como interactuar con él. En este tutorial usaremos Core (SQL). 

Redundancia geografica y escrituras en varias regiones habilitan los servicios globales pero estos pueden ser habilitados posteriormente. 

La sección de red nos servirá para gestionar los accesos a nuestra cuenta o si tenemos un servicio de redes virtuales. 

Una vez creado nuestro recurso accedamos a él y en la sección de explorador de datos veremos esta pantalla. 

Para empezar a trabajar con nuestros datos debemos crear una base de datos y un contenedor, esto se hace seleccionando el boton nombrado de esa manera. 

Dentro de los campos pedidos están las opciones de “Provision database throughput” y “Partition Key”.  

Provision database throughput establece un limite maximo de RUs para todos los contenedores de esa base de datos. Un RU (Request Unit) es la unidad manejada por Cosmos para determinar los costos y se usa para medir el numero de operaciones en la base de datos. Si aprovisionamos nuestra base de datos con 400RU/s seriamos capaces unicamente de realizar 400 operaciones de lectura sobre un documento de 1Kb. Para calcular con mayor detalle los costos se puede usar esta herramienta.  

Si elegimos aprovisionar la base de datos significará que cualquier contenedor dentro de esta base tendrá a lo más dicho rendimiento ya que las RUs se comparten entre todos los contenedores. Una mejor opción sería aprovisionar a nivel contenedor, que es posible. 

La opción Partition Key determina un campo de nuestro documento como llave de particiones. Es recomendado usar un campo que pueda garantizar particiones de tamaño similar. Dado que el rendimiento se distribuye entre las particiones el no seleccionar una llave de partición adecuada podría resultar en recursos no utilizados y cuellos de botella de rendimiento en las particiones más grandes. 

Habiendo creado nuestra base de Datos y Contenedor nos encontramos con esta pantalla. 

En las opciones de la izquierda vemos que podemos almacenar Items (Documentos JSON), así como Procedures, Triggers y funciones, estos últimos serán útiles si estamos interesados en implementar transacciones ya que Cosmos solo proporciona un ambiente transaccional para operaciones llevados a cabo dentro de ellos. 

El usar el API de SQL facilita a aquellos familiarizados con el lenguaje al no tener que aprender algún otro medio para interactuar con los datos. Aunque nuestros datos sean de tipo JSON podemos usar el SQL familiar para operar con ellos. 

Para ejemplificar su uso, creé dos documentos que se muestran a continuación. 

Podrán notar que ambos tienen una estructura distinta con campos distintos, esto es gracias al diseño sin esquema de Cosmos DB donde incluso podemos crear elementos complejos como arrays.

Además de esto en ningun momento tuvimos necesidad de crear indices, esto es gracias a que Cosmos se encarga automaticamente de la indexación. Para tener información a detalle sobre como los crea pueden consultar este documento.

Como ejemplo de las capacidades de SQL en cosmos estas imágenes muestran dos queries basicos.

Aunque el lenguaje es similar a SQL, existen escenarios que requieren el uso de funciones especiales. Adelante tenemos un ejemplo que en SQL clásico podría ser resuelto con el uso de la palabra reservada LIKE. En este caso, ya que los campos pueden ser desde strings hasta arrays debemos de usar la función Contains.

Utilizando el API podemos también interactuar con nuestra cuenta de Cosmos, podemos crear bases de datos y contenedores así como manejar la ingesta y manipulación de los datos.

Para mayor información pueden consultar los siguientes links.

Información Técnica.

Transacciones en Cosmos DB.

Particiones.

Soluciones de almacenamiento en Azure

¿Qué es Azure?

Azure es un servicio de computación en la nube extremadamente flexible con tipos de servicios PaaS (Plataforma como servicio), SaaS (Software como servicio) o IaaS (Infraestructura como servicio) que soporta además arquitecturas completamente en la nube o hibridas, dejando así a los desarrolladores enfocarse en el código sin lidiar con mantenimiento de servidores o gestión de hardware y software.

Una parte importante de los servicios que Azure oferta es que una gran cantidad de ellos se paga por lo que se usa, de esta manera se incentiva la experimentación y la adopción de nuevas tecnologías. Si quisiéramos que nuestra empresa use un SQL Data Warehouse, nos tomaría probablemente semanas o meses para que éste se encuentre operativo on-premise además de la alta inversión inicial. Azure nos permite tener este servicio funcionando en minutos.

Dentro de las muchas ofertas tecnológicas de Azure, una de ellas es el manejo de datos y es en la que se enfocarán estos artículos.


Esta imagen muestra los servicios de Azure en datos, aunque no está actualizada nos servirá en este artículo ya que ilustra la intención de Microsoft de mantenerse en la vanguardia tecnológica y ofrecer un servicio completo a diferentes tipos de necesidades que el cliente o el desarrollador tenga, todo esto en la nube.

Para resumir, ¿Por qué migrar a la nube, y en particular a Azure, mis necesidades de datos?

  • Facilidad de migración y gestión. La creación y gestión de servicios son fáciles y rápidos ya que pueden ser realizados desde el portal de Azure o automatizados usando Azure CLI. La migración es segura y confiable usando herramientas como Microsoft Data Migration Assistant o el servicio de Azure Data Box para grandes cantidades de datos.
  • Compatibilidad y flexibilidad. Usando servicios como Azure Data Factory se puede dirigir los flujos de datos de muchas aplicaciones de forma sencilla ya que existen conectores para SAP, Microsoft Dynamics o AWS. Azure permite también el uso de arquitecturas hibridas o completamente en la nube.
  • Tecnología de punta en unos cuantos clicks. Big Data, Machine Learning, IoT son tecnologías que están siendo usadas exitosamente por una gran cantidad de empresas. El desarrollo y la infraestructura necesaria para usarlas supone un costo prohibitivo. Azure tiene todo listo para que esta tecnología sea aprovechada por el desarrollador sin preocupaciones extra.

¿Qué servicios usar?

La gran cantidad de opciones que tenemos puede llegar a intimidar y aunque existen muchos recursos en línea para ayudarnos con nuestras dudas, algunos son contradictorios o no son del todo claros.

Para hablar con claridad acerca de los servicios de Azure debemos recordar algunas definiciones que nos ayudaran a distinguir y hacer una buena elección.

  • Datos Estructurados. Mejor conocidos como SQL, son tabulares y generalmente relacionales. Datos muy organizados que siguen un esquema.
  • Datos Semiestructurados. No necesariamente siguen un esquema y no son tan organizados. Por ejemplo, datos Json o XML.
  • Datos no estructurados. Datos difíciles de interpretar como logs binarios, vídeos o imágenes.

Además de diferentes tipos de datos hay diferencias en los objetivos de las bases de datos.

  • Transaccional. Generalmente operativas, se enfocan en garantizar velocidad e integridad al realizar operaciones. Una transacción es aquella que cumple la propiedad ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad). Por ejemplo, bases de datos bancarias.
  • Analítica. Almacena datos históricos que pueden ser usados para obtener información de negocio y alimentar el proceso de toma de decisiones. Por ejemplo, SQL Data Warehouse.

Una vez recordado estas definiciones la siguiente imagen que muestra algunos servicios importantes de Azure que pueden ser de utilidad para planear un proyecto en la nube de almacenamiento.

* CosmosDB soporta transacciones únicamente al usar Stored Procedures o Triggers

Si mi negocio necesita almacenar imágenes o vídeos para algún tipo de catálogo y no tengo interés en tecnología analítica, alguna implementación de Azure Blob Storage sería lo indicado.

Tengo necesidad de almacenar operaciones transaccionales Azure SQL DB o Azure Cosmos DB es de mi interés. Cosmos DB sería especialmente útil si los datos que voy a almacenar no siguen siempre el mismo esquema o patrón.

Azure Data Lake Gen 2 y Azure Synapse Analytics son bases de datos analíticas enfocadas a big data donde ASA(Azure Synapse Analytics) es la combinación de los servicios de SQL Data Warehouse y Data Lakes, si nuestro negocio tiene necesidad de almacenar transacciones históricas para hacer análisis buscaría usar Azure SQL Data Warehouse, si mis datos no son de bases de datos relacionales usaría Azure Data Lake Gen 2 y si tengo necesidad de ambos Azure Synapse Analytics podría ser la mejor solución.

Además de estas características otro factor que influenciará nuestra decisión es el costo ya que no todas cobra de la misma manera.

¿Por qué usar Data Lake cuando puedo usar Synapse? ¿Si sólo me interesa el almacenamiento sin los servicios de análisis aun así debería de usar un Data Lake? Para responder estas preguntas será necesario hacer un análisis de costos y Microsoft nos apoya también con esto.

Usando esta herramienta y con ayuda de documentación podemos encontrar los servicios de mayor utilidad y menor precio.

En los próximos artículos hablaré un poco mas a detalle de Azure Cosmos DB y Azure Data Lakes haciendo también una pequeña arquitectura con estas herramientas.

Crea una cuenta de Azure gratis.

Documentación.

Configuración en ADFS necesaria para consumir OData y ejemplo de consumo con Postman – Dynamics 365 Finance and Operations