28 ene 2015

[Eventos] Foro de Arquitectos

Buenas de nuevo,

Después de un tiempo son postear nada, he sacado un rato para compartir notas e impresiones del evento de foro de arquitectos realizado el día 26/01 en el parque empresarial de La Finca en las oficinas de Microsoft y que ha servido como entrada al evento que todos los desarrolladores, arquitectos y frikis de .net estamos esperando, el dotnet spain conference que se celebrará los días 27 y 28 de febrero en la escuela politécnica superior de la universidad de Alcalá. Si no has comprado tus entradas aún estas a tiempo de conseguir una, dejo a continuación la web de inscripción dónde se pueden encontrar más datos sobre el evento.

dotnet spain conference (http://www.desarrollaconmicrosoft.com/dotnetspain2015)


En cuanto a las sesiones propias del foro, decir que, han escuchado la opinión de los que solemos asistir a estos eventos y se han reducido el número de charlas, lo que ha permitido incrementar la duración de las mismas pudiendo de esta manera entrara en detalles de implementación y de código que es lo que de verdad nos gusta a los teckys.

A continuación comparto algunas de las notas de las diferentes sesiones, incluyo datos de los ponentes e información asociada a la charla si me ha sido posible encontrarla.

#1 Sesión: CQRS/ES - Cambiando tu forma de pensar

Ponentes
Roberto González (Spenta) @robertogg
Luis Ruiz Pavón (Plain Concepts) @luisruizpavon


Uso de CQRS/ES sin usar un framework de terceros.

Inicios es CQS(Command Query Separation), separara las consultas de las escrituras, CQRS se basa en este principio, todos los métodos son tipo void, a excepción de las consultas que serán las que devuelvan datos.

No es una arquitectura, es un patrón.

Gran cantidad de usuarios compitiendo por el mismo conjunto de datos, (eje: reservas en un avión, en un cine, lotería…).

Beneficios
-Aislamiento (Escritura de Consultas)
-Agilidad-Pruebas-Mantenimiento (Una vez creada la arquitectura es más fácil insertar nuevos comandos)
-Escalabilidad (Por la naturaleza de sus escenarios)

La UI lanza un comando contra la implementación de un dominio, la implementación genera un evento que supone una actualización en la BBDD y la interfaz consulta la BBDD para refrescar la información necesaria.

El uso de la cache es fundamental, el event-handler refrescará la cache, que será el origen de datos de las vistas.

CQRS propone el uso de 2 modelos de datos claramente diferenciados, uno optimizado para la escritura y otro para la lectura. Estos modelos pueden ser de diferente naturaleza (BBDD, Gestor documental, Caché…).

Consistencia Eventual (10 personas leen de una BBDD y reciben información dispar, por falta de sincronización).

Comandos
-Directivas para ejecutar una acción
-Se pueden rechazar
-0:n eventos como resultado
-Un manejador por comando
-Se pueden encolar (incrementa y potencia la escalabilidad)
-Deben ser inmutables, solo se pueden asignar valores en su construcción

Eventos
-Acción producida en dominio
-No se pueden rechazar
-Nomenclatura en pasado

Event Sourcing
-Capturar todos los cambios que se producen en la aplicación como una secuencia de eventos en el orden en que suceden
-No modelo entidad/relacion o modelo de objetos
-Todo el historial de cambios en lugar del "last-know good state"
-Casa con DDD y CQRS
(Se podrían recrear las decisiones de un cliente a la hora de añadir o eliminar elementos en su carrito de la compra)

Event Store
-Base de datos para el almacenamiento de nuestros eventos: Mejor una BBDD documentan (tipo JSON), y no una Entidad-Relación
-GetEventStore (http://geteventstore.com)
-NEventStore (http://neventstore.org) el código está en GitHub, gratuito y mantenido por la comunidad
-Base de datos relacional (JSON)
-Base de datos documental

Para reconstruir la entidad es necesario volver a obtener todos los eventos, podrían conllevar tiempo la ejecución de miles de cambios, para ello: DataSnapshot.

Cada x eventos guardamos el estado actual de nuestra aplicación. (Caché) y podemos hacer un replay de eventos desde ese momento.

Documentación
-Slides: http://www.slideshare.net/luisruizpavon/foro-arquitectos-de-microsoft-2015-cambiando-tu-forma-de-pensar
-Código: https://github.com/robertogg/loteriaes

#2 Sesión: Fuentes de datos e integración de aplicaciones

Ponentes
Unai Zorrilla (Plain Concepts) @_unaizc_
Quique Martínez (Plain Concepts) @quiqu3


NotOnlySQL
-Documentales
-Clave/Valor (Caché), es posible utilizarlo en lugar de un sistema de BBDD relacional. Redis en ASP.NET
-Grafo
-Orientado a objeto

Evitar olas, y movernos aplicando las arquitecturas según convengan al problema a modelar.

Ej: Pensar en la tasa de escritura, de lectura, procesamiento por map reduce, procesamiento por query ad-hoc…. (para tomar medidas de un molina de viento, estructurara el documento de formar que las inserciones se hagan cada 10.00 minutos, reduciendo así la tasa de escritura)

Redis Cache, servicio de Azure para el almacenamiento de clave/valor. Podríamos utilizarlo como servidor de sesiones de ASP.NET (sesión en toda la granja de servidores)

#3 Sesión: Caché en Azure a fondo

Ponentes
Fernando Escolar (tokiota) @fernandoescolar

Almacenamiento reducido y de acceso rápido

Implementación de outputcaché (caché disponible en los navegadores web):
-HTML5: CacheManifest. Agregar atributo manifest dentro del tag html: ..appcache y agregar link al text/cache-manifest
-ASP.NET MVC OutputcacheAtributte
-WebForms directiva <%OutputCache%>
Implementación de HttpRuntimeCache:
-Webforms: accesible desde código. HttpRuntime.Cache.Get, Insert…. Implementar lock(locker - debe ser private static readonly){…implementación de caché…}, otra opción es el uso de monitores.
-MemoryCache que funciona igual que el HttpRuntimeCache, pero no es específico de entorno web permitiendo su uso, por ejemplo, en aplicaciones Winforms.

Tipos de datos almacenables
-Datos de referencia, que son prácticamente de sólo lectura
-Datos de actividad, escritura-lectura, su ciclo de vida suele ser el de la sesión de un usuario en una web
-Datos de recursos, de las mismas características que los anteriores pero que cambian con mucha más frecuencia

Cache-aside pattern: patrón de implementación del uso de caché. (Verificar-Insertar-Obtener-Devolver)

Tener en cuenta que cuando un objeto cae en caché puede que no sea consistente. Habrá que implementar, si aplica, procedimientos de verificación de caché

Servicios de caché en la nube - Azure
-AppFabric (old)
-Cache In-Role (roles de azure que dedican parte o toda su existencia en el uso y gestión de caché)
-Azure Cache Services
-Virtual Machine
-Redis (es el gestor de cache state of the art)

#4 Sesión: Rendimiento y monitorización en aplicaciones en la nube

Ponentes
Luis Fraile (Visual Studio Anywhere) @lfraile

Pruebas de carga
-Rendimiento: ¿Cómo de rápido funciona mi aplicación?
-Carga: ¿Cómo respondo ante una carga esperada?
-Stress: ¿Cuándo rompe?
-Capacidad: ¿Cómo puedo crecer en el futuro?

Estrategia Pruebas
-Definir qué es lo que queremos probar
-Preparación del entorno de pruebas (instalación de herramientas, datos reales…)
-Diseño de casos de pruebas
-Configuración de la monitorización y scripting
-Smoke test (pruebas de las pruebas para verificar que todo es correcto)
-Establecer línea base
-Ejecución de pruebas de rendimiento, modificándolas hasta dar con una configuración adecuada
-Ejecución de pruebas de carga
-Informe de resultados

Beneficios Cloud Load Testing
-No se necesita infraestructuras propias
-Solo se pagan mientras se usan (pago por usuarios virtuales)
-Todos los proyectos de pruebas son compatibles
-Mucha mayor escalabilidad
*en cloud loadtesting aún no se admite el uso de plugins programados

Documentación
-Slides: http://www.slideshare.net/lfraile/validando-la-escalabilidad-de-la-arquitectura


#Bonus: Innovation Lab

Como bonus incluyo algunas fotografías de una de las salas que se encuentran en la planta baja del edificio de Microsoft en el parque empresarial de La Finca, concretamente un Innovation Lab, esto solo me hace pensar en que a algunas empresas aún les queda mucho que aprender…



Photo Gallery by QuickGallery.com

No hay comentarios:

Publicar un comentario