En esta sesión hablaremos de buenas prácticas trabajando con Asp.Net Core y de cómo sacarles el máximo partido a las nuevas mejoras introducidas en la plataforma.
Entre otras cosas, veremos:
Intrumentación de código
Estrategias de resiliencia
Health checks para orquestadores
Problem details para estandarización de errores
Api Behaviour para configurar comportamientos en las peticiones
Pipes en el contexto Http para mejora del rendimiento
Endpoint routing
Nuevo middleware de autorización desacoplado de MVC.
Estrategias de despliegue y testing con Docker
4. Instrumentación de código
Capacidad de controlar o medir el nivel de
rendimiento de un producto, diagnosticar errores y
escribir información de rastreo.
7. ¿Qué es la resiliencia?
"Es la capacidad de absorber o evitar daños sin
sufrir un fallo completo".
8. ¿Qué es Alta Disponibilidad?
“Shit will happen, por lo que un sistema debe estar
diseñado para estar siempre disponible para los
consumidores, incluso cuando algunas de sus partes
están fallando".
11. Health Checks y Kubernetes
Lo primero, es configurar y exponer tus health checks:
12. Alta disponibilidad y tolerancia a fallos
Una aplicación puede sufrir
un deadlock, pero como su
proceso sigue en ejecución
Kubernetes piensa que todo
está correcto.
… y continua enviando
peticiones al contenedor
13. Liveness probes /health
• Nos permiten configurar tests para evaluar
que un contenedor está funcionando
correctamente.
• Podemos configurar pruebas TCP, HTTP ó
ejecución de un commando.
• Si la prueba de salud no es satisfactoria,
Kubernetes reinicia el contenedor
14. • Nos permiten configurar pruebas para evaluar
que nuestra aplicación y sus dependencias
están disponibles para atender peticiones
• Si un contenedor no está “ready”, será
excluido del balanceador de carga y no se
enviarán peticiones
Readiness probes /ready
16. ¿Cuántas veces te has
montado tu propio
sistema de errores en tu
REST API?
¿Qué ocurre cuando un
cliente consume diferentes
APIs?
17. Problem details (RFC7807)
• Un standard para normalizar los mensajes de
errores en nuestras REST APIs.
• Estructura JSON
18. Asp.Net Core ApiController y ApiBehaviourOptions
• Inferencia de valores de una petición http
- Valores de ruta (Segmentos del path)
- IFormFile, IFormFileCollection desde el Form
- Parámetros complejos desde el Body
- El resto de parámetros desde la Query string
• Filtro automático para evaluación del ModelState
• Personalización de las respuestas de Model States inválidos
19. HttpContext Pipes
Alto rendimiento con menos allocations en memoria
System.IO.Pipelines es una librería diseñada para facilitar la
ejecución de Código I/O de alto performance en .NET
Esta librería nace del esfuerzo puesto por el equipo de .Net
Core en hacer de Kestrel uno de los servidores web mas
rápidos de la industria.
20. HttpContext Pipes
Alto rendimiento con menos allocations en memoria
Esta basada en la utilización de Span<T> y Memory<T>,
apis que son ya compatible con la mayoría de clases del
framework
El equipo de Asp.Net expone en el HttpContext un pipe de
lectura y otro de escritura desde la version 3.0
22. Endpoint Routing
ASP.NET Core 2.1 nos permitía crear pipelines
completos (Middlewares), pero MVC era un
framework completo que imponía cierto elementos
como:
• CORS
• Autorización
23. ¿Pero que pasa cuando tu
middleware tiene que hacer
uso de autorización o tienes
que habilitar CORS para un
pipeline concreto?
¿Qué pasa si quiero crear una
API ligera?
27. Estrategias de despliegue y testing con Docker
• Instalación/Configuración
• Redes
• Repetibles
• Stubs
• Mantenimiento
Imágenes
Red interna
Creación al vuelo de contendores
Integración real
Tags