S

super-dev — full-stack

@super-dev.app · Full-stack · ★ disponible para proyectos
12,8k suscriptores·47 vídeos·Activo desde 2017

Desarrollador full-stack .NET / Angular con perfil DevOps en Azure Cloud. También cómodo con Flutter + Firebase. Construyo productos, los despliego, los monitorizo.

Volver a los artículos
{ }
.NET
.NET

Estrangular un monolito .NET 8 sin romper nada

Artículo 1 de 5 — El .NET moderno
APIs mínimas, CQRS, gRPC, source generators: .NET 8 limpio y testeable, sin complicaciones.

Rara vez se hereda un greenfield . Lo más frecuente es un monolito .NET que lleva ocho años en producción y que nadie se atreve a tocar. El patrón Strangler Fig permite reemplazarlo pieza por pieza , sin big-bang y sin ventana de corte.

El principio

Se coloca una fachada delante del monolito y luego se redirige una ruta a la vez hacia un nuevo servicio. Mientras una funcionalidad no haya sido reescrita, sigue pasando por el código antiguo. El día en que la última ruta cambia, el monolito está muerto — estrangulado.

Una anti-corruption layer

El nuevo código nunca debe hablar el lenguaje del legacy. Se interpone una anti-corruption layer que traduce los modelos del mundo antiguo al nuevo:

C#
1public sealed class LegacyOrderTranslator
2{
3 public Order ToDomain(LegacyOrderDto dto) => new(
4 Id: new OrderId(dto.ORDER_ID),
5 Total: Money.FromCents(dto.TOTAL_CENTS),
6 PlacedAt: DateTime.SpecifyKind(dto.DT, DateTimeKind.Utc));
7}

Enrutar en el nivel correcto

El cambio se realiza idealmente en el nivel del reverse proxy (YARP, Nginx) y no en el código, para mantener los dos mundos perfectamente aislados. Con YARP , una simple ruta de configuración es suficiente para desviar un camino hacia el nuevo servicio.

  • una ruta migrada → nuevo servicio
  • una ruta no migrada → monolito
  • un canary → 5 % del tráfico, luego 100 %

Medir antes de cortar

Cada ruta migrada se acompaña de un shadow traffic comparado con la respuesta anterior antes de cortar definitivamente. El código antiguo solo se elimina cuando está probado muerto : mientras una llamada todavía pase por él, permanece. La telemetría se convierte entonces en el árbitro de la migración.

Estrangular no es reescribir más rápido. Es reescribir de forma reversible : en cada etapa, se puede volver atrás con una sola línea de configuración.
super-dev — portfolio.app
// Continuar en .NET
ƒ()
Minimal APIs + EF Core: una API .NET 8 limpia
8 min • 3,1k lecturas
CQRS y vertical slices sin sobreingeniería
7 min • 2,3k lecturas
gRPC entre microservicios .NET
9 min • 1,8k lecturas