MVPStream – Indexando conocimiento en Azure

El nacimiento de un proyecto a veces surge de una necesidad insatisfecha, otras veces de aprovechar una oportunidad y otras tantas de preguntarse cómo podría mejorar algo que ya existe.

Introducción

Para aquellos que no conozcan, los Microsoft MVPs conforman un grupo de profesionales destacados en diferentes áreas de conocimiento referente a tecnologías Microsoft que en la gran mayoría de los casos generan contenido (a través de presentaciones, videos, posts, etc…) para la comunidad (consumo, desarrolladores, IT, empresarial,…). La calidad del contenido generado es muy alta pero a veces, en el inmenso mar que es Internet, es difícil encontrarlo si uno no sabe dónde buscar o no sigue de alguna manera a este grupo de profesionales.

Casi todo el mundo utiliza buscadores (Google, Bing, Yahoo, y un gran etc.) para encontrar lo que busca, y estos buscadores suelen favorecer en sus resultados a páginas que cumplan con ciertos requisitos: que tengan buen SEO, que se vean correctamente en cualquier dispositivo, que tengan alta disponibilidad y baja latencia y cuyo contenido esté correctamente identificado. Lograr cumplir con estos requisitos nos garantiza tener buen tráfico y que la gente encuentre el contenido que nosotros generemos.

Pero no todo el mundo que genera contenido en sus blogs o canales conoce este tipo de conceptos (propios del mundo del desarrollo web) y a veces termina luchando para que su contenido sea descubierto o alcanzado por el público en general. Por otro lado, no todos pueden estar buscando y encontrado los blogs de cada uno de los MVPs.

¿Y si todo el contenido de los MVPs es unificado en un único sitio, diseñado especialmente para cumplir con los requisitos de los buscadores y cuyo objetivo sea generar un efecto cascada de tráfico a los sitios de cada MVP?

¿No es más fácil realizar una campaña de tráfico en un sólo sitio en lugar de en 100?

Estas son las preguntas que quise responder cuando cree MVPStream (http://mvpstream.azurewebsites.net)

Creando una arquitectura

Siendo un desarrollador especializado en Microsoft Azure busqué crear en ese contexto una solución cuya arquitectura cumpliese con todos los requerimientos:

  • Unificar el contenido sin requerir ninguna acción extra por parte de los MVPs.
  • Brindar una herramienta de búsqueda especialmente diseñada para encontrar resultados entre todo el contenido de todos los MVPs desde un mismo lugar.
  • Cumplir con los requisitos de los motores de búsqueda para optimizar el posicionamiento en los resultados de búsqueda.
  • Generar un sistema de notificaciones que permita a los interesados mantenerse al tanto de las novedades de contenido de todos los MVPs por un único canal.
  • Aumentar la exposición de los MVPs a través de páginas personalizadas.

El esquema de la arquitectura macro sería el siguiente:

Harvest

El punto inicial es poder tomar de forma periódica el contenido publicado por los MVPs registrados, para esto, utilizo un Azure Web Job encargado de hacer polling a los RSS y servicios de cada endpoint. Adicionalmente el Azure Web Job se encuentra configurado para Despliegue Contínuo a través de un repositorio de Bitbucket de forma de automatizar las actualizaciones al código. Todo el contenido descubierto por el módulo de Harvest es  al módulo de Store & Index.

Store & Index

Una vez recabados los datos de cada MVP, los mismos son almacenados en Azure DocumentDB y en forma posterior, indexados en Azure Search para proveer la funcionalidad de búsqueda enriquecida.  Los datos de cada Microsoft MVP junto con sus enlaces sociales (sitios y cuentas) también son almacenados en Azure DocumentDB aprovechando la estructura dinámica.

Display

Al final de cuentas, el objetivo final del proyecto es poder exponer toda esta información y dirigir tráfico a los contenidos generados, para eso, utilizo una Azure Web App configurada utilizando Despliegue Contínuo desde Bitbucket, con escalado dinámico en base a la demanda e implementando un entorno de producción y otro de staging con swapping automático para poder actuar en caso de algún problema con algún deploy.

Técnicamente la Web App fue creada usando DNX y MVC 6 utilizando sólo Visual Studio Code. Utiliza Material Design Lite como framework de renderizado.

La Web App realiza las búsquedas en Azure Search donde utilizo Scoring Profiles para definir patrones de búsqueda con pesos personalizados (ej. menciones en los títulos por sobre el contenido, contenido más reciente por sobre más antíguo) y encontrar los resultados óptimos para la búsqueda realizada.

La estructura del sitio está enfocada en estructuras de meta-datos que sean SEO-friendly, de forma tal de poder brindar el mayor contenido posible y con el mayor detalle a los crawlers de buscadores. Cada MVP tiene su propio micrositio donde todo su contenido se encuentra disponible, además de exponer sus enlaces sociales.

 

Internamente para poder compartir código entre la Web App y el Web Job utilizo MyGet para crear paquetes de tipo NuGet referenciables por todos los proyectos.

Notify

Una vez que tuve todo funcionando, recibí el feedback de algunos MVPs consultándome cómo podían subscribirse a nuevo contenido del sitio. Lo primero que se me ocurrió era implementar una subscripción del tipo Newsletter, pero mantener y enviar emails me pareció inpráctico, por lo que opté por utilizar Twitter como plataforma de notificaciones. Creando una cuenta a la cual los interesados pudiesen seguir, restaba sólo pensar cómo generar los Tweets.

La solución final incluye el uso de Azure Storage Queues y una Azure Logic App llamando a dos Azure API Apps. Cuando el módulo de Store & Index guarda nuevo contenido, genera mensajes en la Storage Queue. Periódicamente la Logic App se dispara y con su primer API App lee los nuevos mensajes en la Queue, la cual los desencola y envía a la segunda API App que es una instancia de la Twitter API App del Marketplace.

Próximos pasos

Actualmente el sitio sólo tiene contenido en español, aunque su estructura permite contenido multilenguaje, por lo que me gustaría poder llegar a integrar MVPs de habla inglesa u otros idiomas.

 


Also published on Medium.

3 comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *